From 444896a3a9780647f751966f2c0b26f39c5cd8d3 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 17 Mar 2015 22:40:04 +0000 Subject: [PATCH] Honour policy hook --- infra/dgit-repos-server | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server index c20eb68f..8162fa10 100755 --- a/infra/dgit-repos-server +++ b/infra/dgit-repos-server @@ -188,6 +188,18 @@ sub runcmd { die "@_ $? $!" if $r; } +sub policyhook { + my ($policyallowbits, @polargs) = @_; + # => ($exitstatuspolicybitmap, $policylockfh); + die if $policyallowbits & ~0x3e; + my @cmd = ($policyhook,$distro,$repos,@polargs); + debugcmd @_; + my $r = system @_; + die "system: $!" if $r < 0; + die "hook (@cmd) failed ($?)" if $r & ~($policyallowbits << 8); + return $r >> 8; +} + #----- git-receive-pack ----- sub fixmissing__git_receive_pack () { @@ -492,11 +504,15 @@ sub checks () { debug "translated version $v"; $tagname eq "debian/$v" or die; + my ($policy) = policyhook(2,'push',$package, + $version,$suite,$tagname, + join(",",@delberatelies)); + checksuite(); # check that our ref is being fast-forwarded debug "oldcommit $oldcommit"; - if ($oldcommit =~ m/[^0]/) { + if (!($policy & 2) && $oldcommit =~ m/[^0]/) { $?=0; $!=0; my $mb = `git merge-base $commit $oldcommit`; chomp $mb; $mb eq $oldcommit or reject "not fast forward on dgit branch"; @@ -615,6 +631,17 @@ sub parseargsdispatch () { reject "unknown method" unless $mainfunc; + my ($policy, $pollock) = policyhook(4, 'check-package',$package); + if ($policy & 4) { + my $garbagerepo = "$dgitrepos/_tmp/${package}_garbage"; + acquiretree($garbagerepo,1); + rmtree $garbagerepo; + rename $realdestrepo, $garbagerepo + or $! == ENOENT + or die "rename repo $destrepo to $garbagerepo: $!"; + } + close $pollock or die $!; + if (stat $realdestrepo) { $destrepo = $realdestrepo; } else { -- 2.30.2