X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=infra%2Fdgit-repos-server;h=1492794e4088b0154820d557305dbbd3c9c424d9;hp=7925d04510515acc6cb16e0a51d8af00ec273e03;hb=f9bb29b6bb9517ea16c05cdb64afe6cd7288ae85;hpb=c02c4c21a1ae474acf22b09b400081d4e21fb149 diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server index 7925d045..1492794e 100755 --- a/infra/dgit-repos-server +++ b/infra/dgit-repos-server @@ -9,7 +9,7 @@ # --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) +# (DISTRO-DIR is not used other than as default and to pass to policy hook) # internal usage: # .../dgit-repos-server --pre-receive-hook PACKAGE # @@ -117,7 +117,7 @@ $SIG{__WARN__} = sub { die $_[0]; }; # cleanup to do # # Policy hook script is invoked like this: -# POLICY-HOOK-SCRIPT DISTRO DGIT-REPOS-DIR DGIT-LIVE-DIR ACTION... +# POLICY-HOOK-SCRIPT DISTRO DGIT-REPOS-DIR DGIT-LIVE-DIR DISTRO-DIR ACTION... # ie. # POLICY-HOOK-SCRIPT ... check-list [...] # POLICY-HOOK-SCRIPT ... check-package PACKAGE [...] @@ -179,6 +179,7 @@ our $distro; our $suitesfile; our $policyhook; our $dgitlive; +our $distrodir; our $destrepo; our $workrepo; our $keyrings; @@ -270,13 +271,13 @@ sub policyhook { my ($policyallowbits, @polargs) = @_; # => ($exitstatuspolicybitmap); die if $policyallowbits & ~0x3e; - my @cmd = ($policyhook,$distro,$dgitrepos,$dgitlive,@polargs); + my @cmd = ($policyhook,$distro,$dgitrepos,$dgitlive,$distrodir,@polargs); debugcmd '+',@cmd; my $r = system @cmd; die "system: $!" if $r < 0; die "hook (".(shellquote @cmd).") failed ($?)" if $r & ~($policyallowbits << 8); - printdebug sprintf "hook (%s) => %#x\n", (shellquote @polargs), $r; + printdebug sprintf "hook => %#x\n", $r; return $r >> 8; } @@ -301,15 +302,21 @@ sub movetogarbage () { # purposes (and, I guess, recovery from mistakes). This is either # $garbage or $garbage-old. if (stat_exists "$garbagerepo") { + printdebug "movetogarbage: rmtree $garbagerepo-tmp\n"; rmtree "$garbagerepo-tmp"; if (rename "$garbagerepo-old", "$garbagerepo-tmp") { + printdebug "movetogarbage: $garbagerepo-old -> -tmp, rmtree\n"; rmtree "$garbagerepo-tmp"; } else { die "$garbagerepo $!" unless $!==ENOENT; + printdebug "movetogarbage: $garbagerepo-old -> -tmp\n"; } + printdebug "movetogarbage: $garbagerepo -> -old\n"; rename "$garbagerepo", "$garbagerepo-old" or die "$garbagerepo $!"; } - rename realdestrepo, $garbagerepo + my $real = realdestrepo; + printdebug "movetogarbage: $real -> $garbagerepo\n"; + rename $real, $garbagerepo or $! == ENOENT or die "$garbagerepo $!"; } @@ -815,7 +822,8 @@ our %indistrodir = ( 'dgit-live' => \$dgitlive, ); -our @hookenvs = qw(distro suitesfile policyhook dgitlive keyrings dgitrepos); +our @hookenvs = qw(distro suitesfile policyhook + dgitlive keyrings dgitrepos distrodir); # workrepo and destrepo handled ad-hoc @@ -912,9 +920,9 @@ sub parseargsdispatch () { exit 0; } - $distro = $ENV{'DGIT_DRS_DISTRO'} = argval(); - my $distrodir = argval(); - $keyrings = $ENV{'DGIT_DRS_KEYRINGS'} = argval(); + $distro = argval(); + $distrodir = argval(); + $keyrings = argval(); foreach my $dk (keys %indistrodir) { ${ $indistrodir{$dk} } = "$distrodir/$dk";