aboutsummaryrefslogtreecommitdiff
path: root/transport.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-02-11 13:43:50 -0800
committerJunio C Hamano <gitster@pobox.com>2015-02-11 13:43:51 -0800
commit39fa6112ec8492f9300765e1f71e7c8ecfafc713 (patch)
treeaaf52d72ae2010c4a99d0f0c3ccd1c3f40cdcb91 /transport.c
parent4d5c4e498a14af732f3b0b690f8b551d18610bfc (diff)
parent04b39f195baf95b79c9c28a096011e9fe0a08303 (diff)
downloadgit-39fa6112ec8492f9300765e1f71e7c8ecfafc713.tar.gz
git-39fa6112ec8492f9300765e1f71e7c8ecfafc713.tar.xz
Merge branch 'sb/atomic-push'
"git push" has been taught a "--atomic" option that makes push to update more than one ref an "all-or-none" affair. * sb/atomic-push: Document receive.advertiseatomic t5543-atomic-push.sh: add basic tests for atomic pushes push.c: add an --atomic argument send-pack.c: add --atomic command line argument send-pack: rename ref_update_to_be_sent to check_to_send_update receive-pack.c: negotiate atomic push support receive-pack.c: add execute_commands_atomic function receive-pack.c: move transaction handling in a central place receive-pack.c: move iterating over all commands outside execute_commands receive-pack.c: die instead of error in case of possible future bug receive-pack.c: shorten the execute_commands loop over all commands
Diffstat (limited to 'transport.c')
-rw-r--r--transport.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/transport.c b/transport.c
index 08bcd3a4e..0694a7cf3 100644
--- a/transport.c
+++ b/transport.c
@@ -728,6 +728,10 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count, i
ref->deletion ? NULL : ref->peer_ref,
"remote failed to report status", porcelain);
break;
+ case REF_STATUS_ATOMIC_PUSH_FAILED:
+ print_ref_status('!', "[rejected]", ref, ref->peer_ref,
+ "atomic push failed", porcelain);
+ break;
case REF_STATUS_OK:
print_ok_ref_status(ref, porcelain);
break;
@@ -826,6 +830,7 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN);
args.porcelain = !!(flags & TRANSPORT_PUSH_PORCELAIN);
args.push_cert = !!(flags & TRANSPORT_PUSH_CERT);
+ args.atomic = !!(flags & TRANSPORT_PUSH_ATOMIC);
args.url = transport->url;
ret = send_pack(&args, data->fd, data->conn, remote_refs,