From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: Redefine semantics of find_unique_abbrev()
Date: Fri, 29 Feb 2008 17:41:53 -0800 [thread overview]
Message-ID: <7vpruf9q5a.fsf@gitster.siamese.dyndns.org> (raw)
The function returned NULL when no object that matches the name
was found, but that made the callers more complicated, as nobody
used that NULL return as an indication that no object with such
a name exists. They (at least the careful ones) instead took
the full 40-hexdigit and used in such a case, and the careless
ones segfaulted.
With this "git rev-parse --short 5555555555555555555555555555555555555555"
would stop segfaulting.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
builtin-reset.c | 4 ----
builtin-send-pack.c | 4 +---
diff.c | 2 --
sha1_name.c | 8 +++-----
4 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/builtin-reset.c b/builtin-reset.c
index af0037e..be58a8b 100644
--- a/builtin-reset.c
+++ b/builtin-reset.c
@@ -66,10 +66,6 @@ static void print_new_head_line(struct commit *commit)
const char *hex, *dots = "...", *body;
hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
- if (!hex) {
- hex = sha1_to_hex(commit->object.sha1);
- dots = "";
- }
printf("HEAD is now at %s%s", hex, dots);
body = strstr(commit->buffer, "\n\n");
if (body) {
diff --git a/builtin-send-pack.c b/builtin-send-pack.c
index b0cfae8..930e0fb 100644
--- a/builtin-send-pack.c
+++ b/builtin-send-pack.c
@@ -264,9 +264,7 @@ static void print_ref_status(char flag, const char *summary, struct ref *to, str
static const char *status_abbrev(unsigned char sha1[20])
{
- const char *abbrev;
- abbrev = find_unique_abbrev(sha1, DEFAULT_ABBREV);
- return abbrev ? abbrev : sha1_to_hex(sha1);
+ return find_unique_abbrev(sha1, DEFAULT_ABBREV);
}
static void print_ok_ref_status(struct ref *ref)
diff --git a/diff.c b/diff.c
index ad16164..b80f656 100644
--- a/diff.c
+++ b/diff.c
@@ -2581,8 +2581,6 @@ const char *diff_unique_abbrev(const unsigned char *sha1, int len)
return sha1_to_hex(sha1);
abbrev = find_unique_abbrev(sha1, len);
- 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 9d088cc..05c2e7a 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -202,16 +202,14 @@ const char *find_unique_abbrev(const unsigned char *sha1, int len)
while (len < 40) {
unsigned char sha1_ret[20];
status = get_short_sha1(hex, len, sha1_ret, 1);
- if (!status ||
- (is_null && status != SHORT_NAME_AMBIGUOUS)) {
+ if ((!is_null && !status) ||
+ (is_null && status == SHORT_NAME_NOT_FOUND)) {
hex[len] = 0;
return hex;
}
- if (status != SHORT_NAME_AMBIGUOUS)
- return NULL;
len++;
}
- return NULL;
+ return hex;
}
static int ambiguous_path(const char *path, int len)
next reply other threads:[~2008-03-01 1:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-01 1:41 Junio C Hamano [this message]
2008-03-01 5:06 ` Redefine semantics of find_unique_abbrev() Jeff King
2008-03-02 7:35 ` Junio C Hamano
2008-03-02 7:42 ` Jeff King
2008-03-02 8:11 ` Junio C Hamano
2008-03-02 7:49 ` [PATCH] Clean up find_unique_abbrev() callers Junio C Hamano
2008-03-02 7:51 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vpruf9q5a.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).