X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=04d67f3e8dc3bb6f887bdf85ef0c0646a64c25ae;hb=0e954781c2059b9b5ed7bbcaae018878cf5a7122;hp=4f63f0324b56dea474fbd5beaab182feeb687b32;hpb=31995d0c8b6212275829a7e432821d5d94633ef5;p=dgit.git diff --git a/dgit b/dgit index 4f63f032..04d67f3e 100755 --- a/dgit +++ b/dgit @@ -3111,21 +3111,30 @@ sub cmd_version { our (%valopts_long, %valopts_short); our @rvalopts; -sub defvalopt ($$$&) { - my ($long,$short,$val_re,$fn) = @_; - my $oi = { Long => $long, Short => $short, Re => $val_re, Fn => $fn }; +sub defvalopt ($$$$) { + my ($long,$short,$val_re,$how) = @_; + my $oi = { Long => $long, Short => $short, Re => $val_re, How => $how }; $valopts_long{$long} = $oi; $valopts_short{$short} = $oi; - # $fn subref should: + # $how subref should: # do whatever assignemnt or thing it likes with $_[0] # if the option should not be passed on to remote, @rvalopts=() + # or $how can be a scalar ref, meaning simply assign the value } -defvalopt '--since-version', '-v', '[^_]+|_', sub { - ($changes_since_version) = @_; +defvalopt '--since-version', '-v', '[^_]+|_', \$changes_since_version; +defvalopt '--distro', '-d', '.+', \$idistro; +defvalopt '--existing-package','', '.*', \$existing_package; +defvalopt '--build-products-dir','','.*', \$buildproductsdir; +defvalopt '--clean', '', $cleanmode_re, \$cleanmode; +defvalopt '--quilt', '', $quilt_modes_re, \$quilt_mode; + +defvalopt '--initiator-tempdir','','.*', sub { + ($initiator_tempdir) = (@_); + $initiator_tempdir =~ m#^/# or + badusage "--initiator-tempdir must be used specify an". + " absolute, not relative, directory." }; -defvalopt '--distro', '-d', '.+', sub { ($idistro) = (@_); }; -defvalopt '--existing-package', '', '.*', sub { ($existing_package) = (@_); }; sub parseopts () { my $om; @@ -3148,7 +3157,12 @@ sub parseopts () { } badusage "bad value \`$val' for $what" unless $val =~ m/^$oi->{Re}$(?!\n)/s; - $oi->{Fn}($val); + my $how = $oi->{How}; + if (ref($how) eq 'SCALAR') { + $$how = $val; + } else { + $how->($val); + } push @ropts, @rvalopts; }; @@ -3183,24 +3197,6 @@ sub parseopts () { ($om = $opts_opt_map{$1})) { push @ropts, $_; push @$om, $2; - } elsif (m/^--initiator-tempdir=(.*)/s) { - $initiator_tempdir = $1; - $initiator_tempdir =~ m#^/# or - badusage "--initiator-tempdir must be used specify an". - " absolute, not relative, directory." - } elsif (m/^--build-products-dir=(.*)/s) { - push @ropts, $_; - $buildproductsdir = $1; - } elsif (m/^--clean=($cleanmode_re)$/os) { - push @ropts, $_; - $cleanmode = $1; - } elsif (m/^--clean=(.*)$/s) { - badusage "unknown cleaning mode \`$1'"; - } elsif (m/^--quilt=($quilt_modes_re)$/s) { - push @ropts, $_; - $quilt_mode = $1; - } elsif (m/^--quilt=(.*)$/s) { - badusage "unknown quilt fixup mode \`$1'"; } elsif (m/^--ignore-dirty$/s) { push @ropts, $_; $ignoredirty = 1;