From 30256094a0925d5bd17608c844004fc25fcb3b89 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 28 Apr 2015 10:48:24 +0100 Subject: dgit-repos-server: Break out mode_ssh and generalise --ssh option (nfc) --- infra/dgit-repos-server | 90 +++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 41 deletions(-) (limited to 'infra/dgit-repos-server') 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 () { -- cgit v1.2.3