X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=5215a5aac6498ed03714671fa1a227ad8907fceb;hp=4f63f0324b56dea474fbd5beaab182feeb687b32;hb=87b18ec0382a4191a65e935d55c9ac4543a3d376;hpb=31995d0c8b6212275829a7e432821d5d94633ef5 diff --git a/dgit b/dgit index 4f63f032..5215a5aa 100755 --- a/dgit +++ b/dgit @@ -3111,21 +3111,27 @@ 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 '--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 +3154,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,11 +3194,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;