summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-05-28 22:12:30 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-05-30 00:35:21 (GMT)
commit2e2b887d1c2c2385825160e587d711ecb5935ef5 (patch)
tree6beed288d6482e1e3857549370c03feeaf7a1215 /unpack-trees.c
parent6286a08db3d1e718f4be6959d0f380215026800b (diff)
downloadgit-2e2b887d1c2c2385825160e587d711ecb5935ef5.zip
git-2e2b887d1c2c2385825160e587d711ecb5935ef5.tar.gz
git-2e2b887d1c2c2385825160e587d711ecb5935ef5.tar.bz2
unpack_trees(): allow callers to differentiate worktree errors from merge errors
Instead of uniformly returning -1 on any error, this teaches unpack_trees() to return -2 when the merge itself is Ok but worktree refuses to get updated. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/unpack-trees.c b/unpack-trees.c
index 0de5a31..cba0aca 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -358,8 +358,13 @@ static int unpack_failed(struct unpack_trees_options *o, const char *message)
return -1;
}
+/*
+ * N-way merge "len" trees. Returns 0 on success, -1 on failure to manipulate the
+ * resulting index, -2 on failure to reflect the changes to the work tree.
+ */
int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
{
+ int ret;
static struct cache_entry *dfc;
if (len > MAX_UNPACK_TREES)
@@ -404,11 +409,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
return unpack_failed(o, "Merge requires file-level merging");
o->src_index = NULL;
- if (check_updates(o))
- return -1;
+ ret = check_updates(o) ? (-2) : 0;
if (o->dst_index)
*o->dst_index = o->result;
- return 0;
+ return ret;
}
/* Here come the merge functions */