git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] merge-recursive: prepare for `merge_submodule()` to report errors

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Mar 9, 2024, 14:09 UTC
Message-ID
<533df4c6659439d0a241a8b2e329c88d475d4136.1709993397.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1686.git.1709993397.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

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>
---
 merge-recursive.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/merge-recursive.c b/merge-recursive.c
index 32e9d6665de..f3132a9ecae 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1426,13 +1426,14 @@ static int merge_mode_and_contents(struct merge_options *opt,
 			/* FIXME: bug, what if modes didn't match? */
 			result->clean = (merge_status == 0);
 		} else if (S_ISGITLINK(a->mode)) {
-			result->clean = merge_submodule(opt, &result->blob.oid,
-							o->path,
-							&o->oid,
-							&a->oid,
-							&b->oid);
-			if (result->clean < 0)
+			int clean = merge_submodule(opt, &result->blob.oid,
+						    o->path,
+						    &o->oid,
+						    &a->oid,
+						    &b->oid);
+			if (clean < 0)
 				return -1;
+			result->clean = clean;
 		} else if (S_ISLNK(a->mode)) {
 			switch (opt->recursive_variant) {
 			case MERGE_VARIANT_NORMAL:
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: Johannes Schindelin via GitGitGadget
Message 2 of 9 in “The merge-base logic vs missing commit objects (follow-up)”
  1. 0/2 The merge-base logic vs missing commit objects (follow-up)Johannes Schindelin via GitGitGadget, Mar 9, 2024
  2. 1/2 merge-recursive: prepare for `merge_submodule()` to report errorsJohannes Schindelin via GitGitGadget, Mar 9, 2024
  3. 2/2 merge-ort/merge-recursive: do report errors in `merge_submodule()`Johannes Schindelin via GitGitGadget, Mar 9, 2024
  4. Junio C HamanoMar 9, 2024
  5. Johannes SchindelinMar 9, 2024
  6. Junio C HamanoMar 9, 2024
  7. Elijah NewrenMar 9, 2024
  8. Junio C HamanoMar 9, 2024
  9. Junio C HamanoMar 9, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.