t7300: add tests to document behavior of clean and nested git
Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									921bdd96af
								
							
						
					
					
						commit
						91479b9c72
					
				
							
								
								
									
										142
									
								
								t/t7300-clean.sh
								
								
								
								
							
							
						
						
									
										142
									
								
								t/t7300-clean.sh
								
								
								
								
							|  | @ -455,6 +455,148 @@ 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 'should avoid cleaning possible submodules' ' | ||||
| 	rm -fr to_clean possible_sub1 && | ||||
| 	mkdir to_clean possible_sub1 && | ||||
| 	test_when_finished "rm -rf possible_sub*" && | ||||
| 	echo "gitdir: foo" >possible_sub1/.git && | ||||
| 	>possible_sub1/hello.world && | ||||
| 	chmod 0 possible_sub1/.git && | ||||
| 	>to_clean/should_clean.this && | ||||
| 	git clean -f -d && | ||||
| 	test_path_is_file possible_sub1/.git && | ||||
| 	test_path_is_file possible_sub1/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 && | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Erik Elfström
						Erik Elfström