From 34eb5dad67ac7e3353016d3a109b8e78fb780655 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 21 Mar 2015 17:43:40 +0000 Subject: dgit-repos-server: Further fixes to locking; rename acquiretree to acquirermtree --- infra/dgit-repos-server | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'infra/dgit-repos-server') 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(); } -- cgit v1.2.3