tags 372130 patch
thanks

Hmm, you're obviously correct, sorry about this. I modified the patch to check
whether a source tarball is still needed by parsing the remaining changes-files
of a particular upstream version.

I had to modifiy the argument list of the handlePackageFile() function
to include the name of the current changes files. The previous $action
parameter seemed obsolete to me, so I replaced it. I hope I got this right and 
it does not have any unwanted side effects.

I tested with multiple packages with or without source tarballs listed
in the changes files and it seems to work.


Cheers,

Michael



-- 
GPG key:  1024D/3144BE0F Michael Hanke
http://apsy.gse.uni-magdeburg.de/hanke
ICQ: 48230050
--- /usr/bin/debarchiver        2006-06-10 13:57:07.000000000 +0200
+++ /home/hanke/bin/my-debarchiver      2006-06-11 19:47:07.914210264 +0200
@@ -1464,7 +1464,7 @@
 
     my $file;
     foreach $file (keys %CFiles) {
-       handlePackageFile($file);
+       handlePackageFile($file, $cfile);
     }
     installChangesFile($cfile);
     mailSuccess();
@@ -1547,7 +1547,7 @@
 ###############################################################################
 
 sub handlePackageFile ($) {
-    my ($file, $action) = @_;
+    my ($file, $cfile) = @_;
     my $distrd = $CConf{Distribution};
 
     pdebug(5, "File $_:  $CFiles{$file}");
@@ -1610,10 +1610,43 @@
        cmdaction("$copycmd $file $installto",
                  "Installing $file to $installto.",
                  2);
-    }
-    cmdaction("$rmcmd $file",
-             "Removing $file after it has been installed.",
-             2);
+       }
+       # flag whether file should get deleted
+       my $killfile = 1;
+               
+       # only do checks of processing source tarballs
+       if ($file =~ m/.tar.gz$/) {
+               my @upstream_version = split(/-/, $ver);
+               $upstream_version = $upstream_version[0];
+                       
+               # get list of remaining *.changes files of this package 
upstream 
+               # version
+               my @otherchangesfiles = <$inputdir/${pkgname}_$upver*.changes>;
+
+               # check whether any of the remaining *.changes files does not 
match the 
+               # current package
+               CHGSPARSER: foreach my $otherchangesfile (@otherchangesfiles) {
+                       if (!($otherchangesfile =~ $cfile)) {
+                               open ( otherchangesfilehandle, 
$otherchangesfile);
+                                       
+                               while ($line = <otherchangesfilehandle>) {
+                                       if ($line =~ 
m/${pkgname}_$upver.*\.tar\.gz/) {
+                                               pdebug(4, "Found additional 
package using the source tarball of the package. Will not delete it now!");
+                                               $killfile = 0;
+                                               close(otherchangesfilehandle);
+                                               last CHGSPARSER;
+                                       }
+                               }
+
+                               close(otherchangesfilehandle)
+                       }
+               }
+       }
+    
+       if ($killfile) {
+               cmdaction("$rmcmd $file", 
+                       "Removing $file after it has been installed.", 2);
+               }
 }
 
 ###############################################################################

Attachment: signature.asc
Description: Digital signature

Reply via email to