X-Git-Url: https://git.deb.at/?p=deb%2Fpackages.git;a=blobdiff_plain;f=bin%2Fextract_files;h=3bfc5599e4bcce91d11a45c1b5facb2a2468b81f;hp=2d4dbdcd4ab64e1f90d0d0a052aa46f826760419;hb=365cc50e2a22798a94e4bc01f767937ad057d609;hpb=36df75060d34f006ad631acf2cf1830f256570d3 diff --git a/bin/extract_files b/bin/extract_files index 2d4dbdc..3bfc559 100755 --- a/bin/extract_files +++ b/bin/extract_files @@ -1,7 +1,7 @@ #!/usr/bin/perl # # Script to extract files from Debian packages -# Copyright 2004 Frank Lichtenheld +# Copyright 2004-2007 Frank Lichtenheld # # based on a shell script which was # Copyright 2003 Noel Köthe @@ -19,7 +19,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; use warnings; @@ -72,7 +72,15 @@ my %opthash = ( 'help' => \$help, ); -my (%src_packages, %bin_packages, %cache, %stats); +my (%src_packages, %bin_packages, %cache); + +my %stats = ( + src_pkgs => 0, + src_cache => 0, + already_extracted => 0, + bin_pkgs => 0, + bin_cache => 0, + ); Getopt::Long::config('no_getopt_compat', 'no_auto_abbrev'); @@ -126,26 +134,20 @@ sub add_log { # PACKAGE HANDLING (UNPACKING/CLEANUP) sub unpack_srcpkg { - my ( $dscname, $log ) = @_; + my ( $pkgname, $dscname, $log ) = @_; chdir( $TEMPDIR ) or do_error( "couldn't change working directory to $TEMPDIR" ); - add_log( $log, "dpkg-source -sn -x $dscname" ); - - my $out = qx/dpkg-source -sn -x "$dscname" 2>&1/; - my ($dir) = ($out =~ /(\S+)$/mo); + add_log( $log, "dpkg-source -sn -x $dscname $pkgname+source" ); - add_log( $log, "dpkg-source output: ", $out ); - -#Bug#246802 -# system("dpkg-source", "-x", $dscname ) == 0 -# or do { -# do_warning( "couldn't unpack $dscname" ); -# add_log( $log, "couldn't unpack $dscname" ); -# return; -# }; + system("dpkg-source", "-sn", "-x", $dscname, "$pkgname+source" ) == 0 + or do { + do_warning( "couldn't unpack $dscname: $!" ); + add_log( $log, "couldn't unpack $dscname: $!" ); + return; + }; - return $dir; + return "$pkgname+source"; } sub unpack_binpkg { @@ -401,7 +403,7 @@ sub extract_files { return; } - if (my $source_dir = unpack_srcpkg( $pkg_data->{dsc}, \$log )) { + if (my $source_dir = unpack_srcpkg( $pkg_data->{src_name}, $pkg_data->{dsc}, \$log )) { $source_dir = "$TEMPDIR/$source_dir"; @@ -529,7 +531,7 @@ sub read_dsc { dsc => $dscname, }; - unless( $pkg_data->{src_name} && $pkg_data->{src_version} + unless( $pkg_data->{src_name} && defined($pkg_data->{src_version}) && $pkg_data->{dsc} ) { use Data::Dumper; do_error( "something fishy happened.\n", Dumper( $pkg_data ) );