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

Re: [PATCH 3/3] transport: allow summary-width to be computed dynamically

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 22, 2016, 04:39 UTC
Message-ID
<xmqqoa2d9eum.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20161021223927.26364-4-gitster@pobox.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 6 quoted lines
> Now we have identified three callchains that have a set of refs that
> they want to show their <old, new> object names in an aligned output,
> we can replace their reference to the constant TRANSPORT_SUMMARY_WIDTH
> with a helper function call to transport_summary_width() that takes
> the set of ref as a parameter.  This step does not yet iterate over
> the refs and compute, which is left as an exercise to the readers.
And this is the final one.
-- >8 --
From: Junio C Hamano <gitster@pobox.com>
Date: Fri, 21 Oct 2016 21:33:06 -0700
Subject: [PATCH] transport: compute summary-width dynamically

Now all that is left to do is to actually iterate over the refs and measure the display width needed to show their abbreviation.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 transport.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/transport.c b/transport.c
index d4b8bf5f25..f1f95cf7c7 100644
--- a/transport.c
+++ b/transport.c
@@ -429,9 +429,25 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count,
 	return 1;
 }
 
+static int measure_abbrev(const struct object_id *oid, int sofar)
+{
+	char hex[GIT_SHA1_HEXSZ + 1];
+	int w = find_unique_abbrev_r(hex, oid->hash, DEFAULT_ABBREV);
+
+	return (w < sofar) ? sofar : w;
+}
+
 int transport_summary_width(const struct ref *refs)
 {
-	return (2 * FALLBACK_DEFAULT_ABBREV + 3);
+	int maxw;
+
+	for (maxw = -1; refs; refs = refs->next) {
+		maxw = measure_abbrev(&refs->old_oid, maxw);
+		maxw = measure_abbrev(&refs->new_oid, maxw);
+	}
+	if (maxw < 0)
+		maxw = FALLBACK_DEFAULT_ABBREV;
+	return (2 * maxw + 3);
 }
 
 void transport_print_push_status(const char *dest, struct ref *refs,
-- 
2.10.1-723-g2384e83bc3
Previous: Jeff KingNext: Jeff King
Message 12 of 14 in “[BUG] fetch output is ugly in 'next'”
  1. Jeff KingOct 21, 2016
  2. Duy NguyenOct 21, 2016
  3. Duy NguyenOct 21, 2016
  4. Junio C HamanoOct 21, 2016
  5. Jeff KingOct 21, 2016
  6. Junio C HamanoOct 21, 2016
  7. 0/3 fetch output is ugly in 'next'Junio C Hamano, Oct 21, 2016
  8. 2/3 fetch: pass summary_width down the callchainJunio C Hamano, Oct 21, 2016
  9. 1/3 transport: pass summary_width down the callchainJunio C Hamano, Oct 21, 2016
  10. 3/3 transport: allow summary-width to be computed dynamicallyJunio C Hamano, Oct 21, 2016
  11. Jeff KingOct 22, 2016
  12. Junio C HamanoOct 22, 2016
  13. Jeff KingOct 22, 2016
  14. Junio C HamanoOct 22, 2016

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.