зеркало из https://github.com/microsoft/git.git
merge_recursive: abort properly upon errors
There are a couple of places where return values never indicated errors before, as we simply died instead of returning. But now negative return values mean that there was an error and we have to abort the operation. Let's do exactly that. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
f241ff0d0a
Коммит
de8946de16
|
@ -1949,17 +1949,19 @@ int merge_recursive(struct merge_options *o,
|
|||
/*
|
||||
* When the merge fails, the result contains files
|
||||
* with conflict markers. The cleanness flag is
|
||||
* ignored, it was never actually used, as result of
|
||||
* merge_trees has always overwritten it: the committed
|
||||
* "conflicts" were already resolved.
|
||||
* ignored (unless indicating an error), it was never
|
||||
* actually used, as result of merge_trees has always
|
||||
* overwritten it: the committed "conflicts" were
|
||||
* already resolved.
|
||||
*/
|
||||
discard_cache();
|
||||
saved_b1 = o->branch1;
|
||||
saved_b2 = o->branch2;
|
||||
o->branch1 = "Temporary merge branch 1";
|
||||
o->branch2 = "Temporary merge branch 2";
|
||||
merge_recursive(o, merged_common_ancestors, iter->item,
|
||||
NULL, &merged_common_ancestors);
|
||||
if (merge_recursive(o, merged_common_ancestors, iter->item,
|
||||
NULL, &merged_common_ancestors) < 0)
|
||||
return -1;
|
||||
o->branch1 = saved_b1;
|
||||
o->branch2 = saved_b2;
|
||||
o->call_depth--;
|
||||
|
@ -1975,6 +1977,8 @@ int merge_recursive(struct merge_options *o,
|
|||
o->ancestor = "merged common ancestors";
|
||||
clean = merge_trees(o, h1->tree, h2->tree, merged_common_ancestors->tree,
|
||||
&mrtree);
|
||||
if (clean < 0)
|
||||
return clean;
|
||||
|
||||
if (o->call_depth) {
|
||||
*result = make_virtual_commit(mrtree, "merged tree");
|
||||
|
@ -2031,6 +2035,9 @@ int merge_recursive_generic(struct merge_options *o,
|
|||
hold_locked_index(lock, 1);
|
||||
clean = merge_recursive(o, head_commit, next_commit, ca,
|
||||
result);
|
||||
if (clean < 0)
|
||||
return clean;
|
||||
|
||||
if (active_cache_changed &&
|
||||
write_locked_index(&the_index, lock, COMMIT_LOCK))
|
||||
return error(_("Unable to write index."));
|
||||
|
|
Загрузка…
Ссылка в новой задаче