summaryrefslogtreecommitdiff
path: root/infra
diff options
context:
space:
mode:
Diffstat (limited to 'infra')
-rwxr-xr-xinfra/dgit-repos-server12
1 files changed, 11 insertions, 1 deletions
diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server
index f5dd5aa..e2bec01 100755
--- a/infra/dgit-repos-server
+++ b/infra/dgit-repos-server
@@ -447,6 +447,8 @@ sub main__git_receive_pack () {
our ($tagname, $tagval, $suite, $oldcommit, $commit);
our ($version, %tagh);
+our ($tagexists_error);
+
sub readupdates () {
printdebug " updates ...\n";
while (<STDIN>) {
@@ -458,7 +460,7 @@ sub readupdates () {
reject "pushing multiple tags!" if defined $tagname;
$tagname = $'; #';
$tagval = $sha1;
- reject "tag $tagname already exists -".
+ $tagexists_error= "tag $tagname already exists -".
" not replacing previously-pushed version"
if $old =~ m/[^0]/;
} elsif ($refname =~ m{^refs/dgit/}) {
@@ -781,6 +783,14 @@ sub checks () {
join(",",@deliberatelies));
$policy = policyhook(NOFFCHECK|FRESHREPO, 'push', @policy_args);
+ if (defined $tagexists_error) {
+ if ($policy & FRESHREPO) {
+ printdebug "ignoring tagexists_error: $tagexists_error\n";
+ } else {
+ reject $tagexists_error;
+ }
+ }
+
checktagnoreplay();
checksuite();