[PATCH] When copying or renaming, keep the mode, please
[git.git] / sha1_name.c
index df3ba2d..fdd3214 100644 (file)
@@ -148,7 +148,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
        };
        const char **p;
 
-       if (!get_sha1_hex(str, sha1))
+       if (len == 40 && !get_sha1_hex(str, sha1))
                return 0;
 
        for (p = prefix; *p; p++) {
@@ -202,16 +202,15 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1)
                parent = name[len-1] - '0';
                len -= 2;
        }
-       else if (len > 1 && name[len-1] == '^')
+       else if (len > 1 && name[len-1] == '^') {
                parent = 1;
-       else
+               len--;
+       } else
                parent = -1;
 
-       if (0 <= parent) {
-               ret = get_parent(name, len-1, sha1, parent);
-               if (!ret)
-                       return 0;
-       }
+       if (parent >= 0)
+               return get_parent(name, len, sha1, parent);
+
        ret = get_sha1_basic(name, len, sha1);
        if (!ret)
                return 0;