git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/4] checkout/reset/read-tree: fix --recurse-submodules in linked worktree

From
Philippe Blain via GitGitGadget <gitgitgadget@gmail.com>
Date
Jan 17, 2020, 12:23 UTC
Message-ID
<pull.523.git.1579263809.gitgitgadget@gmail.com>

This series fixes the behaviour of git checkout/reset/read-tree --recurse-submodules when they are called in a linked worktree (created by git worktree add).

Although submodules are cloned in $GIT_COMMON_DIR/worktrees/<name>/modules upon issuing git submodule update in the linked worktree, any invocation of git checkout/reset/read-tree --recurse-submodules that changes the state of the submodule(s) will incorrectly operate on the repositories of the submodules in the main worktree, i.e. the ones at $GIT_COMMON_DIR/modules/.

The fourth patch fixes this behaviour by using get_git_dir() instead of git_common_dir() in submodule.c::submodule_move_head and submodule.c::submodule_unset_core_worktree to construct the path to the submodule repository.

The first 3 patches are clean-up patches on t7410-submodule-checkout-to.sh (renamed to t2405-worktree-submodule.sh) to bring it up to date.

Note: in the second test added in the fourth patch I used test_might_fail 
such that when the test is run on the current master, only the last test_cmp 
makes the test fail. If we want to be more strict I'll change that to :
diff --git a/t/t2405-worktree-submodule.sh b/t/t2405-worktree-submodule.sh
index eba17d9e35..31d156cce7 100755
--- a/t/t2405-worktree-submodule.sh
+++ b/t/t2405-worktree-submodule.sh
@@ -70,9 +70,9 @@ test_expect_success 'checkout --recurse-submodules uses $GIT_DIR for submodules
 test_expect_success 'core.worktree is removed in $GIT_DIR/modules/<name>/config, not in $GIT_COMMON_DIR/modules/<name>/config' '
     git -C main/sub config --get core.worktree > expect &&
     git -C checkout-recurse checkout --recurse-submodules first &&
-    test_might_fail git -C main/.git/worktrees/checkout-recurse/modules/sub config --get core.worktree > linked-config &&
+    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 &&
-    test_might_fail git -C main/sub config --get core.worktree > actual &&
+    git -C main/sub config --get core.worktree > actual &&
     test_cmp expect actual
 '

Cc:Max Kirillov max@max630.net [max@max630.net] Brandon Williams 
bwilliams.eng@gmail.com [bwilliams.eng@gmail.com] Jonathan Tan 
jonathantanmy@google.com [jonathantanmy@google.com] Stefan Beller 
stefanbeller@gmail.com [stefanbeller@gmail.com] Nguyễn Thái Ngọc Duy 
pclouds@gmail.com [pclouds@gmail.com]

Philippe Blain (4):
  t7410: rename to t2405-worktree-submodule.sh
  t2405: use git -C and test_commit -C instead of subshells
  t2405: clarify test descriptions and simplify test
  submodule.c: use get_git_dir() instead of get_git_common_dir()

 submodule.c                      |  6 +--
 t/t2405-worktree-submodule.sh    | 79 ++++++++++++++++++++++++++++++++
 t/t7410-submodule-checkout-to.sh | 77 -------------------------------
 3 files changed, 82 insertions(+), 80 deletions(-)
 create mode 100755 t/t2405-worktree-submodule.sh
 delete mode 100755 t/t7410-submodule-checkout-to.sh


base-commit: b4615e40a8125477e18490d868f7b65954372b43
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-523%2Fphil-blain%2Fcheckout-recurse-in-linked-worktree-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-523/phil-blain/checkout-recurse-in-linked-worktree-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/523
-- 
gitgitgadget
Next: Philippe Blain via GitGitGadget
Message 1 of 24 in “checkout/reset/read-tree: fix --recurse-submodules in linked worktree”
  1. 0/4 checkout/reset/read-tree: fix --recurse-submodules in linked worktreePhilippe Blain via GitGitGadget, Jan 17, 2020
  2. 1/4 t7410: rename to t2405-worktree-submodule.shPhilippe Blain via GitGitGadget, Jan 17, 2020
  3. 2/4 t2405: use git -C and test_commit -C instead of subshellsPhilippe Blain via GitGitGadget, Jan 17, 2020
  4. Eric SunshineJan 17, 2020
  5. Junio C HamanoJan 17, 2020
  6. Philippe BlainJan 18, 2020
  7. 3/4 t2405: clarify test descriptions and simplify testPhilippe Blain via GitGitGadget, Jan 17, 2020
  8. Eric SunshineJan 17, 2020
  9. Philippe BlainJan 19, 2020
  10. Eric SunshineJan 19, 2020
  11. 4/4 submodule.c: use get_git_dir() instead of get_git_common_dir()Philippe Blain via GitGitGadget, Jan 17, 2020
  12. Derrick StoleeJan 17, 2020
  13. Philippe BlainJan 18, 2020
  14. Derrick StoleeJan 17, 2020
  15. 0/4 checkout/reset/read-tree: fix --recurse-submodules in linked worktreePhilippe Blain via GitGitGadget, Jan 21, 2020
  16. 1/4 t7410: rename to t2405-worktree-submodule.shPhilippe Blain via GitGitGadget, Jan 21, 2020
  17. 2/4 t2405: use git -C and test_commit -C instead of subshellsPhilippe Blain via GitGitGadget, Jan 21, 2020
  18. 3/4 t2405: clarify test descriptions and simplify testPhilippe Blain via GitGitGadget, Jan 21, 2020
  19. 4/4 submodule.c: use get_git_dir() instead of get_git_common_dir()Philippe Blain via GitGitGadget, Jan 21, 2020
  20. Philippe BlainJan 22, 2020
  21. Junio C HamanoJan 22, 2020
  22. Philippe BlainJan 22, 2020
  23. Philippe BlainJan 24, 2020
  24. Junio C HamanoJan 24, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.