Skip to content

Commit c5cbb27

Browse files
sammckgitster
authored andcommitted
rev-parse: --show-superproject-working-tree should work during a merge
Invoking 'git rev-parse --show-superproject-working-tree' exits with "fatal: BUG: returned path string doesn't match cwd?" when the superproject has an unmerged entry for the current submodule, instead of displaying the superproject's working tree. The problem is due to the fact that when a merge of the submodule reference is in progress, "git ls-files --stage —full-name <submodule-relative-path>” returns three seperate entries for the submodule (one for each stage) rather than a single entry; e.g., $ git ls-files --stage --full-name submodule-child-test 160000 dbbd2766fa330fa741ea59bb38689fcc2d283ac5 1 submodule-child-test 160000 f174d1dbfe863a59692c3bdae730a36f2a788c51 2 submodule-child-test 160000 e6178f3a58b958543952e12824aa2106d560f21d 3 submodule-child-test The code in get_superproject_working_tree() expected exactly one entry to be returned; this patch makes it use the first entry if multiple entries are returned. Test t1500-rev-parse is extended to cover this case. Signed-off-by: Sam McKelvie <[email protected]> Reviewed-by: Stefan Beller <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent fc54c1a commit c5cbb27

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

submodule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2038,7 +2038,7 @@ const char *get_superproject_working_tree(void)
20382038
* We're only interested in the name after the tab.
20392039
*/
20402040
super_sub = strchr(sb.buf, '\t') + 1;
2041-
super_sub_len = sb.buf + sb.len - super_sub - 1;
2041+
super_sub_len = strlen(super_sub);
20422042

20432043
if (super_sub_len > cwd_len ||
20442044
strcmp(&cwd[cwd_len - super_sub_len], super_sub))

t/t1500-rev-parse.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,22 @@ test_expect_success 'showing the superproject correctly' '
141141
test_commit -C sub test_commit &&
142142
git -C super submodule add ../sub dir/sub &&
143143
echo $(pwd)/super >expect &&
144+
git -C super/dir/sub rev-parse --show-superproject-working-tree >out &&
145+
test_cmp expect out &&
146+
147+
test_commit -C super submodule_add &&
148+
git -C super checkout -b branch1 &&
149+
git -C super/dir/sub checkout -b branch1 &&
150+
test_commit -C super/dir/sub branch1_commit &&
151+
git -C super add dir/sub &&
152+
test_commit -C super branch1_commit &&
153+
git -C super checkout -b branch2 master &&
154+
git -C super/dir/sub checkout -b branch2 master &&
155+
test_commit -C super/dir/sub branch2_commit &&
156+
git -C super add dir/sub &&
157+
test_commit -C super branch2_commit &&
158+
test_must_fail git -C super merge branch1 &&
159+
144160
git -C super/dir/sub rev-parse --show-superproject-working-tree >out &&
145161
test_cmp expect out
146162
'

0 commit comments

Comments
 (0)