]> git.ipfire.org Git - thirdparty/git.git/blobdiff - send-pack.c
fetch-pack: support more than one pack lockfile
[thirdparty/git.git] / send-pack.c
index e0ccfef75af93a5f400659d4f18cf83078442f37..0abee22283dae8ceba42eb4b9b5ecb4842c98984 100644 (file)
@@ -12,7 +12,7 @@
 #include "quote.h"
 #include "transport.h"
 #include "version.h"
-#include "sha1-array.h"
+#include "oid-array.h"
 #include "gpg-interface.h"
 #include "cache.h"
 #include "shallow.h"
@@ -191,10 +191,8 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
 
                if (reader->line[0] == 'o' && reader->line[1] == 'k')
                        hint->status = REF_STATUS_OK;
-               else {
+               else
                        hint->status = REF_STATUS_REMOTE_REJECT;
-                       ret = -1;
-               }
                hint->remote_status = xstrdup_or_null(msg);
                /* start our next search from the next ref */
                hint = hint->next;
@@ -323,29 +321,6 @@ free_return:
        return update_seen;
 }
 
-
-static int atomic_push_failure(struct send_pack_args *args,
-                              struct ref *remote_refs,
-                              struct ref *failing_ref)
-{
-       struct ref *ref;
-       /* Mark other refs as failed */
-       for (ref = remote_refs; ref; ref = ref->next) {
-               if (!ref->peer_ref && !args->send_mirror)
-                       continue;
-
-               switch (ref->status) {
-               case REF_STATUS_EXPECTING_REPORT:
-                       ref->status = REF_STATUS_ATOMIC_PUSH_FAILED;
-                       continue;
-               default:
-                       break; /* do nothing */
-               }
-       }
-       return error("atomic push failed for ref %s. status: %d\n",
-                    failing_ref->name, failing_ref->status);
-}
-
 #define NONCE_LEN_LIMIT 256
 
 static void reject_invalid_nonce(const char *nonce, int len)
@@ -490,7 +465,10 @@ int send_pack(struct send_pack_args *args,
                        if (use_atomic) {
                                strbuf_release(&req_buf);
                                strbuf_release(&cap_buf);
-                               return atomic_push_failure(args, remote_refs, ref);
+                               reject_atomic_push(remote_refs, args->send_mirror);
+                               error("atomic push failed for ref %s. status: %d\n",
+                                     ref->name, ref->status);
+                               return args->porcelain ? 0 : -1;
                        }
                        /* else fallthrough */
                default: