[devscripts] 01/01: Reimplement Excluded-Files for zipfiles
Joachim Breitner
nomeata at moszumanska.debian.org
Mon Mar 17 22:37:09 UTC 2014
This is an automated email from the git hooks/post-receive script.
nomeata pushed a commit to branch master
in repository devscripts.
commit 02a6fa0a23a2cb879858b14ca206481bc50ed298
Author: Joachim Breitner <nomeata at debian.org>
Date: Mon Mar 17 23:36:47 2014 +0100
Reimplement Excluded-Files for zipfiles
by calling "zip -d" to remove the files from the zipfile.
---
scripts/uscan.pl | 61 +++++++++++++++++++++++++++++++++++++-------------------
test/test_uscan | 16 +++++++++++----
2 files changed, 52 insertions(+), 25 deletions(-)
diff --git a/scripts/uscan.pl b/scripts/uscan.pl
index 932d452..7ece0e3 100755
--- a/scripts/uscan.pl
+++ b/scripts/uscan.pl
@@ -1547,33 +1547,52 @@ EOF
&& $data->{'format'} =~ m{^$okformat/?$}
&& $data->{'files-excluded'})
{
+ my @excluded = ($data->{"files-excluded"} =~ /(?:\A|\G\s+)((?:\\.|[^\\\s])+)/g);
+ # un-escape
+ @excluded = map { s/\\(.)/$1/g; s?/+$??; $_ } @excluded;
+
+ # get list of files contained in the tarball
+ my @files;
if ( $newfile_base =~ /^(.*)\.(zip|jar)$/ ) {
- uscan_warn "$progname: $destdir/$newfile_base is not a tarfile, cannot exclude files from it. Consider running uscan with \"--repack\"\n";
+ my $files;
+ spawn(exec => ['zipinfo','-1',"$destdir/$newfile_base"],
+ to_string => \$files,
+ wait_child => 1);
+ @files = split /^/, $files;
+ chomp @files;
} else {
- my @excluded = ($data->{"files-excluded"} =~ /(?:\A|\G\s+)((?:\\.|[^\\\s])+)/g);
- # un-escape
- @excluded = map { s/\\(.)/$1/g; s?/+$??; $_ } @excluded;
-
- # get list of files contained in the tarball
my $files;
spawn(exec => ['tar', '-t', '-a', '-f', "$destdir/$newfile_base"],
to_string => \$files,
wait_child => 1);
+ @files = split /^/, $files;
+ chomp @files;
+ }
- my @to_delete;
- for my $filename (split /^/, $files) {
- chomp($filename);
- $filename =~ s!/+$!!;
- my $do_exclude = 0;
- for my $exclude (@excluded) {
- if (Text::Glob::match_glob($exclude, $filename)) {
- $do_exclude = 1;
- }
- }
- push @to_delete, $filename if $do_exclude;
+ # find out what to delete
+ my @to_delete;
+ for my $filename (@files) {
+ my $do_exclude = 0;
+ for my $exclude (@excluded) {
+ $do_exclude ||=
+ Text::Glob::match_glob($exclude, $filename) ||
+ Text::Glob::match_glob($exclude."/", $filename) ||
+ Text::Glob::match_glob($exclude."/*", $filename);
}
-
- if (@to_delete) {
+ push @to_delete, $filename if $do_exclude;
+ }
+ # ensure files are mentioned before the directory they live in
+ # (otherwise tar complains)
+ @to_delete = sort {$b cmp $a} @to_delete;
+
+ # actually delete something
+ if (@to_delete) {
+ if ( $newfile_base =~ /^(.*)\.(zip|jar)$/ ) {
+ my $newfile_base_dfsg = "$1${excludesuffix}.$2" ;
+ copy "$destdir/$newfile_base", "$destdir/$newfile_base_dfsg";
+ spawn(exec => ['zip','-d','--no-wild',"$destdir/$newfile_base_dfsg", @to_delete],
+ wait_child => 1);
+ } else {
my $newfile_base_dfsg = "${pkg}_${newversion}${excludesuffix}.orig.tar" ;
$symlink = 'files-excluded'; # prevent symlinking or renaming
@@ -1588,9 +1607,9 @@ EOF
,wait_child => 1);
my $suffix = compression_get_property($comp, "file_ext");
compress_archive("$fname", "$destdir/$newfile_base_dfsg.$suffix", $comp);
- } else {
- print "-- No files to be excluded -- no need for repacking.\n" if $verbose;
}
+ } else {
+ print "-- No files to be excluded -- no need for repacking.\n" if $verbose;
}
}
}
diff --git a/test/test_uscan b/test/test_uscan
index 6aab953..ac548b5 100755
--- a/test/test_uscan
+++ b/test/test_uscan
@@ -26,7 +26,6 @@ fi
cleanup(){
kill -9 $(cat $TMPDIR/repo/pid)
rm -rf $TMPDIR
-
}
trap cleanup 1 2 3 13 15
@@ -209,13 +208,22 @@ END
touch $TMPDIR/repo/exclude-dir/file
( cd $TMPDIR/repo ;
- zip $PKG-1.zip * ;
+ zip -r $PKG-1.zip * ;
python -m SimpleHTTPServer $PORT &
echo $! > pid )
- OUTPUT=$( (cd $TMPDIR/$PKG ; $COMMAND) 2>&1 | fgrep 'cannot exclude files from it')
+ OUTPUT=$( (cd $TMPDIR/$PKG ; $COMMAND) 2>&1)
assertTrue 'zipfile not downloaded' "[ -f $TMPDIR/$PKG-1.zip ]"
- assertNotNull 'Expected error message missing' "$OUTPUT"
+ assertTrue 'zipfile not copied to +dfsg' "[ -f $TMPDIR/$PKG-1+dfsg.zip ]"
+ CONTENTS="$(zipinfo -1 $TMPDIR/$PKG-1+dfsg.zip)"
+ assertTrue 'file that must be present is excluded in the zip file' \
+ $(containsName "$CONTENTS" include-this)
+ assertFalse 'file that must be excluded is present in the zip file' \
+ $(containsName "$CONTENTS" exclude-this)
+ assertFalse "dir that must be excluded is present in the zip file" \
+ $(containsName "$CONTENTS" exclude-dir)
+ assertFalse "path with whitespace that must be excluded is present" \
+ $(containsName "$CONTENTS" "; echo baz; #/")
cleanup
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/devscripts.git
More information about the devscripts-devel
mailing list