summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnn T Ropea <bedhanger@gmx.de>2017-11-13 23:36:51 +0100
committerJunio C Hamano <gitster@pobox.com>2017-11-14 15:44:40 +0900
commited4cea423a9916d9af7cbf57392f424e2145b081 (patch)
tree1f3f40e2e2c33e7e6a9f25d306eb564df7329f6a
parent8c232ec4a8f5dd7e896d9a7b55f61489b8a17f99 (diff)
downloadgit-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.c69
1 files changed, 39 insertions, 30 deletions
diff --git a/diff.c b/diff.c
index 0763e89263..9709dc37c6 100644
--- a/diff.c
+++ b/diff.c
@@ -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)