diff options
author | Junio C Hamano <junkio@cox.net> | 2006-02-10 12:51:12 +0300 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-02-10 12:51:12 +0300 |
commit | 297a1aadbe22c978dca60d6512e5c851ebc6688c (patch) | |
tree | 496caac78acc8110d035162cc74b782f980ffd4d | |
parent | 0a798076b8d1a4a31bf2b24c564e2a99fd1c43a1 (diff) |
find_unique_abbrev() simplification.
Earlier it did not grok the 0{40} SHA1 very well, but what it
needed to do was to find the shortest 0{N} that is not used as a
valid object name to be consistent with the way names of valid
objects are abbreviated. This makes some users simpler.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | combine-diff.c | 15 | ||||
-rw-r--r-- | diff.c | 14 | ||||
-rw-r--r-- | sha1_name.c | 6 |
3 files changed, 10 insertions, 25 deletions
diff --git a/combine-diff.c b/combine-diff.c index 9aa099b061..8ba6949203 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -716,10 +716,7 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, if (show_hunks || mode_differs) { const char *abb; - char null_abb[DEFAULT_ABBREV + 1]; - memset(null_abb, '0', DEFAULT_ABBREV); - null_abb[DEFAULT_ABBREV] = 0; if (header) { shown_header++; puts(header); @@ -734,17 +731,11 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, for (i = 0; i < num_parent; i++) { if (elem->parent[i].mode != elem->mode) mode_differs = 1; - if (memcmp(elem->parent[i].sha1, null_sha1, 20)) - abb = find_unique_abbrev(elem->parent[i].sha1, - DEFAULT_ABBREV); - else - abb = null_abb; + abb = find_unique_abbrev(elem->parent[i].sha1, + DEFAULT_ABBREV); printf("%s%s", i ? "," : "", abb); } - if (memcmp(elem->sha1, null_sha1, 20)) - abb = find_unique_abbrev(elem->sha1, DEFAULT_ABBREV); - else - abb = null_abb; + abb = find_unique_abbrev(elem->sha1, DEFAULT_ABBREV); printf("..%s\n", abb); if (mode_differs) { @@ -963,7 +963,7 @@ void diff_free_filepair(struct diff_filepair *p) } /* This is different from find_unique_abbrev() in that - * it needs to deal with 0{40} SHA1. + * it stuffs the result with dots for alignment. */ const char *diff_unique_abbrev(const unsigned char *sha1, int len) { @@ -973,16 +973,8 @@ const char *diff_unique_abbrev(const unsigned char *sha1, int len) return sha1_to_hex(sha1); abbrev = find_unique_abbrev(sha1, len); - if (!abbrev) { - if (!memcmp(sha1, null_sha1, 20)) { - char *buf = sha1_to_hex(null_sha1); - if (len < 37) - strcpy(buf + len, "..."); - return buf; - } - else - return sha1_to_hex(sha1); - } + if (!abbrev) + return sha1_to_hex(sha1); abblen = strlen(abbrev); if (abblen < 37) { static char hex[41]; diff --git a/sha1_name.c b/sha1_name.c index fa85d8a88d..d67de18ba5 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -186,16 +186,18 @@ static int get_short_sha1(const char *name, int len, unsigned char *sha1, const char *find_unique_abbrev(const unsigned char *sha1, int len) { - int status; + int status, is_null; static char hex[41]; + is_null = !memcmp(sha1, null_sha1, 20); memcpy(hex, sha1_to_hex(sha1), 40); if (len == 40) return hex; while (len < 40) { unsigned char sha1_ret[20]; status = get_short_sha1(hex, len, sha1_ret, 1); - if (!status) { + if (!status || + (is_null && status != SHORT_NAME_AMBIGUOUS)) { hex[len] = 0; return hex; } |