]> git.deb.at Git - deb/packages.git/blobdiff - bin/extract_files
Merge branch 'master' of ssh://git.debian.org/git/webwml/packages
[deb/packages.git] / bin / extract_files
index 2d4dbdcd4ab64e1f90d0d0a052aa46f826760419..3bfc5599e4bcce91d11a45c1b5facb2a2468b81f 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 #
 # Script to extract files from Debian packages
-# Copyright 2004 Frank Lichtenheld
+# Copyright 2004-2007 Frank Lichtenheld <frank@lichtenheld.de>
 #
 # 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 ) );