mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'jx/atomic-push'
"git push --atomic" used to show failures for refs that weren't even pushed, which has been corrected. * jx/atomic-push: transport-helper: new method reject_atomic_push() transport-helper: mark failure for atomic push send-pack: mark failure of atomic push properly t5543: never report what we do not push send-pack: fix inconsistent porcelain output
This commit is contained in:
32
send-pack.c
32
send-pack.c
@@ -190,10 +190,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;
|
||||
@@ -322,29 +320,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)
|
||||
@@ -489,7 +464,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:
|
||||
|
||||
Reference in New Issue
Block a user