]> err.no Git - dpkg/commitdiff
Dpkg::Source::Package: Fix extract() and build() to clean up by default
authorRaphael Hertzog <hertzog@debian.org>
Thu, 28 Feb 2008 22:04:22 +0000 (23:04 +0100)
committerRaphael Hertzog <hertzog@debian.org>
Thu, 28 Feb 2008 22:04:22 +0000 (23:04 +0100)
* scripts/Dpkg/Source/Package.pm (extract, build): Change those methods
to delegate the real work to do_extract() and do_build() and catch
critical failures to clean up any temporary files/directories before
re-raising the error.
* scripts/Dpkg/Source/Package/V1_0.pm: Rename build() into do_build()
and extract() into do_extract().

scripts/Dpkg/Source/Package.pm
scripts/Dpkg/Source/Package/V1_0.pm

index 8ba2f69a98cd79153b4da04a5e9e96b96865813f..d13cae85cfc57fbed4360bbaa5d6479a54c6b498 100644 (file)
@@ -27,6 +27,7 @@ use Dpkg::Checksums;
 use Dpkg::Version qw(parseversion);
 use Dpkg::Deps qw(@src_dep_fields);
 use Dpkg::Compression;
+use Dpkg::Exit;
 
 use File::Basename;
 
@@ -216,12 +217,30 @@ sub check_signature {
 }
 
 sub extract {
+    my $self = shift;
+    eval { $self->do_extract(@_) };
+    if ($@) {
+        &$_() foreach reverse @Dpkg::Exit::handlers;
+        die $@;
+    }
+}
+
+sub do_extract {
     error("Dpkg::Source::Package doesn't know how to unpack a source package. Use one of the subclass.");
 }
 
 # Function used specifically during creation of a source package
 
 sub build {
+    my $self = shift;
+    eval { $self->do_build(@_) };
+    if ($@) {
+        &$_() foreach reverse @Dpkg::Exit::handlers;
+        die $@;
+    }
+}
+
+sub do_build {
     error("Dpkg::Source::Package doesn't know how to build a source package. Use one of the subclass.");
 }
 
index affbbb7a7872bca50286df47fc47c8f877835d02..9e0c523448c3f740af4ab1b4c35ec5e8ceed9aed 100644 (file)
@@ -35,7 +35,7 @@ use POSIX;
 use File::Basename;
 use File::Temp qw(tempfile);
 
-sub extract {
+sub do_extract {
     my ($self, $newdirectory) = @_;
     my $sourcestyle = $self->{'options'}{'sourcestyle'};
     my $fields = $self->{'fields'};
@@ -152,7 +152,7 @@ sub extract {
     }
 }
 
-sub build {
+sub do_build {
     my ($self, $dir) = @_;
     my $sourcestyle = $self->{'options'}{'sourcestyle'};
     my @argv = @{$self->{'options'}{'ARGV'}};