diff options
author | Clemens Buchacher <drizzd@aon.at> | 2009-01-01 21:54:31 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-01-05 12:45:38 -0800 |
commit | 6b9315d5a14b4d1389cff347fcfcb86624bbf645 (patch) | |
tree | 8e61fe9ff6a9ad3ccc931f7a8c155aa878ce9048 | |
parent | GIT 1.6.0 (diff) | |
download | tgif-6b9315d5a14b4d1389cff347fcfcb86624bbf645.tar.xz |
unpack-trees: handle failure in verify_absent
Commit 203a2fe1 (Allow callers of unpack_trees() to handle failure)
changed the "die on error" behavior to "return failure code".
verify_absent did not handle errors returned by
verify_clean_subdirectory, however.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | t/t1001-read-tree-m-2way.sh | 24 | ||||
-rw-r--r-- | unpack-trees.c | 8 |
2 files changed, 29 insertions, 3 deletions
diff --git a/t/t1001-read-tree-m-2way.sh b/t/t1001-read-tree-m-2way.sh index 4b44e131b2..7f6ab31c36 100755 --- a/t/t1001-read-tree-m-2way.sh +++ b/t/t1001-read-tree-m-2way.sh @@ -341,4 +341,28 @@ test_expect_success \ check_cache_at DF/DF dirty && :' +test_expect_success \ + 'a/b (untracked) vs a case setup.' \ + 'rm -f .git/index && + : >a && + git update-index --add a && + treeM=`git write-tree` && + echo treeM $treeM && + git ls-tree $treeM && + git ls-files --stage >treeM.out && + + rm -f a && + git update-index --remove a && + mkdir a && + : >a/b && + treeH=`git write-tree` && + echo treeH $treeH && + git ls-tree $treeH' + +test_expect_success \ + 'a/b (untracked) vs a, plus c/d case test.' \ + '! git read-tree -u -m "$treeH" "$treeM" && + git ls-files --stage && + test -f a/b' + test_done diff --git a/unpack-trees.c b/unpack-trees.c index cba0aca062..3f42c2997f 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -587,7 +587,7 @@ static int verify_absent(struct cache_entry *ce, const char *action, return 0; if (!lstat(ce->name, &st)) { - int cnt; + int ret; int dtype = ce_to_dtype(ce); struct cache_entry *result; @@ -615,7 +615,9 @@ static int verify_absent(struct cache_entry *ce, const char *action, * files that are in "foo/" we would lose * it. */ - cnt = verify_clean_subdirectory(ce, action, o); + ret = verify_clean_subdirectory(ce, action, o); + if (ret < 0) + return ret; /* * If this removed entries from the index, @@ -634,7 +636,7 @@ static int verify_absent(struct cache_entry *ce, const char *action, * We need to increment it by the number of * deleted entries here. */ - o->pos += cnt; + o->pos += ret; return 0; } |