[devscripts] 02/02: uscan: Detect compression using "file"
Joachim Breitner
nomeata at moszumanska.debian.org
Sat Mar 29 21:29:26 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 0d4ad86dfc8e206cde3d83507f758f210bad33f4
Author: Joachim Breitner <nomeata at debian.org>
Date: Sat Mar 29 22:27:19 2014 +0100
uscan: Detect compression using "file"
Because compression_guess_from_filename is rather limited (does not know
about .tgz), and this is the right thing to do anyways.
(I decided against File::LibMagic as it would add a dependency for
little gain, and does not seem to be too mature.)
---
Devscripts/Compression.pm | 28 +++++++++++++++++++++++++++-
scripts/uscan.pl | 14 +++++++-------
test/test_uscan | 2 +-
3 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/Devscripts/Compression.pm b/Devscripts/Compression.pm
index 65080e8..4e02873 100644
--- a/Devscripts/Compression.pm
+++ b/Devscripts/Compression.pm
@@ -17,9 +17,13 @@
package Devscripts::Compression;
use Dpkg::Compression;
+use Dpkg::IPC;
use Exporter qw(import);
-our @EXPORT = (@Dpkg::Compression::EXPORT, qw(compression_get_file_extension_regex));
+our @EXPORT = (
+ @Dpkg::Compression::EXPORT,
+ qw(compression_get_file_extension_regex compression_guess_from_file),
+ );
eval {
Dpkg::Compression->VERSION(1.02);
@@ -33,4 +37,26 @@ eval {
};
};
+# This can potentially be moved to Dpkg::Compression
+
+my %mime2comp = (
+ "application/gzip" => "gzip",
+ "application/x-bzip2" => "bzip2",
+ "application/x-xz" => "xz",
+);
+
+sub compression_guess_from_file {
+ my $filename = shift;
+ my $mimetype;
+ spawn(exec => ['file', '--brief', '--mime-type', $filename],
+ to_string => \$mimetype,
+ wait_child => 1);
+ chomp($mimetype);
+ if (exists $mime2comp{$mimetype}) {
+ return $mime2comp{$mimetype};
+ } else {
+ return;
+ }
+}
+
1;
diff --git a/scripts/uscan.pl b/scripts/uscan.pl
index a704258..b0d0bfd 100755
--- a/scripts/uscan.pl
+++ b/scripts/uscan.pl
@@ -33,8 +33,8 @@ use File::Temp qw/tempfile tempdir/;
use List::Util qw/first/;
use filetest 'access';
use Getopt::Long qw(:config gnu_getopt);
-use lib '/usr/share/devscripts';
-use Devscripts::Compression qw/compression_is_supported compression_guess_from_filename compression_get_property/;
+BEGIN { push(@INC, '/usr/share/devscripts') } # append to @INC, so that -I . has precedence
+use Devscripts::Compression qw/compression_is_supported compression_guess_from_file compression_get_property/;
use Devscripts::Versort;
use Text::ParseWords;
BEGIN {
@@ -365,7 +365,7 @@ if (defined $opt_repack_compression) {
lzma => 'lzma',
);
- # Normalize compression methods to the names used by Dpkg.Compression
+ # Normalize compression methods to the names used by Dpkg::Compression
if (compression_is_supported($opt_repack_compression)) {
$repack_compression = $opt_repack_compression;
} elsif (exists $ext2comp{$opt_repack_compression}) {
@@ -1508,7 +1508,7 @@ EOF
$newfile_base = $newfile_base_compression;
} elsif ($repack) { # Repacking from tar to tar, so just change the compression
- my $comp = compression_guess_from_filename($newfile_base);
+ my $comp = compression_guess_from_file("$destdir/$newfile_base");
unless ($comp) {
uscan_die("Cannot determine compression method of $newfile_base");
}
@@ -1611,7 +1611,7 @@ EOF
my $newfile_base_dfsg = "${pkg}_${newversion}${excludesuffix}.orig.tar" ;
$symlink = 'files-excluded'; # prevent symlinking or renaming
- my $comp = compression_guess_from_filename($newfile_base);
+ my $comp = compression_guess_from_file("$destdir/$newfile_base");
unless ($comp) {
uscan_die("Cannot determine compression method of $newfile_base");
}
@@ -1631,7 +1631,7 @@ EOF
my ($renamed_base);
if ($newfile_base =~ $tarbase_regex) {
- my $compression = compression_guess_from_filename($newfile_base);
+ my $compression = compression_guess_from_file("$destdir/$newfile_base");
unless ($compression) {
uscan_die("Cannot determine compression method of $newfile_base");
}
@@ -2277,7 +2277,7 @@ sub compress_archive($$$) {
sub decompress_archive($$) {
my ($from_file, $to_file) = @_;
- my $comp = compression_guess_from_filename($from_file);
+ my $comp = compression_guess_from_file($from_file);
unless ($comp) {
uscan_die("Cannot determine compression method of $from_file");
}
diff --git a/test/test_uscan b/test/test_uscan
index fe7d9f9..52646c3 100755
--- a/test/test_uscan
+++ b/test/test_uscan
@@ -77,7 +77,7 @@ END
python -m SimpleHTTPServer $PORT &
echo $! > pid )
- OUTPUT=$( (cd $TMPDIR/$PKG ; $COMMAND --verbose --repack --repack-compression=$to_comp) )
+ (cd $TMPDIR/$PKG ; $COMMAND --verbose --repack --repack-compression=$to_comp)
TARBALL=${PKG}_1.orig.tar.$to_comp
assertTrue 'pristine tarball is not created' "[ -f $TMPDIR/$TARBALL ]"
--
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