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>
This commit is contained in:
Junio C Hamano 2008-05-28 15:12:30 -07:00
parent 6286a08db3
commit 2e2b887d1c

View File

@ -358,8 +358,13 @@ static int unpack_failed(struct unpack_trees_options *o, const char *message)
return -1; 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 unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
{ {
int ret;
static struct cache_entry *dfc; static struct cache_entry *dfc;
if (len > MAX_UNPACK_TREES) 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"); return unpack_failed(o, "Merge requires file-level merging");
o->src_index = NULL; o->src_index = NULL;
if (check_updates(o)) ret = check_updates(o) ? (-2) : 0;
return -1;
if (o->dst_index) if (o->dst_index)
*o->dst_index = o->result; *o->dst_index = o->result;
return 0; return ret;
} }
/* Here come the merge functions */ /* Here come the merge functions */