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