git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/4] git-push: make git push --porcelain print "Done"

From
Larry D'Anna <larry@elder-gods.org>
Date
Feb 27, 2010, 03:59 UTC
Message-ID
<04fc63d0f8114f0cd721bcf3dff1f108e30b5308.1267243044.git.larry@elder-gods.org>
In-Reply-To
<cover.1267242789.git.larry@elder-gods.org>

The script calling git push --porcelain 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 which were not reported in the ref status lines.

Signed-off-by: Larry D'Anna <larry@elder-gods.org>
---
 builtin-send-pack.c |    4 ++++
 send-pack.h         |    1 +
 transport.c         |   15 ++++++++++-----
 3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/builtin-send-pack.c b/builtin-send-pack.c
index 2183a47..87795f5 100644
--- a/builtin-send-pack.c
+++ b/builtin-send-pack.c
@@ -510,6 +510,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:
diff --git a/send-pack.h b/send-pack.h
index 28141ac..60b4ba6 100644
--- a/send-pack.h
+++ b/send-pack.h
@@ -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,
diff --git a/transport.c b/transport.c
index 32885f7..5b880d7 100644
--- a/transport.c
+++ b/transport.c
@@ -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);
@@ -1055,8 +1056,6 @@ int transport_push(struct transport *transport,
 		ret = transport->push_refs(transport, remote_refs, flags);
 		err = push_had_errors(remote_refs);
 
-		ret |= err;
-
 		if (!quiet || err)
 			print_push_status(transport->url, remote_refs,
 					verbose | porcelain, porcelain,
@@ -1071,9 +1070,15 @@ int transport_push(struct transport *transport,
 				update_tracking_ref(transport->remote, ref, verbose);
 		}
 
-		if (!quiet && !ret && !refs_pushed(remote_refs))
-			fprintf(stderr, "Everything up-to-date\n");
-		return ret;
+
+		if (porcelain) {
+			if (ret==0)
+				fprintf (stdout, "Done\n");
+		} else
+			if (!quiet && !ret && !refs_pushed(remote_refs))
+				fprintf(stderr, "Everything up-to-date\n");
+
+		return ret | err;
 	}
 	return 1;
 }
-- 
1.7.0.rc2.40.g7d8aa
Previous: Larry D'AnnaNext: Tay Ray Chuan
Message 4 of 6 in “ld/push-porcelain”
  1. 0/4 ld/push-porcelainLarry D'Anna, Feb 27, 2010
  2. 1/4 git-push: fix an advice message so it goes to stderrLarry D'Anna, Feb 27, 2010
  3. 2/4 git-push: send "To <remoteurl>" messages to the standard output in --porcelain modeLarry D'Anna, Feb 27, 2010
  4. 3/4 git-push: make git push --porcelain print "Done"Larry D'Anna, Feb 27, 2010
  5. Tay Ray ChuanFeb 27, 2010
  6. 4/4 git-push: add tests for git push --porcelainLarry D'Anna, Feb 27, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.