summaryrefslogtreecommitdiff
path: root/infra/dgit-repos-server
diff options
context:
space:
mode:
Diffstat (limited to 'infra/dgit-repos-server')
-rwxr-xr-xinfra/dgit-repos-server49
1 files changed, 34 insertions, 15 deletions
diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server
index d3d711f..93f6481 100755
--- a/infra/dgit-repos-server
+++ b/infra/dgit-repos-server
@@ -2,10 +2,13 @@
# dgit-repos-server
#
# usages:
-# .../dgit-repos-server DISTRO SUITES KEYRING-AUTH-SPEC \
-# DGIT-REPOS-DIR POLICY-HOOK-SCRIPT --ssh
-# .../dgit-repos-server DISTRO SUITES KEYRING-AUTH-SPEC \
-# DGIT-REPOS-DIR POLICY-HOOK-SCRIPT --cron
+# dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [<settings>] --ssh
+# dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [<settings>] --cron
+# settings
+# --repos=GIT-REPOS-DIR default DISTRO-DIR/repos/
+# --suites=SUITES-FILE default DISTRO-DIR/suites
+# --policy-hook=POLICY-HOOK default DISTRO-DIR/policy-hook
+# (DISTRO-DIR is not used other than as default)
# internal usage:
# .../dgit-repos-server --pre-receive-hook PACKAGE
#
@@ -16,7 +19,7 @@
# SUITES is the name of a file which lists the permissible suites
# one per line (#-comments and blank lines ignored)
#
-# KEYRING-AUTH-SPEC is a :-separated list of
+# AUTH-SPEC is a :-separated list of
# KEYRING.GPG,AUTH-SPEC
# where AUTH-SPEC is one of
# a
@@ -783,6 +786,17 @@ sub argval () {
return $v;
}
+our %indistrodir = (
+ # keys are used for DGIT_DRS_XXX too
+ 'repos' => \$dgitrepos,
+ 'suites' => \$suitesfile,
+ 'policy-hook' => \$policyhook,
+ );
+
+our @hookenvs = qw(distro suitesfile policyhook keyrings dgitrepos);
+
+# workrepo and destrepo handled ad-hoc
+
sub parseargsdispatch () {
die unless @ARGV;
@@ -799,13 +813,9 @@ sub parseargsdispatch () {
shift @ARGV;
@ARGV == 1 or die;
$package = shift @ARGV;
- defined($distro = $ENV{'DGIT_DRS_DISTRO'}) or die;
- defined($dgitrepos = $ENV{'DGIT_DRS_REPOS'}) or die;
- defined($suitesfile = $ENV{'DGIT_DRS_SUITES'}) or die;
+ ${ $main::{$_} } = $ENV{"DGIT_DRS_\U$_"} foreach @hookenvs;
defined($workrepo = $ENV{'DGIT_DRS_WORK'}) or die;
defined($destrepo = $ENV{'DGIT_DRS_DEST'}) or die;
- defined($keyrings = $ENV{'DGIT_DRS_KEYRINGS'}) or die $!;
- defined($policyhook = $ENV{'DGIT_DRS_POLICYHOOK'}) or die $!;
open STDOUT, ">&STDERR" or die $!;
eval {
stunthook();
@@ -817,11 +827,20 @@ sub parseargsdispatch () {
exit 0;
}
- $ENV{'DGIT_DRS_DISTRO'} = $distro = argval();
- $ENV{'DGIT_DRS_SUITES'} = $suitesfile = argval();
- $ENV{'DGIT_DRS_KEYRINGS'} = $keyrings = argval();
- $ENV{'DGIT_DRS_REPOS'} = $dgitrepos = argval();
- $ENV{'DGIT_DRS_POLICYHOOK'} = $policyhook = argval();
+ $distro = $ENV{'DGIT_DRS_DISTRO'} = argval();
+ my $distrodir = argval();
+ $keyrings = $ENV{'DGIT_DRS_KEYRINGS'} = argval();
+
+ foreach my $dk (keys %indistrodir) {
+ ${ $indistrodir{$dk} } = "$distrodir/$dk";
+ }
+
+ while (@ARGV && $ARGV[0] =~ m/^--([-0-9a-z]+)=/ && $indistrodir{$1}) {
+ ${ $indistrodir{$1} } = $'; #';
+ shift @ARGV;
+ }
+
+ $ENV{"DGIT_DRS_\U$_"} = ${ $main::{$_} } foreach @hookenvs;
die unless @ARGV==1 && $ARGV[0] eq '--ssh';