git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] Beautify the output of send-pack a bit
@ 2007-11-12 22:11 Alex Riesen
  2007-11-13  7:55 ` Jeff King
  0 siblings, 1 reply; 2+ messages in thread
From: Alex Riesen @ 2007-11-12 22:11 UTC (permalink / raw
  To: git; +Cc: Junio C Hamano

Cluster the errors regarding ancestry violation and output them
in one batch, together with a hint to pull before pushing.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---

Catching trend...

 send-pack.c |   33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/send-pack.c b/send-pack.c
index d56d980..e6da567 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -215,6 +215,7 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
 	int ask_for_status_report = 0;
 	int allow_deleting_refs = 0;
 	int expect_status_report = 0;
+	struct ref *failed_refs = NULL, **failed_tail = &failed_refs;
 
 	/* No funny business with the matcher */
 	remote_tail = get_remote_heads(in, &remote_refs, 0, NULL, REF_NORMAL);
@@ -243,25 +244,27 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
 	 * Finally, tell the other end!
 	 */
 	new_refs = 0;
-	for (ref = remote_refs; ref; ref = ref->next) {
+	ref = remote_refs;
+	remote_refs = NULL;
+	remote_tail = &remote_refs;
+	for (; ref; ref = ref->next) {
 		char old_hex[60], *new_hex;
 		int will_delete_ref;
 
 		if (!ref->peer_ref)
-			continue;
-
+			goto remote_ok;
 
 		will_delete_ref = is_null_sha1(ref->peer_ref->new_sha1);
 		if (will_delete_ref && !allow_deleting_refs) {
 			error("remote does not support deleting refs");
 			ret = -2;
-			continue;
+			goto remote_ok;
 		}
 		if (!will_delete_ref &&
 		    !hashcmp(ref->old_sha1, ref->peer_ref->new_sha1)) {
 			if (verbose)
 				fprintf(stderr, "'%s': up-to-date\n", ref->name);
-			continue;
+			goto remote_ok;
 		}
 
 		/* This part determines what can overwrite what.
@@ -297,13 +300,9 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
 				 * commits at the remote end and likely
 				 * we were not up to date to begin with.
 				 */
-				error("remote '%s' is not an ancestor of\n"
-				      " local  '%s'.\n"
-				      " Maybe you are not up-to-date and "
-				      "need to pull first?",
-				      ref->name,
-				      ref->peer_ref->name);
 				ret = -2;
+				*failed_tail = ref;
+				failed_tail = &ref->next;
 				continue;
 			}
 		}
@@ -335,6 +334,18 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
 			fprintf(stderr, "\n  from %s\n  to   %s\n",
 				old_hex, new_hex);
 		}
+	remote_ok:
+		*remote_tail = ref;
+		remote_tail = &ref->next;
+	}
+	*remote_tail = NULL;
+	*failed_tail = NULL;
+
+	if (failed_refs) {
+		for (ref = failed_refs; ref; ref = ref->next)
+			error("remote '%s' is not an ancestor of local '%s'",
+			      ref->name, ref->peer_ref->name);
+		fprintf(stderr, "Maybe you are not up-to-date and need to pull first?\n");
 	}
 
 	packet_flush(out);
-- 
1.5.3.5.648.g1e92c

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] Beautify the output of send-pack a bit
  2007-11-12 22:11 [PATCH] Beautify the output of send-pack a bit Alex Riesen
@ 2007-11-13  7:55 ` Jeff King
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff King @ 2007-11-13  7:55 UTC (permalink / raw
  To: Alex Riesen; +Cc: git, Junio C Hamano

On Mon, Nov 12, 2007 at 11:11:40PM +0100, Alex Riesen wrote:

> Cluster the errors regarding ancestry violation and output them
> in one batch, together with a hint to pull before pushing.

I think this is a good direction, but I think it might be simpler if
just record error information for each ref as we go, and then dump all
of them at the end. That will let us add remote-generated error
information easily.

-Peff

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-11-13  7:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-12 22:11 [PATCH] Beautify the output of send-pack a bit Alex Riesen
2007-11-13  7:55 ` Jeff King

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).