1#!/bin/bash 2 3# Copyright 2014, Rafael Laboissiere <rafael@laboissiere.net> 4# Copyright 2015, James McCoy <jamessan@debian.org> 5 6# This program is free software; you can redistribute it and/or modify it 7# under the terms of the GNU General Public License as published by the 8# Free Software Foundation; either version 3 of the License, or (at your 9# option) any later version. 10# 11# This program is distributed in the hope that it will be useful, but 12# WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 14# Public License for more details. 15# 16# On Debian systems, the complete text of the GNU General Public License 17# version 3 can be found in the /usr/share/common-licenses/GPL-3 file. 18 19set -u 20 21# Load GPG 22TESTTYPE=MkOrigTarGz 23. ./lib_test_uscan 24 25if test "${1:-}" = --installed; then 26 MK_ORIGTARGZ="mk-origtargz" 27 shift 28else 29 top_srcdir=$(readlink -f "${0%/*}/..") 30 make -C "$top_srcdir/scripts" mk-origtargz 31 MK_ORIGTARGZ="perl -I $top_srcdir/lib $top_srcdir/scripts/mk-origtargz" 32 PATH="$top_srcdir/scripts:$PATH" 33 export PATH 34 PERL5LIB="$top_srcdir/lib" 35 export PERL5LIB 36fi 37PROGNAME="mk-origtargz" 38 39LC_ALL=C 40export LC_ALL 41 42setUp () { 43 TMPDIR=$(mktemp -d -p "$SHUNIT_TMPDIR" test_mk-origtargz.XXXX) 44} 45 46 47makeSubDir () { 48 dir=$1 49 shift 50 51 mkdir -p "$TMPDIR/foo-0.1/$dir" 52 touch "$TMPDIR/foo-0.1/$dir/a-file" 53 mkdir "$TMPDIR/foo-0.1/$dir/a-subdir" 54 touch "$TMPDIR/foo-0.1/$dir/a-subdir/a-file" 55} 56 57 58makeUpstreamFiles () { 59 mkdir -p "$TMPDIR/foo-0.1" 60 touch "$TMPDIR/foo-0.1/include-this-file" 61 touch "$TMPDIR/foo-0.1/exclude-this-file" 62 touch "$TMPDIR/foo-0.1/.include-this-hidden-file" 63 touch "$TMPDIR/foo-0.1/.exclude-this-hidden-file" 64 65 makeSubDir "include-this-dir" 66 makeSubDir "exclude-this-dir" 67 makeSubDir "exclude-dir1" 68 makeSubDir "exclude-dir2" 69 makeSubDir ".include-this-hidden-dir" 70 makeSubDir ".exclude-this-hidden-dir" 71 makeSubDir "a-dir/include-this-subdir" 72 # Expected not to be removed since exclusion is anchored to top-level 73 makeSubDir "a-dir/exclude-this-subdir" 74 75 touch "$TMPDIR/foo-0.1/; echo strange-file; #" 76 77} 78 79makeGolangLikeVendorFiles() { 80 makeSubDir "vendor" 81 82 mkdir -p "$TMPDIR/foo-0.1/vendor/includeme" 83 touch "$TMPDIR/foo-0.1/vendor/includeme/important.go" 84} 85 86makeTarBall () { 87 comp="$1" 88 mkgpg="${2:-none}" 89 makeUpstreamFiles 90 tar --create --auto-compress --file "$TMPDIR/foo-0.1.tar.$comp" --directory "$TMPDIR" foo-0.1 91 local gpgopts=( 92 chronic_sh $GPG 93 --homedir "$GPGHOME" 94 --no-options -q --batch --no-default-keyring 95 --secret-keyring "$PRIVATE_KEYRING" 96 --default-key 72544FAF 97 --detach-sign 98 ) 99 case "$mkgpg" in 100 sig) 101 "${gpgopts[@]}" "$TMPDIR/foo-0.1.tar.$comp" 102 ;; 103 asc) 104 "${gpgopts[@]}" --armor "$TMPDIR/foo-0.1.tar.$comp" 105 ;; 106 none) 107 ;; 108 *) 109 fail "unknown parameter in makeTarBall()" 110 ;; 111 esac 112 rm -rf "$TMPDIR/foo-0.1" 113} 114makeSimpleTar () { 115 makeUpstreamFiles 116 tar --create --file "$TMPDIR/foo-0.1.tar" --directory "$TMPDIR" foo-0.1 117 rm -rf "$TMPDIR/foo-0.1" 118} 119makeBrokenTarBall () { 120 echo foo > foo.txt 121 tar cf - foo.txt | sed -e 's/^/foo/' | gzip > "$TMPDIR/foo-0.1.tar.gz" 122 rm -f foo.txt 123} 124 125makeZipFile () { 126 makeUpstreamFiles 127 (cd $TMPDIR >/dev/null; zip -q -r "foo-0.1.zip" foo-0.1 ) 128 rm -rf "$TMPDIR/foo-0.1" 129} 130 131makeJarFile () { 132 makeUpstreamFiles 133 cat > "$TMPDIR/MANIFEST.MF" <<END 134Manifest-Version: 1.0 135Main-Class: foo.bar 136END 137 (cd $TMPDIR >/dev/null; jar cf "foo-0.1.jar" MANIFEST.MF foo-0.1 ) 138 rm -rf "$TMPDIR/foo-0.1" "$TMPDIR/MANIFEST.MF" 139} 140 141makeDebianChangelog() { 142 mkdir -p $TMPDIR/foo/debian 143 cat <<END > $TMPDIR/foo/debian/changelog 144foo (0.1-1) unstable; urgency=low 145 146 * Initial release 147 148 -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100 149END 150} 151 152makeDebianOldDir() { 153 makeDebianChangelog 154} 155 156makeDebianDir() { 157 makeDebianChangelog 158 mkdir -p $TMPDIR/foo/debian/source 159 echo -n "3.0 (quilt)" > $TMPDIR/foo/debian/source/format 160} 161 162makeDebianCopyright() { 163 cat <<'END' > $TMPDIR/foo/debian/copyright 164Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 165Files-Excluded: exclude-this* 166 .exclude-this* 167 exclude-dir1 168 exclude-dir2/ 169 ;?echo?strange-file;?# 170END 171 172} 173 174makeWrongDebianCopyright() { 175 cat <<'END' > $TMPDIR/foo/debian/copyright 176Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=174 177Files-Excluded: exclude-this* 178 .exclude-this* 179 exclude-dir1 180 exclude-dir2/ 181 ;?echo?strange-file;?# 182END 183 184} 185 186makeUnmatchedExcludeCopyright() { 187 cat <<'END' > $TMPDIR/foo/debian/copyright 188Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 189Files-Excluded: exclude-this* 190 .exclude-this* 191 exclude-dir1 192 exclude-dir2 193 ;?echo?strange-file;?# 194 nomatch 195END 196} 197 198 199makeDuplicatePatternCopyright() { 200 cat <<'END' > $TMPDIR/foo/debian/copyright 201Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 202Files-Excluded: exclude-this* 203 .exclude-this* 204 exclude-dir1 205 exclude-dir* 206 ;?echo?strange-file;?# 207END 208} 209 210expected_stderr_after_removal="mk-origtargz warn: Files-Excluded pattern (exclude-dir2/) should not have a trailing /" 211 212expected_files_after_removal=$(LC_ALL=C sort <<END 213foo-0.1/ 214foo-0.1/a-dir/ 215foo-0.1/a-dir/exclude-this-subdir/ 216foo-0.1/a-dir/exclude-this-subdir/a-file 217foo-0.1/a-dir/exclude-this-subdir/a-subdir/ 218foo-0.1/a-dir/exclude-this-subdir/a-subdir/a-file 219foo-0.1/a-dir/include-this-subdir/ 220foo-0.1/a-dir/include-this-subdir/a-file 221foo-0.1/a-dir/include-this-subdir/a-subdir/ 222foo-0.1/a-dir/include-this-subdir/a-subdir/a-file 223foo-0.1/include-this-dir/ 224foo-0.1/include-this-dir/a-file 225foo-0.1/include-this-dir/a-subdir/ 226foo-0.1/include-this-dir/a-subdir/a-file 227foo-0.1/include-this-file 228foo-0.1/.include-this-hidden-dir/ 229foo-0.1/.include-this-hidden-dir/a-file 230foo-0.1/.include-this-hidden-dir/a-subdir/ 231foo-0.1/.include-this-hidden-dir/a-subdir/a-file 232foo-0.1/.include-this-hidden-file 233END 234) 235 236run_mk_origtargz() { 237 local dir="$1" 238 local exp_stderr="$2" 239 local exp_stdout="$3" 240 local stderrF="${SHUNIT_TMPDIR}/stderr" 241 shift 242 shift 243 shift 244 output="$( cd $TMPDIR/$dir >/dev/null; LC_ALL=C $MK_ORIGTARGZ "$@" 2> $stderrF )" 245 stderr="$(cat $stderrF)" 246 retval=$? 247 assertEquals "standard output of mk-origtargz $*\n" "$exp_stdout" "$output" 248 assertEquals "error output of mk-origtargz $*\n" "$exp_stderr" "$stderr" 249 assertEquals "return valueof mk-origtargz $*\n" "0" "$retval" 250} 251 252assertType () { 253 mime="$1" 254 file="$2" 255 actual="$(file --brief --mime-type "$file" | sed -e 's,/x-,/,')" 256 assertEquals "filetype for $(basename "$file")" "$mime" "$actual" 257} 258 259 260testSymlink() { 261 makeTarBall gz 262 makeDebianDir 263 run_mk_origtargz foo "" \ 264 "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 265 ../foo-0.1.tar.gz 266 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 267 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 268 assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 269 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 270 assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)" 271} 272 273testSymlinkWithConvertedSig() { 274 makeTarBall gz sig 275 makeDebianDir 276 run_mk_origtargz foo "" \ 277 "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 278 --signature 1 --signature-file=../foo-0.1.tar.gz.sig \ 279 ../foo-0.1.tar.gz 280 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 281 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 282 assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 283 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 284 assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)" 285 assertTrue "signature isn't valid" "$GPG --homedir '$GPGHOME' --verify $TMPDIR/foo_0.1.orig.tar.gz.asc" 286} 287 288testSymlinkWithArmoredSig() { 289 # MR for https://lists.debian.org/debian-devel/2019/04/msg00459.html 290 makeTarBall gz asc 291 # an armored signature, but with the wrong extension. 292 mv $TMPDIR/foo-0.1.tar.gz.asc $TMPDIR/foo-0.1.tar.gz.sig 293 makeDebianDir 294 run_mk_origtargz foo "" \ 295 "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 296 --signature 1 --signature-file=../foo-0.1.tar.gz.sig \ 297 ../foo-0.1.tar.gz 298 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 299 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 300 assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 301 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 302 assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)" 303 assertTrue "signature isn't valid" "$GPG --homedir '$GPGHOME' --verify $TMPDIR/foo_0.1.orig.tar.gz.asc" 304} 305 306testCopy() { 307 makeTarBall gz 308 makeDebianDir 309 run_mk_origtargz foo "" \ 310 "Successfully copied ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 311 --copy ../foo-0.1.tar.gz 312 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 313 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 314 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 315 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 316} 317 318testRename() { 319 makeTarBall gz 320 makeDebianDir 321 run_mk_origtargz foo "" \ 322 "Successfully renamed ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 323 --rename ../foo-0.1.tar.gz 324 assertFalse "original tarball does exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 325 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 326 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 327 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 328} 329 330testSymlinkExplicit() { 331 makeTarBall gz 332 run_mk_origtargz "" "" \ 333 "Successfully symlinked foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \ 334 --package foo --version 0.1 foo-0.1.tar.gz 335 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 336 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 337 assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 338 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 339 assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)" 340} 341 342testCopyExplicit() { 343 makeTarBall gz 344 run_mk_origtargz "" "" \ 345 "Successfully copied foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \ 346 --package foo --version 0.1 --copy foo-0.1.tar.gz 347 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 348 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 349 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 350 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 351} 352 353testRenameExplicit() { 354 makeTarBall gz 355 run_mk_origtargz "" "" \ 356 "Successfully renamed foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \ 357 --package foo --version 0.1 --rename foo-0.1.tar.gz 358 assertFalse "original tarball does exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 359 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 360 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 361 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 362} 363 364testSymlinkExplicitSubdir() { 365 makeTarBall gz 366 mkdir -p $TMPDIR/destdir 367 run_mk_origtargz "" "" \ 368 "Successfully symlinked foo-0.1.tar.gz to destdir/foo_0.1.orig.tar.gz." \ 369 --package foo --version 0.1 -C destdir foo-0.1.tar.gz 370 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 371 assertTrue "result does not exist" "[ -e $TMPDIR/destdir/foo_0.1.orig.tar.gz ]" 372 assertTrue "result is not a symlink" "[ -L $TMPDIR/destdir/foo_0.1.orig.tar.gz ]" 373 assertTrue "result is not readable" "[ -r $TMPDIR/destdir/foo_0.1.orig.tar.gz ]" 374 assertEquals "final symlink" ../foo-0.1.tar.gz "$(readlink $TMPDIR/destdir/foo_0.1.orig.tar.gz)" 375} 376 377testRepackGZ2GZ() { 378 makeTarBall gz 379 run_mk_origtargz "" "" \ 380 "Successfully copied foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \ 381 --package foo --version 0.1 --copy foo-0.1.tar.gz --repack --compression gzip 382 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 383 assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz 384} 385 386testForceRepackGZ2XZ() { 387 makeTarBall gz 388 makeDebianDir 389 run_mk_origtargz foo "" \ 390 "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.gz." \ 391 --force-repack ../foo-0.1.tar.gz --compression gzip 392 assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]" 393 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 394 assertTrue "result is not a file" "[ -f $TMPDIR/foo_0.1.orig.tar.gz ]" 395 assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]" 396} 397 398testRepackGZ2XZ() { 399 makeTarBall gz 400 run_mk_origtargz "" ""\ 401 "Successfully repacked foo-0.1.tar.gz as foo_0.1.orig.tar.xz." \ 402 --package foo --version 0.1 --copy foo-0.1.tar.gz --repack 403 assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 404 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 405 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 406} 407 408testRepackXZ2GZ() { 409 makeTarBall xz 410 run_mk_origtargz "" "" \ 411 "Successfully repacked foo-0.1.tar.xz as foo_0.1.orig.tar.gz." \ 412 --package foo --version 0.1 --copy foo-0.1.tar.xz --repack --compression gzip 413 assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 414 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 415 assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz 416} 417 418testRepackZip2GZ() { 419 makeZipFile 420 run_mk_origtargz "" "" \ 421 "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.gz." \ 422 --package foo --version 0.1 --copy foo-0.1.zip --compression gzip 423 assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.zip ]" 424 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 425 assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz 426} 427 428testRepackJar2GZ() { 429 if ! which jar >/dev/null 430 then 431 # skip to avoid dependency on java-jdk 432 return 433 fi 434 makeJarFile 435 run_mk_origtargz "" "" \ 436 "Successfully repacked foo-0.1.jar as foo_0.1.orig.tar.gz." \ 437 --package foo --version 0.1 --copy foo-0.1.jar --compression gzip 438 assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.jar ]" 439 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 440 assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz 441} 442 443testRepackZip2GZRename() { 444 makeZipFile 445 run_mk_origtargz "" "" \ 446 "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.gz, and removed the original file." \ 447 --package foo --version 0.1 --rename foo-0.1.zip --compression gzip 448 assertFalse "original zip file does exist" "[ -e $TMPDIR/foo-0.1.zip ]" 449 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 450 assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz 451} 452 453testRepackZip2XZ() { 454 makeZipFile 455 run_mk_origtargz "" "" \ 456 "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.xz." \ 457 --package foo --version 0.1 foo-0.1.zip 458 assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.zip ]" 459 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 460 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 461} 462 463testRepackXpi2XZ() { 464 makeZipFile 465 mv $TMPDIR/foo-0.1.zip $TMPDIR/foo-0.1.xpi 466 run_mk_origtargz "" "" \ 467 "Successfully repacked foo-0.1.xpi as foo_0.1.orig.tar.xz." \ 468 --package foo --version 0.1 foo-0.1.xpi 469 assertTrue "original xpi file does not exist" "[ -e $TMPDIR/foo-0.1.xpi ]" 470 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 471 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 472} 473 474testRepackTAR2XZ() { 475 makeSimpleTar 476 run_mk_origtargz "" "" \ 477 "Successfully repacked foo-0.1.tar as foo_0.1.orig.tar.xz." \ 478 --package foo --version 0.1 --copy foo-0.1.tar --repack 479 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 480 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 481} 482testOldFormat() { 483 makeTarBall xz 484 makeDebianOldDir 485 makeDebianCopyright 486 run_mk_origtargz foo "mk-origtargz warn: Missing debian/source/format, switch compression to gzip 487$expected_stderr_after_removal" \ 488 "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1.orig.tar.gz, deleting 19 files from it." \ 489 ../foo-0.1.tar.xz 490 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 491 assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz 492 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.gz | sort)" 493} 494 495testExclude() { 496 makeTarBall gz 497 makeDebianDir 498 makeDebianCopyright 499 run_mk_origtargz foo "$expected_stderr_after_removal" \ 500 "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \ 501 ../foo-0.1.tar.gz 502 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 503 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 504 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 505} 506 507testGoVendorIncludeIgnore () { 508 makeGolangLikeVendorFiles 509 makeTarBall gz 510 makeDebianDir 511 makeDebianCopyright 512 513 # adjust existing test cases slightly 514 cat <<'END' >> $TMPDIR/foo/debian/copyright 515 vendor 516Files-Included: 517 vendor/includeme 518END 519 520 expected_files=$(LC_ALL=C sort <<END 521$expected_files_after_removal 522foo-0.1/vendor/ 523foo-0.1/vendor/a-subdir/ 524foo-0.1/vendor/includeme/ 525foo-0.1/vendor/includeme/important.go 526END 527) 528 529 run_mk_origtargz foo "$expected_stderr_after_removal" \ 530 "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 21 files from it." \ 531 ../foo-0.1.tar.gz 532 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 533 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 534 assertEquals "file contents" "$expected_files" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 535} 536 537testExcludeXZ() { 538 makeTarBall xz 539 makeDebianDir 540 makeDebianCopyright 541 run_mk_origtargz foo "$expected_stderr_after_removal" \ 542 "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \ 543 ../foo-0.1.tar.xz 544 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 545 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 546 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 547} 548 549testExcludeZip() { 550 makeZipFile 551 makeDebianDir 552 makeDebianCopyright 553 run_mk_origtargz foo "$expected_stderr_after_removal" \ 554 "Successfully repacked ../foo-0.1.zip as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \ 555 ../foo-0.1.zip 556 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 557 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 558 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 559} 560 561testSuffix() { 562 makeTarBall gz 563 makeDebianDir 564 makeDebianCopyright 565 run_mk_origtargz foo "$expected_stderr_after_removal" \ 566 "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \ 567 ../foo-0.1.tar.gz --repack-suffix +dfsg1 568 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]" 569 assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz 570 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)" 571} 572 573testSuffixXZ() { 574 makeTarBall xz 575 makeDebianDir 576 makeDebianCopyright 577 run_mk_origtargz foo "$expected_stderr_after_removal" \ 578 "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \ 579 ../foo-0.1.tar.xz --repack-suffix +dfsg1 580 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]" 581 assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz 582 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)" 583} 584 585testSuffixZip() { 586 makeZipFile 587 makeDebianDir 588 makeDebianCopyright 589 run_mk_origtargz foo "$expected_stderr_after_removal" \ 590 "Successfully repacked ../foo-0.1.zip as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \ 591 ../foo-0.1.zip --repack-suffix +dfsg1 592 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]" 593 assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz 594 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)" 595} 596 597testSuffixNoExclusions() { 598 makeTarBall gz 599 makeDebianDir 600 run_mk_origtargz foo "" \ 601 "Successfully renamed ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 602 ../foo-0.1.tar.gz --rename --repack-suffix +dfsg1 603 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 604} 605 606testSameNameSymlink() { 607 makeTarBall gz 608 mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz 609 makeDebianDir 610 run_mk_origtargz foo "" \ 611 "Leaving ../foo_0.1.orig.tar.gz where it is." \ 612 --symlink ../foo_0.1.orig.tar.gz 613 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 614 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 615} 616 617testSameNameCopy() { 618 makeTarBall gz 619 mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz 620 makeDebianDir 621 run_mk_origtargz foo "" \ 622 "Leaving ../foo_0.1.orig.tar.gz where it is." \ 623 --copy ../foo_0.1.orig.tar.gz 624 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 625 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 626} 627 628testSameNameRename() { 629 makeTarBall gz 630 mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz 631 makeDebianDir 632 run_mk_origtargz foo "" \ 633 "Leaving ../foo_0.1.orig.tar.gz where it is." \ 634 --rename ../foo_0.1.orig.tar.gz 635 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 636 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 637} 638 639testSameNameExclude() { 640 makeTarBall gz 641 mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz 642 makeDebianDir 643 makeDebianCopyright 644 run_mk_origtargz foo "$expected_stderr_after_removal" \ 645 "Leaving ../foo_0.1.orig.tar.gz where it is, deleting 19 files from it." \ 646 ../foo_0.1.orig.tar.gz --compression=gzip 647 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]" 648 assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]" 649 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.gz | sort)" 650} 651 652testSameNameExcludeSymlink() { 653 makeTarBall xz 654 ln -s foo-0.1.tar.xz $TMPDIR/foo_0.1.orig.tar.xz 655 makeDebianDir 656 makeDebianCopyright 657 run_mk_origtargz foo "$expected_stderr_after_removal" \ 658 "Leaving ../foo_0.1.orig.tar.xz where it is, deleting 19 files from it." \ 659 ../foo_0.1.orig.tar.xz 660 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 661 assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.xz ]" 662 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 663} 664 665testCopyrightFormatWarning() { 666 makeTarBall gz 667 makeDebianDir 668 makeWrongDebianCopyright 669 run_mk_origtargz foo \ 670 "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." \ 671 "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \ 672 ../foo-0.1.tar.gz 673 674} 675 676testBrokenTarWarning() { 677 makeBrokenTarBall 678 makeDebianDir 679 if dpkg --compare-versions $(dpkg-query -W -f='${Version}' libdpkg-perl) lt 1.19.0~; then 680 local SUBPROCESS_ERROR="gave error exit status 2" 681 else 682 local SUBPROCESS_ERROR="subprocess returned exit status 2" 683 fi 684 run_mk_origtargz foo \ 685 "tar: This does not look like a tar archive 686tar: Skipping to next header 687tar: Exiting with failure status due to previous errors 688$PROGNAME: error: tar --list --auto-compress --file ../foo_0.1.orig.tar.xz $SUBPROCESS_ERROR" \ 689 "" \ 690 ../foo-0.1.tar.gz --repack 691} 692 693testUnmatchedExclusion() { 694 makeTarBall gz 695 makeDebianDir 696 makeUnmatchedExcludeCopyright 697 run_mk_origtargz foo "mk-origtargz warn: No files matched excluded pattern as the last matching glob: nomatch" \ 698 "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \ 699 ../foo-0.1.tar.gz 700 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 701 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 702 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 703} 704 705testDuplicatePattern() { 706 makeTarBall gz 707 makeDebianDir 708 makeDuplicatePatternCopyright 709 run_mk_origtargz foo "mk-origtargz warn: No files matched excluded pattern as the last matching glob: exclude-dir1" \ 710 "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \ 711 ../foo-0.1.tar.gz 712 assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]" 713 assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz 714 assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)" 715} 716 717. shunit2 718