mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
blame: handle --no-abbrev
You can already ask blame for full sha1s with "-l" or with "--abbrev=40". But for consistency with other parts of Git, we should support "--no-abbrev". Worse, blame already accepts --no-abbrev, but it's totally broken. When we see --no-abbrev, the abbrev variable is set to 0, which is then used as a printf precision. For regular sha1s, that means we print nothing at all (which is very wrong). For boundary commits we decrement it to "-1", which printf interprets as "no limit" (which is almost correct, except it misses the 39-length magic explained in the previous commit). Let's detect --no-abbrev and behave as if --abbrev=40 was given. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
91229834c2
commit
ed58d8088b
|
@ -2609,6 +2609,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
|
||||||
if (0 < abbrev && abbrev < GIT_SHA1_HEXSZ)
|
if (0 < abbrev && abbrev < GIT_SHA1_HEXSZ)
|
||||||
/* one more abbrev length is needed for the boundary commit */
|
/* one more abbrev length is needed for the boundary commit */
|
||||||
abbrev++;
|
abbrev++;
|
||||||
|
else if (!abbrev)
|
||||||
|
abbrev = GIT_SHA1_HEXSZ;
|
||||||
|
|
||||||
if (revs_file && read_ancestry(revs_file))
|
if (revs_file && read_ancestry(revs_file))
|
||||||
die_errno("reading graft file '%s' failed", revs_file);
|
die_errno("reading graft file '%s' failed", revs_file);
|
||||||
|
|
|
@ -114,4 +114,8 @@ test_expect_success 'blame --abbrev=40 behaves like -l' '
|
||||||
check_abbrev 39 --abbrev=40 ^HEAD
|
check_abbrev 39 --abbrev=40 ^HEAD
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--no-abbrev works like --abbrev=40' '
|
||||||
|
check_abbrev 40 --no-abbrev
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue