chiark / gitweb /
Option parsing: Defer addition of cmdline opts so that we can put config ones in...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Jul 2015 17:04:45 +0000 (18:04 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Jul 2015 18:55:31 +0000 (19:55 +0100)
No functional change yet.

dgit

diff --git a/dgit b/dgit
index 13b47fd32b1fcd017cb6234965e9495b9000966e..de14f92bb7d7394f474b262ec470b19bb99bf7e7 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -98,6 +98,8 @@ our %opts_opt_map = ('dget' => \@dget, # accept for compatibility
                      'mergechanges' => \@mergechanges);
 
 our %opts_opt_cmdonly = ('gpg' => 1);
                      'mergechanges' => \@mergechanges);
 
 our %opts_opt_cmdonly = ('gpg' => 1);
+our %opts_opt_cmdline_opts;
+sub finalise_opts_opts();
 
 our $keyid;
 
 
 our $keyid;
 
@@ -603,6 +605,11 @@ sub pushing () {
 Push failed, before we got started.
 You can retry the push, after fixing the problem, if you like.
 END
 Push failed, before we got started.
 You can retry the push, after fixing the problem, if you like.
 END
+    finalise_opts_opts();
+}
+
+sub notpushing () {
+    finalise_opts_opts();
 }
 
 sub supplementary_message ($) {
 }
 
 sub supplementary_message ($) {
@@ -2004,6 +2011,7 @@ END
 
 sub cmd_clone {
     parseopts();
 
 sub cmd_clone {
     parseopts();
+    notpushing();
     my $dstdir;
     badusage "-p is not allowed with clone; specify as argument instead"
        if defined $package;
     my $dstdir;
     badusage "-p is not allowed with clone; specify as argument instead"
        if defined $package;
@@ -2051,6 +2059,7 @@ sub branchsuite () {
 }
 
 sub fetchpullargs () {
 }
 
 sub fetchpullargs () {
+    notpushing();
     if (!defined $package) {
        my $sourcep = parsecontrol('debian/control','debian/control');
        $package = getfield $sourcep, 'Source';
     if (!defined $package) {
        my $sourcep = parsecontrol('debian/control','debian/control');
        $package = getfield $sourcep, 'Source';
@@ -2084,8 +2093,8 @@ sub cmd_pull {
 }
 
 sub cmd_push {
 }
 
 sub cmd_push {
-    pushing();
     parseopts();
     parseopts();
+    pushing();
     badusage "-p is not allowed with dgit push" if defined $package;
     check_not_dirty();
     my $clogp = parsechangelog();
     badusage "-p is not allowed with dgit push" if defined $package;
     check_not_dirty();
     my $clogp = parsechangelog();
@@ -2823,10 +2832,12 @@ sub clean_tree () {
 
 sub cmd_clean () {
     badusage "clean takes no additional arguments" if @ARGV;
 
 sub cmd_clean () {
     badusage "clean takes no additional arguments" if @ARGV;
+    notpushing();
     clean_tree();
 }
 
 sub build_prep () {
     clean_tree();
 }
 
 sub build_prep () {
+    notpushing();
     badusage "-p is not allowed when building" if defined $package;
     check_not_dirty();
     clean_tree();
     badusage "-p is not allowed when building" if defined $package;
     check_not_dirty();
     clean_tree();
@@ -3039,7 +3050,7 @@ sub parseopts () {
                     !$opts_opt_cmdonly{$1} &&
                     ($om = $opts_opt_map{$1})) {
                push @ropts, $_;
                     !$opts_opt_cmdonly{$1} &&
                     ($om = $opts_opt_map{$1})) {
                push @ropts, $_;
-               push @$om, $2;
+               push @{ $opts_opt_cmdline_opts{$1} }, $2;
            } elsif (m/^--existing-package=(.*)/s) {
                push @ropts, $_;
                $existing_package = $1;
            } elsif (m/^--existing-package=(.*)/s) {
                push @ropts, $_;
                $existing_package = $1;
@@ -3146,6 +3157,12 @@ sub parseopts () {
     }
 }
 
     }
 }
 
+sub finalise_opts_opts () {
+    foreach my $k (keys %opts_opt_cmdline_opts) {
+       push @{ $opts_opt_map{$k} }, @{ $opts_opt_cmdline_opts{$k} };
+    }
+}
+
 if ($ENV{$fakeeditorenv}) {
     quilt_fixup_editor();
 }
 if ($ENV{$fakeeditorenv}) {
     quilt_fixup_editor();
 }