Merge branch 'js/git-path-in-subdir'
The "--git-path", "--git-common-dir", and "--shared-index-path" options of "git rev-parse" did not produce usable output. They are now updated to show the path to the correct file, relative to where the caller is. * js/git-path-in-subdir: rev-parse: fix several options when running in a subdirectory rev-parse tests: add tests executed from a subdirectory
This commit is contained in:
commit
39b8980bb9
@ -545,6 +545,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
||||
unsigned int flags = 0;
|
||||
const char *name = NULL;
|
||||
struct object_context unused;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
if (argc > 1 && !strcmp("--parseopt", argv[1]))
|
||||
return cmd_parseopt(argc - 1, argv + 1, prefix);
|
||||
@ -599,7 +600,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
||||
if (!strcmp(arg, "--git-path")) {
|
||||
if (!argv[i + 1])
|
||||
die("--git-path requires an argument");
|
||||
puts(git_path("%s", argv[i + 1]));
|
||||
strbuf_reset(&buf);
|
||||
puts(relative_path(git_path("%s", argv[i + 1]),
|
||||
prefix, &buf));
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
@ -831,8 +834,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--git-common-dir")) {
|
||||
const char *pfx = prefix ? prefix : "";
|
||||
puts(prefix_filename(pfx, strlen(pfx), get_git_common_dir()));
|
||||
strbuf_reset(&buf);
|
||||
puts(relative_path(get_git_common_dir(),
|
||||
prefix, &buf));
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--is-inside-git-dir")) {
|
||||
@ -855,7 +859,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
||||
die(_("Could not read the index"));
|
||||
if (the_index.split_index) {
|
||||
const unsigned char *sha1 = the_index.split_index->base_sha1;
|
||||
puts(git_path("sharedindex.%s", sha1_to_hex(sha1)));
|
||||
const char *path = git_path("sharedindex.%s", sha1_to_hex(sha1));
|
||||
strbuf_reset(&buf);
|
||||
puts(relative_path(path, prefix, &buf));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -907,6 +913,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
||||
continue;
|
||||
verify_filename(prefix, arg, 1);
|
||||
}
|
||||
strbuf_release(&buf);
|
||||
if (verify) {
|
||||
if (revs_count == 1) {
|
||||
show_rev(type, sha1, name);
|
||||
|
@ -88,4 +88,32 @@ test_rev_parse -C work -g ../repo.git -b t 'GIT_DIR=../repo.git, core.bare = tru
|
||||
|
||||
test_rev_parse -C work -g ../repo.git -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true ''
|
||||
|
||||
test_expect_success 'git-common-dir from worktree root' '
|
||||
echo .git >expect &&
|
||||
git rev-parse --git-common-dir >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'git-common-dir inside sub-dir' '
|
||||
mkdir -p path/to/child &&
|
||||
test_when_finished "rm -rf path" &&
|
||||
echo "$(git -C path/to/child rev-parse --show-cdup).git" >expect &&
|
||||
git -C path/to/child rev-parse --git-common-dir >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'git-path from worktree root' '
|
||||
echo .git/objects >expect &&
|
||||
git rev-parse --git-path objects >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'git-path inside sub-dir' '
|
||||
mkdir -p path/to/child &&
|
||||
test_when_finished "rm -rf path" &&
|
||||
echo "$(git -C path/to/child rev-parse --show-cdup).git/objects" >expect &&
|
||||
git -C path/to/child rev-parse --git-path objects >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
@ -200,4 +200,20 @@ EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'rev-parse --shared-index-path' '
|
||||
test_create_repo split-index &&
|
||||
(
|
||||
cd split-index &&
|
||||
git update-index --split-index &&
|
||||
echo .git/sharedindex* >expect &&
|
||||
git rev-parse --shared-index-path >actual &&
|
||||
test_cmp expect actual &&
|
||||
mkdir subdirectory &&
|
||||
cd subdirectory &&
|
||||
echo ../.git/sharedindex* >expect &&
|
||||
git rev-parse --shared-index-path >actual &&
|
||||
test_cmp expect actual
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
@ -14,10 +14,18 @@ test_expect_success 'rev-parse --git-common-dir on main worktree' '
|
||||
test_cmp expected actual &&
|
||||
mkdir sub &&
|
||||
git -C sub rev-parse --git-common-dir >actual2 &&
|
||||
echo sub/.git >expected2 &&
|
||||
echo ../.git >expected2 &&
|
||||
test_cmp expected2 actual2
|
||||
'
|
||||
|
||||
test_expect_success 'rev-parse --git-path objects linked worktree' '
|
||||
echo "$(git rev-parse --show-toplevel)/.git/objects" >expect &&
|
||||
test_when_finished "rm -rf linked-tree && git worktree prune" &&
|
||||
git worktree add --detach linked-tree master &&
|
||||
git -C linked-tree rev-parse --git-path objects >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '"list" all worktrees from main' '
|
||||
echo "$(git rev-parse --show-toplevel) $(git rev-parse --short HEAD) [$(git symbolic-ref --short HEAD)]" >expect &&
|
||||
test_when_finished "rm -rf here && git worktree prune" &&
|
||||
|
Loading…
Reference in New Issue
Block a user