-
Notifications
You must be signed in to change notification settings - Fork 141
checkout/reset/read-tree: fix --recurse-submodules in linked worktree #523
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
1a4eae1
f06d2c4
1072727
614bccd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#!/bin/sh | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Eric Sunshine wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Philippe Blain wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Eric Sunshine wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Philippe Blain wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Eric Sunshine wrote (reply to this):
|
||
|
||
test_description='Combination of submodules and multiple worktrees' | ||
|
||
. ./test-lib.sh | ||
|
||
base_path=$(pwd -P) | ||
|
||
test_expect_success 'setup: create origin repos' ' | ||
git init origin/sub && | ||
test_commit -C origin/sub file1 && | ||
git init origin/main && | ||
test_commit -C origin/main first && | ||
git -C origin/main submodule add ../sub && | ||
git -C origin/main commit -m "add sub" && | ||
test_commit -C origin/sub "file1 updated" file1 file1updated file1updated && | ||
git -C origin/main/sub pull && | ||
git -C origin/main add sub && | ||
git -C origin/main commit -m "sub updated" | ||
' | ||
|
||
test_expect_success 'setup: clone superproject to create main worktree' ' | ||
git clone --recursive "$base_path/origin/main" main | ||
' | ||
|
||
rev1_hash_main=$(git --git-dir=origin/main/.git show --pretty=format:%h -q "HEAD~1") | ||
rev1_hash_sub=$(git --git-dir=origin/sub/.git show --pretty=format:%h -q "HEAD~1") | ||
|
||
test_expect_success 'add superproject worktree' ' | ||
git -C main worktree add "$base_path/worktree" "$rev1_hash_main" | ||
' | ||
|
||
test_expect_failure 'submodule is checked out just after worktree add' ' | ||
git -C worktree diff --submodule master"^!" >out && | ||
grep "file1 updated" out | ||
' | ||
|
||
test_expect_success 'add superproject worktree and initialize submodules' ' | ||
git -C main worktree add "$base_path/worktree-submodule-update" "$rev1_hash_main" && | ||
git -C worktree-submodule-update submodule update | ||
' | ||
|
||
test_expect_success 'submodule is checked out just after submodule update in linked worktree' ' | ||
git -C worktree-submodule-update diff --submodule master"^!" >out && | ||
grep "file1 updated" out | ||
' | ||
|
||
test_expect_success 'add superproject worktree and manually add submodule worktree' ' | ||
git -C main worktree add "$base_path/linked_submodule" "$rev1_hash_main" && | ||
git -C main/sub worktree add "$base_path/linked_submodule/sub" "$rev1_hash_sub" | ||
' | ||
|
||
test_expect_success 'submodule is checked out after manually adding submodule worktree' ' | ||
git -C linked_submodule diff --submodule master"^!" >out && | ||
grep "file1 updated" out | ||
' | ||
|
||
test_expect_success 'checkout --recurse-submodules uses $GIT_DIR for submodules in a linked worktree' ' | ||
git -C main worktree add "$base_path/checkout-recurse" --detach && | ||
git -C checkout-recurse submodule update --init && | ||
echo "gitdir: ../../main/.git/worktrees/checkout-recurse/modules/sub" >expect-gitfile && | ||
cat checkout-recurse/sub/.git >actual-gitfile && | ||
test_cmp expect-gitfile actual-gitfile && | ||
git -C main/sub rev-parse HEAD >expect-head-main && | ||
git -C checkout-recurse checkout --recurse-submodules HEAD~1 && | ||
cat checkout-recurse/sub/.git >actual-gitfile && | ||
git -C main/sub rev-parse HEAD >actual-head-main && | ||
test_cmp expect-gitfile actual-gitfile && | ||
test_cmp expect-head-main actual-head-main | ||
' | ||
|
||
test_expect_success 'core.worktree is removed in $GIT_DIR/modules/<name>/config, not in $GIT_COMMON_DIR/modules/<name>/config' ' | ||
echo "../../../sub" >expect-main && | ||
git -C main/sub config --get core.worktree >actual-main && | ||
test_cmp expect-main actual-main && | ||
echo "../../../../../../checkout-recurse/sub" >expect-linked && | ||
git -C checkout-recurse/sub config --get core.worktree >actual-linked && | ||
test_cmp expect-linked actual-linked && | ||
git -C checkout-recurse checkout --recurse-submodules first && | ||
test_expect_code 1 git -C main/.git/worktrees/checkout-recurse/modules/sub config --get core.worktree >linked-config && | ||
test_must_be_empty linked-config && | ||
git -C main/sub config --get core.worktree >actual-main && | ||
test_cmp expect-main actual-main | ||
' | ||
|
||
test_expect_success 'unsetting core.worktree does not prevent running commands directly against the submodule repository' ' | ||
git -C main/.git/worktrees/checkout-recurse/modules/sub log | ||
' | ||
|
||
test_done |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Derrick Stolee wrote (reply to this):
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Philippe Blain wrote (reply to this):