summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorModestas Vainius <modestas@vainius.eu>2009-03-23 02:23:17 +0200
committerJoey Hess <joey@gnu.kitenet.net>2009-03-23 14:59:13 -0400
commit66c68aa531bc5a1739be40c25483f036022de7a1 (patch)
tree4eb57b19e070a427bdffdf94a7308c45c62aa8b8
parentce53a5276c9f3a388dce10f442c3c1659e3bccdb (diff)
Add a global --remaining-packages option.
Add a global --remaining-packages option which allows to skip the command on the packages which it has already been run on (i.e. if the command helper is already present in the package debhelper log). Signed-off-by: Modestas Vainius <modestas@vainius.eu>
-rw-r--r--Debian/Debhelper/Dh_Getopt.pm6
-rw-r--r--Debian/Debhelper/Dh_Lib.pm19
-rw-r--r--debhelper.pod8
-rwxr-xr-xdh17
4 files changed, 32 insertions, 18 deletions
diff --git a/Debian/Debhelper/Dh_Getopt.pm b/Debian/Debhelper/Dh_Getopt.pm
index ef94e940..5585a54c 100644
--- a/Debian/Debhelper/Dh_Getopt.pm
+++ b/Debian/Debhelper/Dh_Getopt.pm
@@ -91,6 +91,8 @@ sub getoptions {
"N=s" => \&ExcludePackage,
"no-package=s" => \&ExcludePackage,
+ "remaining-packages" => \$dh{EXCLUDE_LOGGED},
+
"dbg-package=s" => \&AddDebugPackage,
"s" => \&AddPackage,
@@ -222,6 +224,10 @@ sub parseopts {
my $package;
my %packages_seen;
foreach $package (@{$dh{DOPACKAGES}}) {
+ if (defined($dh{EXCLUDE_LOGGED}) &&
+ grep { $_ eq basename($0) } load_log($package)) {
+ $exclude_package{$package}=1;
+ }
if (! $exclude_package{$package}) {
if (! exists $packages_seen{$package}) {
$packages_seen{$package}=1;
diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm
index d4811283..23e81a60 100644
--- a/Debian/Debhelper/Dh_Lib.pm
+++ b/Debian/Debhelper/Dh_Lib.pm
@@ -15,7 +15,7 @@ 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);
+ &inhibit_log &load_log);
my $max_compat=7;
@@ -102,7 +102,22 @@ sub END {
if ($? == 0 && $write_log) {
write_log(basename($0), @{$dh{DOPACKAGES}});
}
-}
+}
+
+sub load_log {
+ my ($package, $db)=@_;
+ my $ext=pkgext($package);
+
+ my @log;
+ open(LOG, "<", "debian/${ext}debhelper.log") || return;
+ while (<LOG>) {
+ chomp;
+ push @log, $_;
+ $db->{$package}{$_}=1 if (defined $db);
+ }
+ close LOG;
+ return @log;
+}
sub write_log {
my $cmd=shift;
diff --git a/debhelper.pod b/debhelper.pod
index 77ace5c3..dad286ee 100644
--- a/debhelper.pod
+++ b/debhelper.pod
@@ -118,6 +118,14 @@ are not architecture independent.
Do not act on the specified package even if an -a, -i, or -p option lists
the package as one that should be acted on.
+=item B<--remaining-packages>
+
+Do not act on the packages which have already been acted on by this debhelper
+command earlier (i.e. if the command is present in the package debhelper log).
+For example, if you need to call the command with special options only for a
+couple of binary packages, pass this option to the last call of the command to
+process the rest of packages with default settings.
+
=item B<--ignore=>I<file>
Ignore the specified file. This can be used if debian/ contains a debhelper
diff --git a/dh b/dh
index 8639ed07..ab7ddb07 100755
--- a/dh
+++ b/dh
@@ -376,7 +376,7 @@ while (@ARGV_orig) {
my %logged;
my %startpoint;
foreach my $package (@packages) {
- my @log=loadlog($package);
+ my @log=load_log($package, \%logged);
if ($dh{AFTER}) {
# Run commands in the sequence that come after the
# specified command.
@@ -484,21 +484,6 @@ sub run {
}
}
-sub loadlog {
- my $package=shift;
- my $ext=pkgext($package);
-
- my @log;
- open(LOG, "<", "debian/${ext}debhelper.log") || return;
- while (<LOG>) {
- chomp;
- push @log, $_;
- $logged{$package}{$_}=1;
- }
- close LOG;
- return @log;
-}
-
sub writelog {
Debian::Debhelper::Dh_Lib::write_log(@_);
}