summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-10-13 19:03:18 -0700
committerJunio C Hamano <gitster@pobox.com>2011-10-13 19:03:18 -0700
commit08ec3b5e4d56f62e8585095a7a4bf21721498ef3 (patch)
tree223897ffe752aa0955c5dc56bfe10692c9eabf9a /unpack-trees.c
parent34c4461ae3b353e8c931565d5527b98ed12e3735 (diff)
parenta7bc906f2e64f0d9d3fec91964dc38e390ef69a1 (diff)
downloadgit-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
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c20
1 files changed, 16 insertions, 4 deletions
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;
}