chiark / gitweb /
dgit-repos-server: Break out mode_ssh and generalise --ssh option (nfc)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 28 Apr 2015 09:48:24 +0000 (10:48 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 31 May 2015 10:54:06 +0000 (11:54 +0100)
infra/dgit-repos-server

index 93f6481e35a1a2a605adcb6f7a82bd615bd1a7e8..67a6fc5118348cbb82f865248ecdd37a9866af95 100755 (executable)
@@ -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 () {