Skip to content

Commit

Permalink
git-push: make git push --porcelain print "Done"
Browse files Browse the repository at this point in the history
The script calling git push --porcelain --dry-run can see clearly from the
output if an update was rejected.  However, it will probably need to distinguish
this condition from the push failing for other reasons, such as the remote not
being reachable.

This patch modifies git push --porcelain to print "Done" after the rest of its
output unless any errors have occurred.  For the purpose of the "Done" line,
knowing a ref will be rejected in a --dry-run does not count as an error.
Actual rejections in non --dry-run pushes do count as errors.

Signed-off-by: Larry D'Anna <larry@elder-gods.org>
Acked-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
smoofra authored and gitster committed Feb 28, 2010
1 parent 60cfeb8 commit 7755585
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 5 deletions.
4 changes: 4 additions & 0 deletions builtin-send-pack.c
Expand Up @@ -476,6 +476,10 @@ int send_pack(struct send_pack_args *args,

if (ret < 0)
return ret;

if (args->porcelain)
return 0;

for (ref = remote_refs; ref; ref = ref->next) {
switch (ref->status) {
case REF_STATUS_NONE:
Expand Down
1 change: 1 addition & 0 deletions send-pack.h
Expand Up @@ -4,6 +4,7 @@
struct send_pack_args {
unsigned verbose:1,
quiet:1,
porcelain:1,
send_mirror:1,
force_update:1,
use_thin_pack:1,
Expand Down
13 changes: 8 additions & 5 deletions transport.c
Expand Up @@ -791,6 +791,7 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
args.verbose = !!(flags & TRANSPORT_PUSH_VERBOSE);
args.quiet = !!(flags & TRANSPORT_PUSH_QUIET);
args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN);
args.porcelain = !!(flags & TRANSPORT_PUSH_PORCELAIN);

ret = send_pack(&args, data->fd, data->conn, remote_refs,
&data->extra_have);
Expand Down Expand Up @@ -1035,7 +1036,7 @@ int transport_push(struct transport *transport,
int quiet = flags & TRANSPORT_PUSH_QUIET;
int porcelain = flags & TRANSPORT_PUSH_PORCELAIN;
int pretend = flags & TRANSPORT_PUSH_DRY_RUN;
int ret, err;
int push_ret, ret, err;

if (flags & TRANSPORT_PUSH_ALL)
match_flags |= MATCH_REFS_ALL;
Expand All @@ -1051,10 +1052,9 @@ int transport_push(struct transport *transport,
flags & TRANSPORT_PUSH_MIRROR,
flags & TRANSPORT_PUSH_FORCE);

ret = transport->push_refs(transport, remote_refs, flags);
push_ret = transport->push_refs(transport, remote_refs, flags);
err = push_had_errors(remote_refs);

ret |= err;
ret = push_ret | err;

if (!quiet || err)
print_push_status(transport->url, remote_refs,
Expand All @@ -1070,8 +1070,11 @@ int transport_push(struct transport *transport,
update_tracking_ref(transport->remote, ref, verbose);
}

if (!quiet && !ret && !refs_pushed(remote_refs))
if (porcelain && !push_ret)
puts("Done");
else if (!quiet && !ret && !refs_pushed(remote_refs))
fprintf(stderr, "Everything up-to-date\n");

return ret;
}
return 1;
Expand Down

0 comments on commit 7755585

Please sign in to comment.