]> git.ipfire.org Git - thirdparty/git.git/blobdiff - sha1_name.c
get_sha1: teach ":$n:<path>" the same relative path logic
[thirdparty/git.git] / sha1_name.c
index f918faf5c7e635b1a3ad9e9e423cefabfbac4ead..207405688bb919363c0fdde31083f2e57d26e050 100644 (file)
@@ -1091,17 +1091,19 @@ int get_sha1_with_context_1(const char *name, unsigned char *sha1,
                        return get_sha1_oneline(name + 2, sha1);
                if (namelen < 3 ||
                    name[2] != ':' ||
-                   name[1] < '0' || '3' < name[1]) {
+                   name[1] < '0' || '3' < name[1])
                        cp = name + 1;
-                       new_path = resolve_relative_path(cp);
-                       if (new_path)
-                               cp = new_path;
-               }
                else {
                        stage = name[1] - '0';
                        cp = name + 3;
                }
-               namelen = strlen(cp);
+               new_path = resolve_relative_path(cp);
+               if (!new_path) {
+                       namelen = namelen - (cp - name);
+               } else {
+                       cp = new_path;
+                       namelen = strlen(cp);
+               }
 
                strncpy(oc->path, cp,
                        sizeof(oc->path));