Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- This, OTOH, is a bit intrusive and changes the current behaviour a bit too far. git-show cannot use the absolute pathnames in blob locators at all now, which I consider bad. An obvious way to use rev:/path is blocked by Johannes' get_sha1_oneline. It would have worked, though. sha1_name.c | 21 +++++++-------------- 1 files changed, 7 insertions(+), 14 deletions(-) diff --git a/sha1_name.c b/sha1_name.c index 358aab7..369e7d0 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -661,7 +661,7 @@ int get_sha1_with_mode(const char *name, unsigned char *sha1, unsigned *mode) int get_sha1_with_prefix(const char *prefix, const char *name, unsigned char *sha1, unsigned *mode) { - char *prefixpath; + char *prefixpath = NULL; int ret, bracket_depth; int namelen = strlen(name); const char *cp; @@ -671,8 +671,6 @@ int get_sha1_with_prefix(const char *prefix, const char *name, unsigned char *sh if (!ret) return ret; - prefixpath = prefix ? xmalloc(strlen(prefix) + namelen + 1): NULL; - /* sha1:path --> object name of path in ent sha1 * :path -> object name of path in index * :[0-3]:path -> object name of path in index at stage @@ -694,10 +692,9 @@ int get_sha1_with_prefix(const char *prefix, const char *name, unsigned char *sh namelen = namelen - (cp - name); if (!active_cache) read_cache(); - if (prefix) { - namelen = sprintf(prefixpath, "%s%s", prefix, cp); - cp = prefixpath; - } + prefixpath = pathexpand(prefix, cp); + namelen = strlen(prefixpath); + cp = prefixpath; pos = cache_name_pos(cp, namelen); if (pos < 0) pos = -pos - 1; @@ -728,13 +725,9 @@ int get_sha1_with_prefix(const char *prefix, const char *name, unsigned char *sh if (*cp == ':') { unsigned char tree_sha1[20]; if (!get_sha1_1(name, cp-name, tree_sha1)) { - if (!prefix) - ret = get_tree_entry(tree_sha1, cp + 1, sha1, mode); - else { - sprintf(prefixpath, "%s%s", prefix, cp + 1); - ret = get_tree_entry(tree_sha1, prefixpath, sha1, mode); - free(prefixpath); - } + prefixpath = pathexpand(prefix, cp + 1); + ret = get_tree_entry(tree_sha1, prefixpath, sha1, mode); + free(prefixpath); } } return ret; -- 1.5.4.rc0.86.g30f5 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html