1
0
Fork 0
devscripts/test/test_mk-origtargz
Daniel Baumann b543f2e88d
Adding upstream version 2.25.15.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 11:04:07 +02:00

754 lines
26 KiB
Bash
Executable file

#!/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
COMP="--auto-compress"
if [ "$comp" = "zst" ]; then
COMP=--zstd
fi
tar --create $COMP --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
--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=$?
# Strip ANSI color codes from the output
local clean_stderr=$(echo "$stderr" | sed 's/\x1b\[[0-9;]*m//g')
# Use the cleaned output for comparison
assertEquals "standard output of mk-origtargz $*\n" "$exp_stdout" "$output"
assertEquals "error output of mk-origtargz $*\n" "$exp_stderr" "$clean_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
}
testRepackZST2XZRepackOpt() {
makeTarBall zst
run_mk_origtargz "" ""\
"Successfully repacked foo-0.1.tar.zst as foo_0.1.orig.tar.xz." \
--package foo --version 0.1 --copy foo-0.1.tar.zst --repack
assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.zst ]"
assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
}
testRepackZST2XZNoRepackOpt() {
makeTarBall zst
run_mk_origtargz "" ""\
"Successfully repacked foo-0.1.tar.zst as foo_0.1.orig.tar.xz." \
--package foo --version 0.1 --copy foo-0.1.tar.zst
assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.zst ]"
assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
}
testRepackZST2ZSTFail() {
makeTarBall zst
run_mk_origtargz "" "mk-origtargz error: Bad value for compression: Unknown compression scheme zst"\
"" \
--package foo --version 0.1 --copy foo-0.1.tar.zst --compression zst
assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.zst ]"
assertFalse "result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
}
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 ! command -v 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