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

[PATCH v4 3/5] t7300: add tests to document behavior of clean and nested git

From
Erik Elfström <erik.elfstrom@gmail.com>
Date
Apr 25, 2015, 09:06 UTC
Message-ID
<1429952801-2646-4-git-send-email-erik.elfstrom@gmail.com>
In-Reply-To
<1429952801-2646-1-git-send-email-erik.elfstrom@gmail.com>
Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
---
 t/t7300-clean.sh | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 128 insertions(+)
diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh
index 99be5d9..11f3a6d 100755
--- a/t/t7300-clean.sh
+++ b/t/t7300-clean.sh
@@ -455,6 +455,134 @@ test_expect_success 'nested git work tree' '
 	! test -d bar
 '
 
+test_expect_failure 'should clean things that almost look like git but are not' '
+	rm -fr almost_git almost_bare_git almost_submodule &&
+	mkdir -p almost_git/.git/objects &&
+	mkdir -p almost_git/.git/refs &&
+	cat >almost_git/.git/HEAD <<-\EOF &&
+	garbage
+	EOF
+	cp -r almost_git/.git/ almost_bare_git &&
+	mkdir almost_submodule/ &&
+	cat >almost_submodule/.git <<-\EOF &&
+	garbage
+	EOF
+	test_when_finished "rm -rf almost_*" &&
+	## This will fail due to die("Invalid gitfile format: %s", path); in
+	## setup.c:read_gitfile.
+	git clean -f -d &&
+	test_path_is_missing almost_git &&
+	test_path_is_missing almost_bare_git &&
+	test_path_is_missing almost_submodule
+'
+
+test_expect_success 'should not clean submodules' '
+	rm -fr repo to_clean sub1 sub2 &&
+	mkdir repo to_clean &&
+	(
+		cd repo &&
+		git init &&
+		test_commit msg hello.world
+	) &&
+	git submodule add ./repo/.git sub1 &&
+	git commit -m "sub1" &&
+	git branch before_sub2 &&
+	git submodule add ./repo/.git sub2 &&
+	git commit -m "sub2" &&
+	git checkout before_sub2 &&
+	>to_clean/should_clean.this &&
+	git clean -f -d &&
+	test_path_is_file repo/.git/index &&
+	test_path_is_file repo/hello.world &&
+	test_path_is_file sub1/.git &&
+	test_path_is_file sub1/hello.world &&
+	test_path_is_file sub2/.git &&
+	test_path_is_file sub2/hello.world &&
+	test_path_is_missing to_clean
+'
+
+test_expect_failure 'nested (empty) git should be kept' '
+	rm -fr empty_repo to_clean &&
+	git init empty_repo &&
+	mkdir to_clean &&
+	>to_clean/should_clean.this &&
+	git clean -f -d &&
+	test_path_is_file empty_repo/.git/HEAD &&
+	test_path_is_missing to_clean
+'
+
+test_expect_success 'nested bare repositories should be cleaned' '
+	rm -fr bare1 bare2 subdir &&
+	git init --bare bare1 &&
+	git clone --local --bare . bare2 &&
+	mkdir subdir &&
+	cp -r bare2 subdir/bare3 &&
+	git clean -f -d &&
+	test_path_is_missing bare1 &&
+	test_path_is_missing bare2 &&
+	test_path_is_missing subdir
+'
+
+test_expect_success 'nested (empty) bare repositories should be cleaned even when in .git' '
+	rm -fr strange_bare &&
+	mkdir strange_bare &&
+	git init --bare strange_bare/.git &&
+	git clean -f -d &&
+	test_path_is_missing strange_bare
+'
+
+test_expect_failure 'nested (non-empty) bare repositories should be cleaned even when in .git' '
+	rm -fr strange_bare &&
+	mkdir strange_bare &&
+	git clone --local --bare . strange_bare/.git &&
+	git clean -f -d &&
+	test_path_is_missing strange_bare
+'
+
+test_expect_success 'giving path in nested git work tree will remove it' '
+	rm -fr repo &&
+	mkdir repo &&
+	(
+		cd repo &&
+		git init &&
+		mkdir -p bar/baz &&
+		test_commit msg bar/baz/hello.world
+	) &&
+	git clean -f -d repo/bar/baz &&
+	test_path_is_file repo/.git/HEAD &&
+	test_path_is_dir repo/bar/ &&
+	test_path_is_missing repo/bar/baz
+'
+
+test_expect_success 'giving path to nested .git will not remove it' '
+	rm -fr repo &&
+	mkdir repo untracked &&
+	(
+		cd repo &&
+		git init &&
+		test_commit msg hello.world
+	) &&
+	git clean -f -d repo/.git &&
+	test_path_is_file repo/.git/HEAD &&
+	test_path_is_dir repo/.git/refs &&
+	test_path_is_dir repo/.git/objects &&
+	test_path_is_dir untracked/
+'
+
+test_expect_success 'giving path to nested .git/ will remove contents' '
+	rm -fr repo untracked &&
+	mkdir repo untracked &&
+	(
+		cd repo &&
+		git init &&
+		test_commit msg hello.world
+	) &&
+	git clean -f -d repo/.git/ &&
+	test_path_is_dir repo/.git &&
+	test_dir_is_empty repo/.git &&
+	test_path_is_dir untracked/
+'
+
 test_expect_success 'force removal of nested git work tree' '
 	rm -fr foo bar baz &&
 	mkdir -p foo bar baz/boo &&
-- 
2.4.0.rc3.8.g4ebd28d
Previous: erik elfströmNext: Erik Elfström
Message 36 of 38 in “Improving performance of git clean”
  1. 0/5 Improving performance of git cleanErik Elfström, Apr 25, 2015
  2. 1/5 setup: add gentle version of read_gitfileErik Elfström, Apr 25, 2015
  3. Junio C HamanoApr 25, 2015
  4. Junio C HamanoApr 25, 2015
  5. 2/5 setup: sanity check file size in read_gitfile_gentlyErik Elfström, Apr 25, 2015
  6. Junio C HamanoApr 25, 2015
  7. Erik ElfströmApr 25, 2015
  8. Junio C HamanoApr 26, 2015
  9. 0/5 Improving performance of git cleanErik Elfström, Apr 26, 2015
  10. 1/5 setup: add gentle version of read_gitfileErik Elfström, Apr 26, 2015
  11. Jeff KingApr 28, 2015
  12. erik elfströmApr 28, 2015
  13. Jeff KingApr 28, 2015
  14. Jonathan NiederApr 28, 2015
  15. Jeff KingApr 28, 2015
  16. Jonathan NiederApr 28, 2015
  17. Jeff KingApr 28, 2015
  18. Jonathan NiederApr 28, 2015
  19. Junio C HamanoApr 28, 2015
  20. Stefan BellerApr 29, 2015
  21. Junio C HamanoApr 30, 2015
  22. 2/5 setup: sanity check file size in read_gitfile_gentlyErik Elfström, Apr 26, 2015
  23. Jeff KingApr 28, 2015
  24. Windows path limites, was Re: [PATCH v5 2/5] setup: sanity check file size in read_gitfile_gentlyJohannes Schindelin, Apr 28, 2015
  25. Doug KellyApr 28, 2015
  26. Johannes SchindelinApr 28, 2015
  27. erik elfströmApr 28, 2015
  28. Junio C HamanoApr 29, 2015
  29. 3/5 t7300: add tests to document behavior of clean and nested gitErik Elfström, Apr 26, 2015
  30. 4/5 p7300: add performance tests for cleanErik Elfström, Apr 26, 2015
  31. Jeff KingApr 28, 2015
  32. erik elfströmApr 28, 2015
  33. 5/5 clean: improve performance when removing lots of directoriesErik Elfström, Apr 26, 2015
  34. Jeff KingApr 28, 2015
  35. erik elfströmApr 28, 2015
  36. 3/5 t7300: add tests to document behavior of clean and nested gitErik Elfström, Apr 25, 2015
  37. 4/5 p7300: add performance tests for cleanErik Elfström, Apr 25, 2015
  38. 5/5 clean: improve performance when removing lots of directoriesErik Elfström, Apr 25, 2015

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.