diff options
| author | Junio C Hamano <gitster@pobox.com> | 2011-10-13 19:03:18 -0700 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2011-10-13 19:03:18 -0700 | 
| commit | 08ec3b5e4d56f62e8585095a7a4bf21721498ef3 (patch) | |
| tree | 223897ffe752aa0955c5dc56bfe10692c9eabf9a | |
| parent | 34c4461ae3b353e8c931565d5527b98ed12e3735 (diff) | |
| parent | a7bc906f2e64f0d9d3fec91964dc38e390ef69a1 (diff) | |
| download | git-08ec3b5e4d56f62e8585095a7a4bf21721498ef3.tar.gz | |
Merge branch 'nd/maint-sparse-errors'
* nd/maint-sparse-errors:
  Add explanation why we do not allow to sparse checkout to empty working tree
  sparse checkout: show error messages when worktree shaping fails
| -rwxr-xr-x | t/t1011-read-tree-sparse-checkout.sh | 16 | ||||
| -rw-r--r-- | unpack-trees.c | 20 | 
2 files changed, 32 insertions, 4 deletions
diff --git a/t/t1011-read-tree-sparse-checkout.sh b/t/t1011-read-tree-sparse-checkout.sh index 018c3546b6..5c0053a20b 100755 --- a/t/t1011-read-tree-sparse-checkout.sh +++ b/t/t1011-read-tree-sparse-checkout.sh @@ -234,4 +234,20 @@ test_expect_success 'read-tree --reset removes outside worktree' '  	test_cmp empty result  ' +test_expect_success 'print errors when failed to update worktree' ' +	echo sub >.git/info/sparse-checkout && +	git checkout -f init && +	mkdir sub && +	touch sub/added sub/addedtoo && +	test_must_fail git checkout top 2>actual && +	cat >expected <<\EOF && +error: The following untracked working tree files would be overwritten by checkout: +	sub/added +	sub/addedtoo +Please move or remove them before you can switch branches. +Aborting +EOF +	test_cmp expected actual +' +  test_done diff --git a/unpack-trees.c b/unpack-trees.c index 237aed8c76..8282f5e5f6 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1091,6 +1091,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options  		 */  		mark_new_skip_worktree(o->el, &o->result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE); +		ret = 0;  		for (i = 0; i < o->result.cache_nr; i++) {  			struct cache_entry *ce = o->result.cache[i]; @@ -1103,19 +1104,30 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options  			 * correct CE_NEW_SKIP_WORKTREE  			 */  			if (ce->ce_flags & CE_ADDED && -			    verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o)) -					return -1; +			    verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o)) { +				if (!o->show_all_errors) +					goto return_failed; +				ret = -1; +			}  			if (apply_sparse_checkout(ce, o)) { +				if (!o->show_all_errors) +					goto return_failed;  				ret = -1; -				goto done;  			}  			if (!ce_skip_worktree(ce))  				empty_worktree = 0;  		} +		if (ret < 0) +			goto return_failed; +		/* +		 * Sparse checkout is meant to narrow down checkout area +		 * but it does not make sense to narrow down to empty working +		 * tree. This is usually a mistake in sparse checkout rules. +		 * Do not allow users to do that. +		 */  		if (o->result.cache_nr && empty_worktree) { -			/* dubious---why should this fail??? */  			ret = unpack_failed(o, "Sparse checkout leaves no entry on working directory");  			goto done;  		}  | 
