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

[PATCH 1/4] checkout: do not fail if target is an empty directory

From
Max Kirillov <max@max630.net>
Date
Oct 12, 2014, 05:13 UTC
Message-ID
<1413090791-14428-2-git-send-email-max@max630.net>
In-Reply-To
<1413090791-14428-1-git-send-email-max@max630.net>

Non-recursive checkout creates empty directpries in place of submodules. If then I try to "checkout --to" submodules there, it refuses to do so, because directory already exists.

Fix by allowing checking out to empty directory. Add test and modify the existing one so that it uses non-empty directory.

Signed-off-by: Max Kirillov <max@max630.net>
---
 builtin/checkout.c     | 2 +-
 t/t2025-checkout-to.sh | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 01d0f2f..74eabe7 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -865,7 +865,7 @@ static int prepare_linked_checkout(const struct checkout_opts *opts,
 
 	if (!new->commit)
 		die(_("no branch specified"));
-	if (file_exists(path))
+	if (file_exists(path) && !is_empty_dir(path))
 		die(_("'%s' already exists"), path);
 
 	len = strlen(path);
diff --git a/t/t2025-checkout-to.sh b/t/t2025-checkout-to.sh
index eddd325..915b506 100755
--- a/t/t2025-checkout-to.sh
+++ b/t/t2025-checkout-to.sh
@@ -13,10 +13,15 @@ test_expect_success 'checkout --to not updating paths' '
 '
 
 test_expect_success 'checkout --to an existing worktree' '
-	mkdir existing &&
+	mkdir -p existing/subtree &&
 	test_must_fail git checkout --detach --to existing master
 '
 
+test_expect_success 'checkout --to an existing empty worktree' '
+	mkdir existing_empty &&
+	git checkout --detach --to existing_empty master
+'
+
 test_expect_success 'checkout --to refuses to checkout locked branch' '
 	test_must_fail git checkout --to zere master &&
 	! test -d zere &&
-- 
2.0.1.1697.g73c6810
Previous: Max KirillovNext: Max Kirillov
Message 2 of 24 in “Multiple worktrees vs. submodules fixes”
  1. 0/4 Multiple worktrees vs. submodules fixesMax Kirillov, Oct 12, 2014
  2. 1/4 checkout: do not fail if target is an empty directoryMax Kirillov, Oct 12, 2014
  3. 2/4 submodule refactor: use git_path_submodule() in add_submodule_odb()Max Kirillov, Oct 12, 2014
  4. 3/4 git-common-dir: make "modules/" per-working-directory directoryMax Kirillov, Oct 12, 2014
  5. 4/4 path: implement common_dir handling in git_path_submodule()Max Kirillov, Oct 12, 2014
  6. Duy NguyenOct 14, 2014
  7. Jens LehmannOct 14, 2014
  8. Junio C HamanoOct 14, 2014
  9. Max KirillovOct 14, 2014
  10. Jens LehmannOct 14, 2014
  11. Max KirillovOct 14, 2014
  12. Duy NguyenOct 15, 2014
  13. Jens LehmannOct 15, 2014
  14. Max KirillovOct 16, 2014
  15. Jens LehmannOct 19, 2014
  16. Max KirillovOct 20, 2014
  17. Duy NguyenNov 3, 2014
  18. Jens LehmannNov 3, 2014
  19. Max KirillovNov 3, 2014
  20. Max KirillovOct 14, 2014
  21. Duy NguyenOct 15, 2014
  22. Junio C HamanoOct 15, 2014
  23. Duy NguyenOct 17, 2014
  24. Jens LehmannOct 19, 2014

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.