summaryrefslogtreecommitdiff
path: root/infra
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2015-04-28 10:48:24 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2015-05-31 11:54:06 +0100
commit30256094a0925d5bd17608c844004fc25fcb3b89 (patch)
tree4c0bcd8fec40b7847f16cdded18896da59a5561e /infra
parent10ac2ae8f0d807790ac337b5424a53e8d5e239c2 (diff)
dgit-repos-server: Break out mode_ssh and generalise --ssh option (nfc)
Diffstat (limited to 'infra')
-rwxr-xr-xinfra/dgit-repos-server90
1 files changed, 49 insertions, 41 deletions
diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server
index 93f6481..67a6fc5 100755
--- a/infra/dgit-repos-server
+++ b/infra/dgit-repos-server
@@ -797,6 +797,49 @@ our @hookenvs = qw(distro suitesfile policyhook keyrings dgitrepos);
# workrepo and destrepo handled ad-hoc
+sub mode_ssh () {
+ my $cmd = $ENV{'SSH_ORIGINAL_COMMAND'};
+ $cmd =~ m{
+ ^
+ (?: \S* / )?
+ ( [-0-9a-z]+ )
+ \s+
+ '? (?: \S* / )?
+ ($package_re) \.git
+ '?$
+ }ox
+ or reject "command string not understood";
+ my $method = $1;
+ $package = $2;
+ $realdestrepo = "$dgitrepos/$package.git";
+
+ my $funcn = $method;
+ $funcn =~ y/-/_/;
+ my $mainfunc = $main::{"main__$funcn"};
+
+ reject "unknown method" unless $mainfunc;
+
+ my $lfh = lockrealtree();
+
+ $policy = policyhook(FRESHREPO,'check-package',$package);
+ if ($policy & FRESHREPO) {
+ movetogarbage;
+ }
+
+ close $lfh;
+
+ if (stat_exists $realdestrepo) {
+ $destrepo = $realdestrepo;
+ } else {
+ debug " fixmissing $funcn";
+ my $fixfunc = $main::{"fixmissing__$funcn"};
+ &$fixfunc;
+ }
+
+ debug " running main $funcn";
+ &$mainfunc;
+}
+
sub parseargsdispatch () {
die unless @ARGV;
@@ -842,48 +885,13 @@ sub parseargsdispatch () {
$ENV{"DGIT_DRS_\U$_"} = ${ $main::{$_} } foreach @hookenvs;
- die unless @ARGV==1 && $ARGV[0] eq '--ssh';
+ die unless @ARGV==1;
- my $cmd = $ENV{'SSH_ORIGINAL_COMMAND'};
- $cmd =~ m{
- ^
- (?: \S* / )?
- ( [-0-9a-z]+ )
- \s+
- '? (?: \S* / )?
- ($package_re) \.git
- '?$
- }ox
- or reject "command string not understood";
- my $method = $1;
- $package = $2;
- $realdestrepo = "$dgitrepos/$package.git";
-
- my $funcn = $method;
- $funcn =~ y/-/_/;
- my $mainfunc = $main::{"main__$funcn"};
-
- reject "unknown method" unless $mainfunc;
-
- my $lfh = lockrealtree();
-
- $policy = policyhook(FRESHREPO,'check-package',$package);
- if ($policy & FRESHREPO) {
- movetogarbage;
- }
-
- close $lfh;
-
- if (stat_exists $realdestrepo) {
- $destrepo = $realdestrepo;
- } else {
- debug " fixmissing $funcn";
- my $fixfunc = $main::{"fixmissing__$funcn"};
- &$fixfunc;
- }
-
- debug " running main $funcn";
- &$mainfunc;
+ my $mode = shift @ARGV;
+ die unless $mode =~ m/^--(\w+)$/;
+ my $fn = ${*::}{"mode_$1"};
+ die unless $fn;
+ $fn->();
}
sub unlockall () {