merge-recursive: prepare for `merge_submodule()` to report errors
The `merge_submodule()` function returns an integer that indicates whether the merge was clean (returning 1) or unclean (returning 0). Like the version in `merge-ort.c`, the version in `merge-recursive.c` does not report any errors (such as repository corruption) by returning -1 as of time of writing, even if the callers in `merge-ort.c` are prepared for exactly such errors. However, we want to teach (both variants of) the `merge_submodule()` function that trick: to report errors by returning -1. Therefore, prepare the caller in `merge-recursive.c` to handle that scenario. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Acked-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Schindelin committed
Mar 9, 2024 at 14:09 UTC
81a34cbb2e808aa93071a924336072b9a05470eb
1 file changed
+7
-6
merge-recursive.c
+7
-6
@@ -1426,13 +1426,14 @@ static int merge_mode_and_contents(struct merge_options *opt,
1426
/* FIXME: bug, what if modes didn't match? */
1427
result->clean = (merge_status == 0);
1428
} else if (S_ISGITLINK(a->mode)) {
1429
- result->clean = merge_submodule(opt, &result->blob.oid,
1430
- o->path,
1431
- &o->oid,
1432
- &a->oid,
1433
- &b->oid);
1434
- if (result->clean < 0)
1429
+ int clean = merge_submodule(opt, &result->blob.oid,
1430
+ o->path,
1431
+ &o->oid,
1432
+ &a->oid,
1433
+ &b->oid);
1434
+ if (clean < 0)
1435
return -1;
1436
+ result->clean = clean;
1437
} else if (S_ISLNK(a->mode)) {
1438
switch (opt->recursive_variant) {
1439
case MERGE_VARIANT_NORMAL: