sha1_name: avoid unnecessary sha1 lookup in find_unique_abbrev
authorMike Hommey <mh@glandium.org>
Wed, 26 Nov 2014 10:12:47 +0000 (19:12 +0900)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Nov 2014 18:51:05 +0000 (10:51 -0800)
An example where this happens is when doing an ls-tree on a tree that
contains a commit link. In that case, find_unique_abbrev is called
to get a non-abbreviated hex sha1, but still, a lookup is done as
to whether the sha1 is in the repository (which ends up looking for
a loose object in .git/objects), while the result of that lookup is
not used when returning a non-abbreviated hex sha1.

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_name.c
index 65ad066d9bb4efd9b61142b40d790bac9543de1d..e98d0304683aa82c467714e62f2ccd24ca788d9d 100644 (file)
@@ -373,10 +373,10 @@ const char *find_unique_abbrev(const unsigned char *sha1, int len)
        int status, exists;
        static char hex[41];
 
-       exists = has_sha1_file(sha1);
        memcpy(hex, sha1_to_hex(sha1), 40);
        if (len == 40 || !len)
                return hex;
+       exists = has_sha1_file(sha1);
        while (len < 40) {
                unsigned char sha1_ret[20];
                status = get_short_sha1(hex, len, sha1_ret, GET_SHA1_QUIETLY);