summaryrefslogtreecommitdiff
path: root/infra/dgit-repos-server
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2015-03-21 17:43:40 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2015-03-22 15:20:30 +0000
commit34eb5dad67ac7e3353016d3a109b8e78fb780655 (patch)
tree286287c6fc009151a13de3cbbf96fcc96779f4f4 /infra/dgit-repos-server
parentf4f514f696e7a6579f287869a1e264134aa50b3b (diff)
dgit-repos-server: Further fixes to locking; rename acquiretree to acquirermtree
Diffstat (limited to 'infra/dgit-repos-server')
-rwxr-xr-xinfra/dgit-repos-server38
1 files changed, 23 insertions, 15 deletions
diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server
index b0064e7..8a75d05 100755
--- a/infra/dgit-repos-server
+++ b/infra/dgit-repos-server
@@ -157,7 +157,7 @@ sub acquirelock ($$) {
return $fh;
}
-sub acquiretree ($$) {
+sub acquirermtree ($$) {
my ($tree, $must) = @_;
my $fh = acquirelock("$tree.lock", $must);
if ($fh) {
@@ -167,6 +167,15 @@ sub acquiretree ($$) {
return $fh;
}
+sub locksometree ($) {
+ my ($tree) = @_;
+ acquirelock("$tree.lock", 1);
+}
+
+sub lockrealtree () {
+ locksometree($realdestrepo);
+}
+
sub mkrepotmp () {
my $tmpdir = "$dgitrepos/_tmp";
return if mkdir $tmpdir;
@@ -211,7 +220,7 @@ sub runcmd {
sub policyhook {
my ($policyallowbits, @polargs) = @_;
- # => ($exitstatuspolicybitmap, $policylockfh);
+ # => ($exitstatuspolicybitmap);
die if $policyallowbits & ~0x3e;
my @cmd = ($policyhook,$distro,$repos,@polargs);
debugcmd @_;
@@ -229,7 +238,7 @@ sub mkemptyrepo ($$) {
sub mkrepo_fromtemplate ($) {
my ($dir) = @_;
my $template = "$dgitrepos/_template";
- acquiretree($template,1);
+ locksometree($template);
debug "copy template $template -> $dir";
my $r = system qw(cp -a --), $template, $dir;
!$r or die "create new repo $dir failed: $r $!";
@@ -271,15 +280,15 @@ sub onwardpush () {
sub fixmissing__git_receive_pack () {
mkrepotmp();
$destrepo = "$dgitrepos/_tmp/${package}_prospective";
- acquiretree($destrepo, 1);
+ acquirermtree($destrepo, 1);
mkrepo_fromtemplate($destrepo);
}
sub makeworkingclone () {
mkrepotmp();
$workrepo = "$dgitrepos/_tmp/${package}_incoming$$";
- acquiretree($workrepo, 1);
- my $lfh = acquiretree($realdestrepo, 1);
+ acquirermtree($workrepo, 1);
+ my $lfh = lockrealtree();
runcmd qw(git clone -l -q --mirror), $destrepo, $workrepo;
close $lfh;
rmtree "${workrepo}_fresh";
@@ -345,7 +354,7 @@ sub maybeinstallprospective () {
die Dumper(\%got)." -- missing refs in new repo"
if grep { !$_ } values %got;
- acquiretree($realdestrepo,1);
+ lockrealtree();
if ($destrepo eq "${workrepo}_fresh") {
movetogarbage;
@@ -574,7 +583,7 @@ sub checktagnoreplay () {
return unless $policy & (FRESHREPO|NOFFCHECK);
my $garbagerepo = "$dgitrepos/${package}_garbage";
- acquiretree($realdestrepo,1);
+ lockrealtree();
local $ENV{GIT_DIR};
foreach my $garb ("$garbagerepo", "$garbagerepo-old") {
@@ -654,7 +663,7 @@ sub checks () {
debug "translated version $v";
$tagname eq "debian/$v" or die;
- acquiretree($realdestrepo,1);
+ lockrealtree();
$policy = policyhook(NOFFCHECK|FRESHREPO, 'push',$package,
$version,$suite,$tagname,
@@ -705,7 +714,7 @@ sub stunthook () {
sub fixmissing__git_upload_pack () {
$destrepo = "$dgitrepos/_empty";
- my $lfh = acquiretree($destrepo,1);
+ my $lfh = locksometree($destrepo);
return if stat_exists $destrepo;
rmtree "$destrepo.new";
mkemptyrepo "$destrepo.new", "0644";
@@ -715,7 +724,7 @@ sub fixmissing__git_upload_pack () {
}
sub main__git_upload_pack () {
- my $lfh = acquiretree($destrepo,1);
+ my $lfh = locksometree($destrepo);
chdir $destrepo or die "$destrepo: $!";
close $lfh;
runcmd qw(git upload-pack), ".";
@@ -792,13 +801,12 @@ sub parseargsdispatch () {
reject "unknown method" unless $mainfunc;
- my $lfh = acquiretree($realdestrepo,1);
+ my $lfh = lockrealtree();
- my ($policy, $pollock) = policyhook(FRESHREPO,'check-package',$package);
+ $policy = policyhook(FRESHREPO,'check-package',$package);
if ($policy & FRESHREPO) {
movetogarbage;
}
- close $pollock or die $!;
close $lfh;
@@ -827,7 +835,7 @@ sub cleanup () {
foreach my $lf (<*.lock>) {
my $tree = $lf;
$tree =~ s/\.lock$//;
- next unless acquiretree($tree, 0);
+ next unless acquirermtree($tree, 0);
remove $lf or warn $!;
unlockall();
}