diff options
-rw-r--r-- | Debian/Debhelper/Dh_Lib.pm | 51 | ||||
-rw-r--r-- | debian/changelog | 7 | ||||
-rwxr-xr-x | dh | 13 |
3 files changed, 53 insertions, 18 deletions
diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm index 9b6118e9..01777210 100644 --- a/Debian/Debhelper/Dh_Lib.pm +++ b/Debian/Debhelper/Dh_Lib.pm @@ -15,8 +15,8 @@ use vars qw(@ISA @EXPORT %dh); &filedoublearray &getpackages &basename &dirname &xargs %dh &compat &addsubstvar &delsubstvar &excludefile &package_arch &is_udeb &udeb_filename &debhelper_script_subst &escape_shell - &inhibit_log &load_log &write_log &dpkg_architecture_value - &sourcepackage + &inhibit_log &load_log &write_log &commit_override_log + &dpkg_architecture_value &sourcepackage &is_make_jobserver_unavailable &clean_jobserver_makeflags &cross_command); @@ -107,16 +107,36 @@ sub END { } } +sub logfile { + my $package=shift; + my $ext=pkgext($package); + return "debian/${ext}debhelper.log" +} + +sub add_override { + my $line=shift; + $line="override_$ENV{DH_INTERNAL_OVERRIDE} $line" + if defined $ENV{DH_INTERNAL_OVERRIDE}; + return $line; +} + +sub remove_override { + my $line=shift; + $line=~s/^\Qoverride_$ENV{DH_INTERNAL_OVERRIDE}\E\s+// + if defined $ENV{DH_INTERNAL_OVERRIDE}; + return $line; +} + sub load_log { my ($package, $db)=@_; - my $ext=pkgext($package); my @log; - open(LOG, "<", "debian/${ext}debhelper.log") || return; + open(LOG, "<", logfile($package)) || return; while (<LOG>) { chomp; - push @log, $_; - $db->{$package}{$_}=1 if defined $db; + my $command=remove_override($_); + push @log, $command; + $db->{$package}{$command}=1 if defined $db; } close LOG; return @log; @@ -126,13 +146,22 @@ sub write_log { my $cmd=shift; my @packages=@_; - return if defined $ENV{DH_INHIBIT_LOG} && $cmd eq $ENV{DH_INHIBIT_LOG}; - foreach my $package (@packages) { - my $ext=pkgext($package); - my $log="debian/${ext}debhelper.log"; + my $log=logfile($package); open(LOG, ">>", $log) || error("failed to write to ${log}: $!"); - print LOG $cmd."\n"; + print LOG add_override($cmd)."\n"; + close LOG; + } +} + +sub commit_override_log { + my @packages=@_; + + foreach my $package (@packages) { + my @log=map { remove_override($_) } load_log($package); + my $log=logfile($package); + open(LOG, ">", $log) || error("failed to write to ${log}: $!"); + print LOG $_."\n" foreach @log; close LOG; } } diff --git a/debian/changelog b/debian/changelog index 02eb5823..6858f0f2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,13 @@ debhelper (8.1.1) UNRELEASED; urgency=low * dh_strip, dh_makeshlibs: use triplet-objdump, triplet-objcopy and - triplet-strip from cross-binutils when cross-compiling; closes: #412118. + triplet-strip from cross-binutils when cross-compiling; Closes: #412118. (Thanks, Loïc Minier) + * Improve handling of logging in override targets, so that + --remaining-packages can be used again. Now all debhelper commands run + in the override target are marked as running as part of the override, + and when the whole target is run, the log is updated to indicate that + commands run during the override have finished. Closes: #612828 -- Joey Hess <joeyh@debian.org> Tue, 08 Feb 2011 15:32:35 -0400 @@ -647,9 +647,7 @@ sub run { # This passes the options through to commands called # inside the target. $ENV{DH_INTERNAL_OPTIONS}=join("\x1e", @options); - # Prevent commands called inside the target from - # logging. - $ENV{DH_INHIBIT_LOG}=$command; + $ENV{DH_INTERNAL_OVERRIDE}=$command; $command="debian/rules"; @options="override_".$override_command; } @@ -670,10 +668,11 @@ sub run { else { print " ", "# Skipping ", $override_command, " - empty override", "\n"; } - + if (! $dh{NO_ACT}) { if (defined $command) { my $ret=system($command, @options); + if ($ret >> 8 != 0) { exit $ret >> 8; } @@ -683,8 +682,6 @@ sub run { } if (defined $override_command) { - delete $ENV{DH_INTERNAL_OPTIONS}; - delete $ENV{DH_INHIBIT_LOG}; # Update log for overridden command now that it has # finished successfully. # (But avoid logging for dh_clean since it removes @@ -692,8 +689,12 @@ sub run { if ($override_command ne 'dh_clean') { my %packages=map { $_ => 1 } @packages; map { delete $packages{$_} } @exclude; + commit_override_log(keys %packages); write_log($override_command, keys %packages); } + + delete $ENV{DH_INTERNAL_OPTIONS}; + delete $ENV{DH_INTERNAL_OVERRIDE}; } } } |