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

[PATCH 2/3] abbrev: prepare for new world order

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 1, 2016, 00:19 UTC
Message-ID
<20161001001937.10884-3-gitster@pobox.com>
In-Reply-To
<20161001001937.10884-1-gitster@pobox.com>

The code that sets custom abbreviation length, in response to command line argument, often does something like this:

	if (skip_prefix(arg, "--abbrev=", &arg))
		abbrev = atoi(arg);
	else if (!strcmp("--abbrev", &arg))
		abbrev = DEFAULT_ABBREV;
	/* make the value sane */
	if (abbrev < 0 || 40 < abbrev)
		abbrev = ... some sane value ...

However, it is pointless to sanity-check and tweak the value obtained from DEFAULT_ABBREV. We are going to allow it to be initially set to -1 to signal that the default abbreviation length must be auto sized upon the first request to abbreviate, based on the number of objects in the repository, and when that happens, rejecting or tweaking a negative value to a "saner" one will negatively interfere with the auto sizing. The codepaths for

    git rev-parse --short <object>
    git diff --raw --abbrev

do exactly that; allow them to pass possibly negative abbrevs intact, that will come from DEFAULT_ABBREV in the future.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin/rev-parse.c | 5 +++--
 diff.c              | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 76cf05e2ad..17cbfabdde 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -643,8 +643,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 				filter &= ~(DO_FLAGS|DO_NOREV);
 				verify = 1;
 				abbrev = DEFAULT_ABBREV;
-				if (arg[7] == '=')
-					abbrev = strtoul(arg + 8, NULL, 10);
+				if (!arg[7])
+					continue;
+				abbrev = strtoul(arg + 8, NULL, 10);
 				if (abbrev < MINIMUM_ABBREV)
 					abbrev = MINIMUM_ABBREV;
 				else if (40 <= abbrev)
diff --git a/diff.c b/diff.c
index c6da383c56..cefc13eb8e 100644
--- a/diff.c
+++ b/diff.c
@@ -3399,7 +3399,7 @@ void diff_setup_done(struct diff_options *options)
 			 */
 			read_cache();
 	}
-	if (options->abbrev <= 0 || 40 < options->abbrev)
+	if (40 < options->abbrev)
 		options->abbrev = 40; /* full */
 
 	/*
-- 
2.10.0-622-g05f606bbb0
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 13 in “auto-sizing default abbreviation length”
  1. 0/3 auto-sizing default abbreviation lengthJunio C Hamano, Oct 1, 2016
  2. 1/3 abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizingJunio C Hamano, Oct 1, 2016
  3. 2/3 abbrev: prepare for new world orderJunio C Hamano, Oct 1, 2016
  4. 3/3 abbrev: auto size the default abbreviationJunio C Hamano, Oct 1, 2016
  5. Jeff KingOct 3, 2016
  6. Linus TorvaldsOct 3, 2016
  7. Jeff KingOct 3, 2016
  8. Junio C HamanoOct 3, 2016
  9. Jeff KingOct 3, 2016
  10. Junio C HamanoOct 4, 2016
  11. Jeff KingOct 4, 2016
  12. Junio C HamanoNov 2, 2016
  13. Jeff KingNov 2, 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.