From: Ian Jackson Date: Sat, 2 May 2015 15:52:09 +0000 (+0100) Subject: Policy hook protocol: pass dgit live directory (nfc) X-Git-Tag: debian/0.30~211 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=a7300206ae2e77d77f722e616123ddfc6dc02298 Policy hook protocol: pass dgit live directory (nfc) --- diff --git a/infra/dgit-repos-policy-debian b/infra/dgit-repos-policy-debian index 88eb4fce..0c7d8887 100755 --- a/infra/dgit-repos-policy-debian +++ b/infra/dgit-repos-policy-debian @@ -15,6 +15,7 @@ use Debian::Dgit::Policy::Debian; our $distro = shift @ARGV // die "need DISTRO"; our $repos = shift @ARGV // die "need DGIT-REPOS-DIR"; +our $dgitlive = shift @ARGV // die "need DGIT-LIVE-DIR"; our $action = shift @ARGV // die "need ACTION"; our $publicmode = 02775; diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server index 51550146..0d55aa13 100755 --- a/infra/dgit-repos-server +++ b/infra/dgit-repos-server @@ -8,6 +8,7 @@ # --repos=GIT-REPOS-DIR default DISTRO-DIR/repos/ # --suites=SUITES-FILE default DISTRO-DIR/suites # --policy-hook=POLICY-HOOK default DISTRO-DIR/policy-hook +# --dgit-live=DGIT-LIVE-DIR default DISTRO-DIR/dgit-live # (DISTRO-DIR is not used other than as default) # internal usage: # .../dgit-repos-server --pre-receive-hook PACKAGE @@ -115,7 +116,7 @@ $SIG{__WARN__} = sub { die $_[0]; }; # cleanup to do # # Policy hook script is invoked like this: -# POLICY-HOOK-SCRIPT DISTRO DGIT-REPOS-DIR ACTION... +# POLICY-HOOK-SCRIPT DISTRO DGIT-REPOS-DIR DGIT-LIVE-DIR ACTION... # ie. # POLICY-HOOK-SCRIPT ... check-list [...] # POLICY-HOOK-SCRIPT ... check-package PACKAGE [...] @@ -146,6 +147,9 @@ $SIG{__WARN__} = sub { die $_[0]; }; # First, without any locking, check-list is called. It should produce # a list of package names. Then check-package will be invoked for # each named package, in each case after taking an appropriate lock. +# +# If policy hook wants to run dgit (or something else in the dgit +# package), it should use DGIT-LIVE-DIR/dgit (etc.) use POSIX; @@ -162,6 +166,7 @@ our $package; our $distro; our $suitesfile; our $policyhook; +our $dgitlive; our $destrepo; our $workrepo; our $keyrings; @@ -266,11 +271,12 @@ sub policyhook { my ($policyallowbits, @polargs) = @_; # => ($exitstatuspolicybitmap); die if $policyallowbits & ~0x3e; - my @cmd = ($policyhook,$distro,$dgitrepos,@polargs); + my @cmd = ($policyhook,$distro,$dgitrepos,$dgitlive,@polargs); debugcmd @cmd; my $r = system @cmd; die "system: $!" if $r < 0; die "hook (@cmd) failed ($?)" if $r & ~($policyallowbits << 8); + debug sprintf "hook (%s) => %#x", "@polargs", $r; return $r >> 8; } @@ -793,9 +799,10 @@ our %indistrodir = ( 'repos' => \$dgitrepos, 'suites' => \$suitesfile, 'policy-hook' => \$policyhook, + 'dgit-live' => \$dgitlive, ); -our @hookenvs = qw(distro suitesfile policyhook keyrings dgitrepos); +our @hookenvs = qw(distro suitesfile policyhook dgitlive keyrings dgitrepos); # workrepo and destrepo handled ad-hoc