101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (C) 2006 Carl D. Worth <cworth@cworth.org>
 | |
| #
 | |
| 
 | |
| test_description='test git clone to cleanup after failure
 | |
| 
 | |
| This test covers the fact that if git clone fails, it should remove
 | |
| the directory it created, to avoid the user having to manually
 | |
| remove the directory before attempting a clone again.
 | |
| 
 | |
| Unless the directory already exists, in which case we clean up only what we
 | |
| wrote.
 | |
| '
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| corrupt_repo () {
 | |
| 	test_when_finished "rmdir foo/.git/objects.bak" &&
 | |
| 	mkdir foo/.git/objects.bak/ &&
 | |
| 	test_when_finished "mv foo/.git/objects.bak/* foo/.git/objects/" &&
 | |
| 	mv foo/.git/objects/* foo/.git/objects.bak/
 | |
| }
 | |
| 
 | |
| test_expect_success 'clone of non-existent source should fail' '
 | |
| 	test_must_fail git clone foo bar
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone should not leave a directory' '
 | |
| 	test_path_is_missing bar
 | |
| '
 | |
| 
 | |
| test_expect_success 'create a repo to clone' '
 | |
| 	test_create_repo foo
 | |
| '
 | |
| 
 | |
| test_expect_success 'create objects in repo for later corruption' '
 | |
| 	test_commit -C foo file
 | |
| '
 | |
| 
 | |
| # source repository given to git clone should be relative to the
 | |
| # current path not to the target dir
 | |
| test_expect_success 'clone of non-existent (relative to $PWD) source should fail' '
 | |
| 	test_must_fail git clone ../foo baz
 | |
| '
 | |
| 
 | |
| test_expect_success 'clone should work now that source exists' '
 | |
| 	git clone foo bar
 | |
| '
 | |
| 
 | |
| test_expect_success 'successful clone must leave the directory' '
 | |
| 	test_path_is_dir bar
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone --separate-git-dir should not leave any directories' '
 | |
| 	corrupt_repo &&
 | |
| 	test_must_fail git clone --separate-git-dir gitdir foo worktree &&
 | |
| 	test_path_is_missing gitdir &&
 | |
| 	test_path_is_missing worktree
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone into empty leaves directory (vanilla)' '
 | |
| 	mkdir -p empty &&
 | |
| 	corrupt_repo &&
 | |
| 	test_must_fail git clone foo empty &&
 | |
| 	test_dir_is_empty empty
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone into empty leaves directory (bare)' '
 | |
| 	mkdir -p empty &&
 | |
| 	corrupt_repo &&
 | |
| 	test_must_fail git clone --bare foo empty &&
 | |
| 	test_dir_is_empty empty
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone into empty leaves directory (separate)' '
 | |
| 	mkdir -p empty-git empty-wt &&
 | |
| 	corrupt_repo &&
 | |
| 	test_must_fail git clone --separate-git-dir empty-git foo empty-wt &&
 | |
| 	test_dir_is_empty empty-git &&
 | |
| 	test_dir_is_empty empty-wt
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone into empty leaves directory (separate, git)' '
 | |
| 	mkdir -p empty-git &&
 | |
| 	corrupt_repo &&
 | |
| 	test_must_fail git clone --separate-git-dir empty-git foo no-wt &&
 | |
| 	test_dir_is_empty empty-git &&
 | |
| 	test_path_is_missing no-wt
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed clone into empty leaves directory (separate, wt)' '
 | |
| 	mkdir -p empty-wt &&
 | |
| 	corrupt_repo &&
 | |
| 	test_must_fail git clone --separate-git-dir no-git foo empty-wt &&
 | |
| 	test_path_is_missing no-git &&
 | |
| 	test_dir_is_empty empty-wt
 | |
| '
 | |
| 
 | |
| test_done
 |