chiark / gitweb /
Infra: Allow FRESHREPO to override "tag already exists"
[dgit.git] / infra / dgit-repos-server
index f5dd5aa..e2bec01 100755 (executable)
@@ -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();