diff options
-rw-r--r-- | builtin/hash-object.c | 7 | ||||
-rwxr-xr-x | t/t1007-hash-object.sh | 10 |
2 files changed, 15 insertions, 2 deletions
diff --git a/builtin/hash-object.c b/builtin/hash-object.c index 9028e1fdc..56df77b0c 100644 --- a/builtin/hash-object.c +++ b/builtin/hash-object.c @@ -115,7 +115,7 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix) prefix_length = prefix ? strlen(prefix) : 0; if (vpath && prefix) - vpath = prefix_filename(prefix, prefix_length, vpath); + vpath = xstrdup(prefix_filename(prefix, prefix_length, vpath)); git_config(git_default_config, NULL); @@ -144,11 +144,14 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix) for (i = 0 ; i < argc; i++) { const char *arg = argv[i]; + char *to_free = NULL; if (0 <= prefix_length) - arg = prefix_filename(prefix, prefix_length, arg); + arg = to_free = + xstrdup(prefix_filename(prefix, prefix_length, arg)); hash_object(arg, type, no_filters ? NULL : vpath ? vpath : arg, flags, literally); + free(to_free); } if (stdin_paths) diff --git a/t/t1007-hash-object.sh b/t/t1007-hash-object.sh index c5245c5cb..532682f51 100755 --- a/t/t1007-hash-object.sh +++ b/t/t1007-hash-object.sh @@ -134,6 +134,16 @@ test_expect_success 'gitattributes also work in a subdirectory' ' ) ' +test_expect_success '--path works in a subdirectory' ' + ( + cd subdir && + path1_sha=$(git hash-object --path=../file1 ../file0) && + path0_sha=$(git hash-object --path=../file0 ../file1) && + test "$file0_sha" = "$path0_sha" && + test "$file1_sha" = "$path1_sha" + ) +' + test_expect_success 'check that --no-filters option works' ' nofilters_file1=$(git hash-object --no-filters file1) && test "$file0_sha" = "$nofilters_file1" && |