diff options
author | Ann T Ropea <bedhanger@gmx.de> | 2017-11-13 23:36:51 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-11-14 15:44:40 +0900 |
commit | ed4cea423a9916d9af7cbf57392f424e2145b081 (patch) | |
tree | 1f3f40e2e2c33e7e6a9f25d306eb564df7329f6a | |
parent | 8c232ec4a8f5dd7e896d9a7b55f61489b8a17f99 (diff) | |
download | git-ed4cea423a9916d9af7cbf57392f424e2145b081.tar.gz |
diff: diff_aligned_abbrev: remove ellipsis after abbreviated SHA-1 value
Neither Git nor the user are in need of this (visual) aid anymore, but
we must offer a transition period.
Also, fix a typo: "abbbreviated" ---> "abbreviated".
Signed-off-by: Ann T Ropea <bedhanger@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | diff.c | 69 |
1 files changed, 39 insertions, 30 deletions
@@ -4902,41 +4902,50 @@ const char *diff_aligned_abbrev(const struct object_id *oid, int len) int abblen; const char *abbrev; + /* Do we want all 40 hex characters? + */ if (len == GIT_SHA1_HEXSZ) return oid_to_hex(oid); - abbrev = diff_abbrev_oid(oid, len); - abblen = strlen(abbrev); - - /* - * In well-behaved cases, where the abbbreviated result is the - * same as the requested length, append three dots after the - * abbreviation (hence the whole logic is limited to the case - * where abblen < 37); when the actual abbreviated result is a - * bit longer than the requested length, we reduce the number - * of dots so that they match the well-behaved ones. However, - * if the actual abbreviation is longer than the requested - * length by more than three, we give up on aligning, and add - * three dots anyway, to indicate that the output is not the - * full object name. Yes, this may be suboptimal, but this - * appears only in "diff --raw --abbrev" output and it is not - * worth the effort to change it now. Note that this would - * likely to work fine when the automatic sizing of default - * abbreviation length is used--we would be fed -1 in "len" in - * that case, and will end up always appending three-dots, but - * the automatic sizing is supposed to give abblen that ensures - * uniqueness across all objects (statistically speaking). + /* An abbreviated value is fine, possibly followed by an + * ellipsis. */ - if (abblen < GIT_SHA1_HEXSZ - 3) { - static char hex[GIT_MAX_HEXSZ + 1]; - if (len < abblen && abblen <= len + 2) - xsnprintf(hex, sizeof(hex), "%s%.*s", abbrev, len+3-abblen, ".."); - else - xsnprintf(hex, sizeof(hex), "%s...", abbrev); - return hex; - } + if (print_sha1_ellipsis) { + abbrev = diff_abbrev_oid(oid, len); + abblen = strlen(abbrev); + + /* + * In well-behaved cases, where the abbreviated result is the + * same as the requested length, append three dots after the + * abbreviation (hence the whole logic is limited to the case + * where abblen < 37); when the actual abbreviated result is a + * bit longer than the requested length, we reduce the number + * of dots so that they match the well-behaved ones. However, + * if the actual abbreviation is longer than the requested + * length by more than three, we give up on aligning, and add + * three dots anyway, to indicate that the output is not the + * full object name. Yes, this may be suboptimal, but this + * appears only in "diff --raw --abbrev" output and it is not + * worth the effort to change it now. Note that this would + * likely to work fine when the automatic sizing of default + * abbreviation length is used--we would be fed -1 in "len" in + * that case, and will end up always appending three-dots, but + * the automatic sizing is supposed to give abblen that ensures + * uniqueness across all objects (statistically speaking). + */ + if (abblen < GIT_SHA1_HEXSZ - 3) { + static char hex[GIT_MAX_HEXSZ + 1]; + if (len < abblen && abblen <= len + 2) + xsnprintf(hex, sizeof(hex), "%s%.*s", abbrev, len+3-abblen, ".."); + else + xsnprintf(hex, sizeof(hex), "%s...", abbrev); + return hex; + } - return oid_to_hex(oid); + return oid_to_hex(oid); + } else { + return diff_abbrev_oid(oid, len); + } } static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt) |