chiark / gitweb /
Option parsing: Redo .opts-CMD parsing to use insertpos
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Jul 2015 19:32:40 +0000 (20:32 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Jul 2015 21:42:03 +0000 (22:42 +0100)
dgit

diff --git a/dgit b/dgit
index f9a67ce4ff7939a9c00e0b05e49a2e0c6dd4c26f..7d2023e5c91ab266d3c94a81b9cd8f8ad5497c44 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -98,7 +98,11 @@ our %opts_opt_map = ('dget' => \@dget, # accept for compatibility
                      'mergechanges' => \@mergechanges);
 
 our %opts_opt_cmdonly = ('gpg' => 1);
-our %opts_opt_cmdline_opts;
+our %opts_cfg_insertpos = map {
+    $_,
+    scalar @{ $opts_opt_map{$_} }
+} keys %opts_opt_map;
+
 sub finalise_opts_opts();
 
 our $keyid;
@@ -3056,7 +3060,7 @@ sub parseopts () {
                     !$opts_opt_cmdonly{$1} &&
                     ($om = $opts_opt_map{$1})) {
                push @ropts, $_;
-               push @{ $opts_opt_cmdline_opts{$1} }, $2;
+               push @$om, $2;
            } elsif (m/^--existing-package=(.*)/s) {
                push @ropts, $_;
                $existing_package = $1;
@@ -3181,7 +3185,10 @@ sub finalise_opts_opts () {
            if ($?==0) {
                badcfg "cannot configure options for $k"
                    if $opts_opt_cmdonly{$k};
-               push @$om, split /\0/, $vs;
+               my $insertpos = $opts_cfg_insertpos{$k};
+               @$om = ( @$om[0..$insertpos-1],
+                        (split /\0/, $vs),
+                        @$om[$insertpos..$#$om] );
            } elsif ($?==256) {
                die "$k $c ?" if length $vs;
            } else {
@@ -3189,10 +3196,6 @@ 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}) {