Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-01-24 00:52:26 +0300
committerJunio C Hamano <gitster@pobox.com>2024-01-24 00:52:26 +0300
commit161ceb2ef54bde493b3fe51c663c55beb3a45d6b (patch)
tree1c10738fa912a3784affe96efc1dca0791d380c1 /rerere.c
parent895e05d6908f8938d06e8b2c7bbbf84e1a213abc (diff)
parent3ea54d054a2af24c9127502a010385777df6afe1 (diff)
Merge branch 'jc/rerere-cleanup' into seen
Code clean-up. * jc/rerere-cleanup: rerere: modernize use of empty strbuf rerere: try_merge() should use LL_MERGE_ERROR when it means an error rerere: fix comment on handle_file() helper rerere: simplify check_one_conflict() helper function
Diffstat (limited to 'rerere.c')
-rw-r--r--rerere.c46
1 files changed, 19 insertions, 27 deletions
diff --git a/rerere.c b/rerere.c
index ca7e77ba68..ab76f9510f 100644
--- a/rerere.c
+++ b/rerere.c
@@ -388,12 +388,8 @@ static int handle_conflict(struct strbuf *out, struct rerere_io *io,
strbuf_addbuf(out, &two);
rerere_strbuf_putconflict(out, '>', marker_size);
if (ctx) {
- the_hash_algo->update_fn(ctx, one.buf ?
- one.buf : "",
- one.len + 1);
- the_hash_algo->update_fn(ctx, two.buf ?
- two.buf : "",
- two.len + 1);
+ the_hash_algo->update_fn(ctx, one.buf, one.len + 1);
+ the_hash_algo->update_fn(ctx, two.buf, two.len + 1);
}
break;
} else if (hunk == RR_SIDE_1)
@@ -452,7 +448,7 @@ static int handle_path(unsigned char *hash, struct rerere_io *io, int marker_siz
/*
* Scan the path for conflicts, do the "handle_path()" thing above, and
- * return the number of conflict hunks found.
+ * return true iff conflict hunks were found.
*/
static int handle_file(struct index_state *istate,
const char *path, unsigned char *hash, const char *output)
@@ -497,9 +493,11 @@ static int handle_file(struct index_state *istate,
}
/*
- * Look at a cache entry at "i" and see if it is not conflicting,
- * conflicting and we are willing to handle, or conflicting and
- * we are unable to handle, and return the determination in *type.
+ * Look at a cache entry at "i" and see if it is not conflicting
+ * (RESOLVED), conflicting and we are willing to handle (THREE_STAGED),
+ * or conflicting and we are unable to handle (PUNTED), and return the
+ * determination in *type.
+ *
* Return the cache index to be looked at next, by skipping the
* stages we have already looked at in this invocation of this
* function.
@@ -507,6 +505,7 @@ static int handle_file(struct index_state *istate,
static int check_one_conflict(struct index_state *istate, int i, int *type)
{
const struct cache_entry *e = istate->cache[i];
+ unsigned int seen_stages = 0;
if (!ce_stage(e)) {
*type = RESOLVED;
@@ -514,24 +513,17 @@ static int check_one_conflict(struct index_state *istate, int i, int *type)
}
*type = PUNTED;
- while (i < istate->cache_nr && ce_stage(istate->cache[i]) == 1)
- i++;
-
- /* Only handle regular files with both stages #2 and #3 */
- if (i + 1 < istate->cache_nr) {
- const struct cache_entry *e2 = istate->cache[i];
- const struct cache_entry *e3 = istate->cache[i + 1];
- if (ce_stage(e2) == 2 &&
- ce_stage(e3) == 3 &&
- ce_same_name(e, e3) &&
- S_ISREG(e2->ce_mode) &&
- S_ISREG(e3->ce_mode))
- *type = THREE_STAGED;
+ for (; i < istate->cache_nr; i++) {
+ const struct cache_entry *n = istate->cache[i];
+ if (!ce_same_name(n, e))
+ break;
+ if (S_ISREG(n->ce_mode))
+ seen_stages |= 1u << (ce_stage(n) - 1);
}
- /* Skip the entries with the same name */
- while (i < istate->cache_nr && ce_same_name(e, istate->cache[i]))
- i++;
+ if ((seen_stages & 6) == 6)
+ *type = THREE_STAGED; /* has both stages #2 and #3 */
+
return i;
}
@@ -619,7 +611,7 @@ static int try_merge(struct index_state *istate,
if (read_mmfile(&base, rerere_path(id, "preimage")) ||
read_mmfile(&other, rerere_path(id, "postimage"))) {
- ret = LL_MERGE_CONFLICT;
+ ret = LL_MERGE_ERROR;
} else {
/*
* A three-way merge. Note that this honors user-customizable