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 (parent:
f4f514f
)
dgit-repos-server: Further fixes to locking; rename acquiretree to acquirermtree
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sat, 21 Mar 2015 17:43:40 +0000
(17:43 +0000)
committer
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sun, 22 Mar 2015 15:20:30 +0000
(15:20 +0000)
infra/dgit-repos-server
patch
|
blob
|
history
diff --git
a/infra/dgit-repos-server
b/infra/dgit-repos-server
index b0064e792b131020ae9db7ec02420d198a3beb7e..8a75d0557d49e58700f515aa59e18f6b3dd341de 100755
(executable)
--- a/
infra/dgit-repos-server
+++ b/
infra/dgit-repos-server
@@
-157,7
+157,7
@@
sub acquirelock ($$) {
return $fh;
}
return $fh;
}
-sub acquiretree ($$) {
+sub acquire
rm
tree ($$) {
my ($tree, $must) = @_;
my $fh = acquirelock("$tree.lock", $must);
if ($fh) {
my ($tree, $must) = @_;
my $fh = acquirelock("$tree.lock", $must);
if ($fh) {
@@
-167,6
+167,15
@@
sub acquiretree ($$) {
return $fh;
}
return $fh;
}
+sub locksometree ($) {
+ my ($tree) = @_;
+ acquirelock("$tree.lock", 1);
+}
+
+sub lockrealtree () {
+ locksometree($realdestrepo);
+}
+
sub mkrepotmp () {
my $tmpdir = "$dgitrepos/_tmp";
return if mkdir $tmpdir;
sub mkrepotmp () {
my $tmpdir = "$dgitrepos/_tmp";
return if mkdir $tmpdir;
@@
-211,7
+220,7
@@
sub runcmd {
sub policyhook {
my ($policyallowbits, @polargs) = @_;
sub policyhook {
my ($policyallowbits, @polargs) = @_;
- # => ($exitstatuspolicybitmap
, $policylockfh
);
+ # => ($exitstatuspolicybitmap);
die if $policyallowbits & ~0x3e;
my @cmd = ($policyhook,$distro,$repos,@polargs);
debugcmd @_;
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";
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 $!";
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";
sub fixmissing__git_receive_pack () {
mkrepotmp();
$destrepo = "$dgitrepos/_tmp/${package}_prospective";
- acquiretree($destrepo, 1);
+ acquire
rm
tree($destrepo, 1);
mkrepo_fromtemplate($destrepo);
}
sub makeworkingclone () {
mkrepotmp();
$workrepo = "$dgitrepos/_tmp/${package}_incoming$$";
mkrepo_fromtemplate($destrepo);
}
sub makeworkingclone () {
mkrepotmp();
$workrepo = "$dgitrepos/_tmp/${package}_incoming$$";
- acquiretree($workrepo, 1);
- my $lfh =
acquiretree($realdestrepo, 1
);
+ acquire
rm
tree($workrepo, 1);
+ my $lfh =
lockrealtree(
);
runcmd qw(git clone -l -q --mirror), $destrepo, $workrepo;
close $lfh;
rmtree "${workrepo}_fresh";
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;
die Dumper(\%got)." -- missing refs in new repo"
if grep { !$_ } values %got;
-
acquiretree($realdestrepo,1
);
+
lockrealtree(
);
if ($destrepo eq "${workrepo}_fresh") {
movetogarbage;
if ($destrepo eq "${workrepo}_fresh") {
movetogarbage;
@@
-574,7
+583,7
@@
sub checktagnoreplay () {
return unless $policy & (FRESHREPO|NOFFCHECK);
my $garbagerepo = "$dgitrepos/${package}_garbage";
return unless $policy & (FRESHREPO|NOFFCHECK);
my $garbagerepo = "$dgitrepos/${package}_garbage";
-
acquiretree($realdestrepo,1
);
+
lockrealtree(
);
local $ENV{GIT_DIR};
foreach my $garb ("$garbagerepo", "$garbagerepo-old") {
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;
debug "translated version $v";
$tagname eq "debian/$v" or die;
-
acquiretree($realdestrepo,1
);
+
lockrealtree(
);
$policy = policyhook(NOFFCHECK|FRESHREPO, 'push',$package,
$version,$suite,$tagname,
$policy = policyhook(NOFFCHECK|FRESHREPO, 'push',$package,
$version,$suite,$tagname,
@@
-705,7
+714,7
@@
sub stunthook () {
sub fixmissing__git_upload_pack () {
$destrepo = "$dgitrepos/_empty";
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";
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 () {
}
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), ".";
chdir $destrepo or die "$destrepo: $!";
close $lfh;
runcmd qw(git upload-pack), ".";
@@
-792,13
+801,12
@@
sub parseargsdispatch () {
reject "unknown method" unless $mainfunc;
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;
}
if ($policy & FRESHREPO) {
movetogarbage;
}
- close $pollock or die $!;
close $lfh;
close $lfh;
@@
-827,7
+835,7
@@
sub cleanup () {
foreach my $lf (<*.lock>) {
my $tree = $lf;
$tree =~ s/\.lock$//;
foreach my $lf (<*.lock>) {
my $tree = $lf;
$tree =~ s/\.lock$//;
- next unless acquiretree($tree, 0);
+ next unless acquire
rm
tree($tree, 0);
remove $lf or warn $!;
unlockall();
}
remove $lf or warn $!;
unlockall();
}