summaryrefslogtreecommitdiffstats
path: root/test/test_mk-origtargz
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_mk-origtargz')
-rwxr-xr-xtest/test_mk-origtargz717
1 files changed, 717 insertions, 0 deletions
diff --git a/test/test_mk-origtargz b/test/test_mk-origtargz
new file mode 100755
index 0000000..4f6d47d
--- /dev/null
+++ b/test/test_mk-origtargz
@@ -0,0 +1,717 @@
+#!/bin/bash
+
+# Copyright 2014, Rafael Laboissiere <rafael@laboissiere.net>
+# Copyright 2015, James McCoy <jamessan@debian.org>
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+
+# Load GPG
+TESTTYPE=MkOrigTarGz
+. ./lib_test_uscan
+
+if test "${1:-}" = --installed; then
+ MK_ORIGTARGZ="mk-origtargz"
+ shift
+else
+ top_srcdir=$(readlink -f "${0%/*}/..")
+ make -C "$top_srcdir/scripts" mk-origtargz
+ MK_ORIGTARGZ="perl -I $top_srcdir/lib $top_srcdir/scripts/mk-origtargz"
+ PATH="$top_srcdir/scripts:$PATH"
+ export PATH
+ PERL5LIB="$top_srcdir/lib"
+ export PERL5LIB
+fi
+PROGNAME="mk-origtargz"
+
+LC_ALL=C
+export LC_ALL
+
+setUp () {
+ TMPDIR=$(mktemp -d -p "$SHUNIT_TMPDIR" test_mk-origtargz.XXXX)
+}
+
+
+makeSubDir () {
+ dir=$1
+ shift
+
+ mkdir -p "$TMPDIR/foo-0.1/$dir"
+ touch "$TMPDIR/foo-0.1/$dir/a-file"
+ mkdir "$TMPDIR/foo-0.1/$dir/a-subdir"
+ touch "$TMPDIR/foo-0.1/$dir/a-subdir/a-file"
+}
+
+
+makeUpstreamFiles () {
+ mkdir -p "$TMPDIR/foo-0.1"
+ touch "$TMPDIR/foo-0.1/include-this-file"
+ touch "$TMPDIR/foo-0.1/exclude-this-file"
+ touch "$TMPDIR/foo-0.1/.include-this-hidden-file"
+ touch "$TMPDIR/foo-0.1/.exclude-this-hidden-file"
+
+ makeSubDir "include-this-dir"
+ makeSubDir "exclude-this-dir"
+ makeSubDir "exclude-dir1"
+ makeSubDir "exclude-dir2"
+ makeSubDir ".include-this-hidden-dir"
+ makeSubDir ".exclude-this-hidden-dir"
+ makeSubDir "a-dir/include-this-subdir"
+ # Expected not to be removed since exclusion is anchored to top-level
+ makeSubDir "a-dir/exclude-this-subdir"
+
+ touch "$TMPDIR/foo-0.1/; echo strange-file; #"
+
+}
+
+makeGolangLikeVendorFiles() {
+ makeSubDir "vendor"
+
+ mkdir -p "$TMPDIR/foo-0.1/vendor/includeme"
+ touch "$TMPDIR/foo-0.1/vendor/includeme/important.go"
+}
+
+makeTarBall () {
+ comp="$1"
+ mkgpg="${2:-none}"
+ makeUpstreamFiles
+ tar --create --auto-compress --file "$TMPDIR/foo-0.1.tar.$comp" --directory "$TMPDIR" foo-0.1
+ local gpgopts=(
+ chronic_sh $GPG
+ --homedir "$GPGHOME"
+ --no-options -q --batch --no-default-keyring
+ --secret-keyring "$PRIVATE_KEYRING"
+ --default-key 72544FAF
+ --detach-sign
+ )
+ case "$mkgpg" in
+ sig)
+ "${gpgopts[@]}" "$TMPDIR/foo-0.1.tar.$comp"
+ ;;
+ asc)
+ "${gpgopts[@]}" --armor "$TMPDIR/foo-0.1.tar.$comp"
+ ;;
+ none)
+ ;;
+ *)
+ fail "unknown parameter in makeTarBall()"
+ ;;
+ esac
+ rm -rf "$TMPDIR/foo-0.1"
+}
+makeSimpleTar () {
+ makeUpstreamFiles
+ tar --create --file "$TMPDIR/foo-0.1.tar" --directory "$TMPDIR" foo-0.1
+ rm -rf "$TMPDIR/foo-0.1"
+}
+makeBrokenTarBall () {
+ echo foo > foo.txt
+ tar cf - foo.txt | sed -e 's/^/foo/' | gzip > "$TMPDIR/foo-0.1.tar.gz"
+ rm -f foo.txt
+}
+
+makeZipFile () {
+ makeUpstreamFiles
+ (cd $TMPDIR >/dev/null; zip -q -r "foo-0.1.zip" foo-0.1 )
+ rm -rf "$TMPDIR/foo-0.1"
+}
+
+makeJarFile () {
+ makeUpstreamFiles
+ cat > "$TMPDIR/MANIFEST.MF" <<END
+Manifest-Version: 1.0
+Main-Class: foo.bar
+END
+ (cd $TMPDIR >/dev/null; jar cf "foo-0.1.jar" MANIFEST.MF foo-0.1 )
+ rm -rf "$TMPDIR/foo-0.1" "$TMPDIR/MANIFEST.MF"
+}
+
+makeDebianChangelog() {
+ mkdir -p $TMPDIR/foo/debian
+ cat <<END > $TMPDIR/foo/debian/changelog
+foo (0.1-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+}
+
+makeDebianOldDir() {
+ makeDebianChangelog
+}
+
+makeDebianDir() {
+ makeDebianChangelog
+ mkdir -p $TMPDIR/foo/debian/source
+ echo -n "3.0 (quilt)" > $TMPDIR/foo/debian/source/format
+}
+
+makeDebianCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir2/
+ ;?echo?strange-file;?#
+END
+
+}
+
+makeWrongDebianCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=174
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir2/
+ ;?echo?strange-file;?#
+END
+
+}
+
+makeUnmatchedExcludeCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir2
+ ;?echo?strange-file;?#
+ nomatch
+END
+}
+
+
+makeDuplicatePatternCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir*
+ ;?echo?strange-file;?#
+END
+}
+
+expected_stderr_after_removal="mk-origtargz warn: Files-Excluded pattern (exclude-dir2/) should not have a trailing /"
+
+expected_files_after_removal=$(LC_ALL=C sort <<END
+foo-0.1/
+foo-0.1/a-dir/
+foo-0.1/a-dir/exclude-this-subdir/
+foo-0.1/a-dir/exclude-this-subdir/a-file
+foo-0.1/a-dir/exclude-this-subdir/a-subdir/
+foo-0.1/a-dir/exclude-this-subdir/a-subdir/a-file
+foo-0.1/a-dir/include-this-subdir/
+foo-0.1/a-dir/include-this-subdir/a-file
+foo-0.1/a-dir/include-this-subdir/a-subdir/
+foo-0.1/a-dir/include-this-subdir/a-subdir/a-file
+foo-0.1/include-this-dir/
+foo-0.1/include-this-dir/a-file
+foo-0.1/include-this-dir/a-subdir/
+foo-0.1/include-this-dir/a-subdir/a-file
+foo-0.1/include-this-file
+foo-0.1/.include-this-hidden-dir/
+foo-0.1/.include-this-hidden-dir/a-file
+foo-0.1/.include-this-hidden-dir/a-subdir/
+foo-0.1/.include-this-hidden-dir/a-subdir/a-file
+foo-0.1/.include-this-hidden-file
+END
+)
+
+run_mk_origtargz() {
+ local dir="$1"
+ local exp_stderr="$2"
+ local exp_stdout="$3"
+ local stderrF="${SHUNIT_TMPDIR}/stderr"
+ shift
+ shift
+ shift
+ output="$( cd $TMPDIR/$dir >/dev/null; LC_ALL=C $MK_ORIGTARGZ "$@" 2> $stderrF )"
+ stderr="$(cat $stderrF)"
+ retval=$?
+ assertEquals "standard output of mk-origtargz $*\n" "$exp_stdout" "$output"
+ assertEquals "error output of mk-origtargz $*\n" "$exp_stderr" "$stderr"
+ assertEquals "return valueof mk-origtargz $*\n" "0" "$retval"
+}
+
+assertType () {
+ mime="$1"
+ file="$2"
+ actual="$(file --brief --mime-type "$file" | sed -e 's,/x-,/,')"
+ assertEquals "filetype for $(basename "$file")" "$mime" "$actual"
+}
+
+
+testSymlink() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+}
+
+testSymlinkWithConvertedSig() {
+ makeTarBall gz sig
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --signature 1 --signature-file=../foo-0.1.tar.gz.sig \
+ ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+ assertTrue "signature isn't valid" "$GPG --homedir '$GPGHOME' --verify $TMPDIR/foo_0.1.orig.tar.gz.asc"
+}
+
+testSymlinkWithArmoredSig() {
+ # MR for https://lists.debian.org/debian-devel/2019/04/msg00459.html
+ makeTarBall gz asc
+ # an armored signature, but with the wrong extension.
+ mv $TMPDIR/foo-0.1.tar.gz.asc $TMPDIR/foo-0.1.tar.gz.sig
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --signature 1 --signature-file=../foo-0.1.tar.gz.sig \
+ ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+ assertTrue "signature isn't valid" "$GPG --homedir '$GPGHOME' --verify $TMPDIR/foo_0.1.orig.tar.gz.asc"
+}
+
+testCopy() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully copied ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --copy ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testRename() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully renamed ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --rename ../foo-0.1.tar.gz
+ assertFalse "original tarball does exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSymlinkExplicit() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully symlinked foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+}
+
+testCopyExplicit() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully copied foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testRenameExplicit() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully renamed foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --rename foo-0.1.tar.gz
+ assertFalse "original tarball does exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSymlinkExplicitSubdir() {
+ makeTarBall gz
+ mkdir -p $TMPDIR/destdir
+ run_mk_origtargz "" "" \
+ "Successfully symlinked foo-0.1.tar.gz to destdir/foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 -C destdir foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/destdir/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/destdir/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/destdir/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" ../foo-0.1.tar.gz "$(readlink $TMPDIR/destdir/foo_0.1.orig.tar.gz)"
+}
+
+testRepackGZ2GZ() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully copied foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.gz --repack --compression gzip
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testForceRepackGZ2XZ() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.gz." \
+ --force-repack ../foo-0.1.tar.gz --compression gzip
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a file" "[ -f $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testRepackGZ2XZ() {
+ makeTarBall gz
+ run_mk_origtargz "" ""\
+ "Successfully repacked foo-0.1.tar.gz as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.gz --repack
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackXZ2GZ() {
+ makeTarBall xz
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.tar.xz as foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.xz --repack --compression gzip
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackZip2GZ() {
+ makeZipFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.zip --compression gzip
+ assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.zip ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackJar2GZ() {
+ if ! which jar >/dev/null
+ then
+ # skip to avoid dependency on java-jdk
+ return
+ fi
+ makeJarFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.jar as foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.jar --compression gzip
+ assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.jar ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackZip2GZRename() {
+ makeZipFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.gz, and removed the original file." \
+ --package foo --version 0.1 --rename foo-0.1.zip --compression gzip
+ assertFalse "original zip file does exist" "[ -e $TMPDIR/foo-0.1.zip ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackZip2XZ() {
+ makeZipFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 foo-0.1.zip
+ assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.zip ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackXpi2XZ() {
+ makeZipFile
+ mv $TMPDIR/foo-0.1.zip $TMPDIR/foo-0.1.xpi
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.xpi as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 foo-0.1.xpi
+ assertTrue "original xpi file does not exist" "[ -e $TMPDIR/foo-0.1.xpi ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackTAR2XZ() {
+ makeSimpleTar
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.tar as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 --copy foo-0.1.tar --repack
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+testOldFormat() {
+ makeTarBall xz
+ makeDebianOldDir
+ makeDebianCopyright
+ run_mk_origtargz foo "mk-origtargz warn: Missing debian/source/format, switch compression to gzip
+$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1.orig.tar.gz, deleting 19 files from it." \
+ ../foo-0.1.tar.xz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.gz | sort)"
+}
+
+testExclude() {
+ makeTarBall gz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testGoVendorIncludeIgnore () {
+ makeGolangLikeVendorFiles
+ makeTarBall gz
+ makeDebianDir
+ makeDebianCopyright
+
+ # adjust existing test cases slightly
+ cat <<'END' >> $TMPDIR/foo/debian/copyright
+ vendor
+Files-Included:
+ vendor/includeme
+END
+
+ expected_files=$(LC_ALL=C sort <<END
+$expected_files_after_removal
+foo-0.1/vendor/
+foo-0.1/vendor/a-subdir/
+foo-0.1/vendor/includeme/
+foo-0.1/vendor/includeme/important.go
+END
+)
+
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 21 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testExcludeXZ() {
+ makeTarBall xz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.xz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testExcludeZip() {
+ makeZipFile
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.zip as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.zip
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testSuffix() {
+ makeTarBall gz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)"
+}
+
+testSuffixXZ() {
+ makeTarBall xz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.xz --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)"
+}
+
+testSuffixZip() {
+ makeZipFile
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.zip as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.zip --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)"
+}
+
+testSuffixNoExclusions() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully renamed ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ ../foo-0.1.tar.gz --rename --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameSymlink() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is." \
+ --symlink ../foo_0.1.orig.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameCopy() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is." \
+ --copy ../foo_0.1.orig.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameRename() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is." \
+ --rename ../foo_0.1.orig.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameExclude() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is, deleting 19 files from it." \
+ ../foo_0.1.orig.tar.gz --compression=gzip
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.gz | sort)"
+}
+
+testSameNameExcludeSymlink() {
+ makeTarBall xz
+ ln -s foo-0.1.tar.xz $TMPDIR/foo_0.1.orig.tar.xz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Leaving ../foo_0.1.orig.tar.xz where it is, deleting 19 files from it." \
+ ../foo_0.1.orig.tar.xz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testCopyrightFormatWarning() {
+ makeTarBall gz
+ makeDebianDir
+ makeWrongDebianCopyright
+ run_mk_origtargz foo \
+ "mk-origtargz warn: The file debian/copyright mentions Files-Excluded, but its format is not recognized. Specify Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ in order to remove files from the tarball with mk-origtargz." \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ ../foo-0.1.tar.gz
+
+}
+
+testBrokenTarWarning() {
+ makeBrokenTarBall
+ makeDebianDir
+ if dpkg --compare-versions $(dpkg-query -W -f='${Version}' libdpkg-perl) lt 1.19.0~; then
+ local SUBPROCESS_ERROR="gave error exit status 2"
+ else
+ local SUBPROCESS_ERROR="subprocess returned exit status 2"
+ fi
+ run_mk_origtargz foo \
+ "tar: This does not look like a tar archive
+tar: Skipping to next header
+tar: Exiting with failure status due to previous errors
+$PROGNAME: error: tar --list --auto-compress --file ../foo_0.1.orig.tar.xz $SUBPROCESS_ERROR" \
+ "" \
+ ../foo-0.1.tar.gz --repack
+}
+
+testUnmatchedExclusion() {
+ makeTarBall gz
+ makeDebianDir
+ makeUnmatchedExcludeCopyright
+ run_mk_origtargz foo "mk-origtargz warn: No files matched excluded pattern as the last matching glob: nomatch" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testDuplicatePattern() {
+ makeTarBall gz
+ makeDebianDir
+ makeDuplicatePatternCopyright
+ run_mk_origtargz foo "mk-origtargz warn: No files matched excluded pattern as the last matching glob: exclude-dir1" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+. shunit2