X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=infra%2Fdgit-repos-server;h=74cbff32fa12c2f116fe0c6d61410d4c151dfa3b;hp=9a66bdbd4b8a5cf5d095bada9792bf9e69d65466;hb=a095d9f6fdf2aa56fae21997baa4e965071f0f77;hpb=6232da09fea7fd6b35a6cda84525a6d5c03223b9 diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server index 9a66bdbd..74cbff32 100755 --- a/infra/dgit-repos-server +++ b/infra/dgit-repos-server @@ -205,16 +205,41 @@ sub mkemptyrepo ($$) { runcmd qw(git init --bare --quiet), "--shared=$sharedperm", $dir; } +sub mkrepo_fromtemplate ($) { + my ($dir) = @_; + my $template = "$dgitrepos/_template"; + debug "copy tempalate $template -> $dir"; + my $r = system qw(cp -a --), $template, $dir; + !$r or die "create new repo $dir failed: $r $!"; +} + +sub movetogarbage () { + my $garbagerepo = "$dgitrepos/_tmp/${package}_garbage"; + acquiretree($garbagerepo,1); + rmtree $garbagerepo; + rename $realdestrepo, $garbagerepo + or $! == ENOENT + or die "rename repo $realdestrepo to $garbagerepo: $!"; +} + +sub onwardpush () { + my @cmd = (qw(git send-pack), $destrepo); + push @cmd, qw(--force) if $policy & NOFFCHECK; + push @cmd, "$commit:refs/dgit/$suite", + "$tagval:refs/tags/$tagname"); + debugcmd @cmd; + $!=0; + my $r = system @cmd; + !$r or die "onward push to $destrepo failed: $r $!"; +} + #----- git-receive-pack ----- sub fixmissing__git_receive_pack () { mkrepotmp(); $destrepo = "$dgitrepos/_tmp/${package}_prospective"; acquiretree($destrepo, 1); - my $template = "$dgitrepos/_template"; - debug "fixmissing copy tempalate $template -> $destrepo"; - my $r = system qw(cp -a --), $template, $destrepo; - !$r or die "create new repo failed failed: $r $!"; + mkrepo_fromtemplate($destrepo); } sub makeworkingclone () { @@ -524,16 +549,6 @@ sub checks () { } } -sub onwardpush () { - my @cmd = (qw(git send-pack), $destrepo, - "$commit:refs/dgit/$suite", - "$tagval:refs/tags/$tagname"); - debugcmd @cmd; - $!=0; - my $r = system @cmd; - !$r or die "onward push failed: $r $!"; -} - sub stunthook () { debug "stunthook"; chdir $workrepo or die "chdir $workrepo: $!"; @@ -637,12 +652,7 @@ sub parseargsdispatch () { my ($policy, $pollock) = policyhook(FRESHREPO,'check-package',$package); if ($policy & FRESHREPO) { - my $garbagerepo = "$dgitrepos/_tmp/${package}_garbage"; - acquiretree($garbagerepo,1); - rmtree $garbagerepo; - rename $realdestrepo, $garbagerepo - or $! == ENOENT - or die "rename repo $destrepo to $garbagerepo: $!"; + movetogarbage; } close $pollock or die $!;