chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
772fdc0
)
Honour policy hook
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Tue, 17 Mar 2015 22:40:04 +0000
(22:40 +0000)
committer
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sun, 22 Mar 2015 15:19:27 +0000
(15:19 +0000)
infra/dgit-repos-server
patch
|
blob
|
history
diff --git
a/infra/dgit-repos-server
b/infra/dgit-repos-server
index c20eb68f54bbca1f5dde6dfbc14ae9f12d44950a..8162fa109cab65e8c66fe2afb8be89ee7b5d7c35 100755
(executable)
--- a/
infra/dgit-repos-server
+++ b/
infra/dgit-repos-server
@@
-188,6
+188,18
@@
sub runcmd {
die "@_ $? $!" if $r;
}
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 () {
#----- git-receive-pack -----
sub fixmissing__git_receive_pack () {
@@
-492,11
+504,15
@@
sub checks () {
debug "translated version $v";
$tagname eq "debian/$v" or die;
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";
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";
$?=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;
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 {
if (stat $realdestrepo) {
$destrepo = $realdestrepo;
} else {