diff options
author | Junio C Hamano <gitster@pobox.com> | 2024-01-24 00:52:26 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2024-01-24 00:52:26 +0300 |
commit | 161ceb2ef54bde493b3fe51c663c55beb3a45d6b (patch) | |
tree | 1c10738fa912a3784affe96efc1dca0791d380c1 /rerere.c | |
parent | 895e05d6908f8938d06e8b2c7bbbf84e1a213abc (diff) | |
parent | 3ea54d054a2af24c9127502a010385777df6afe1 (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.c | 46 |
1 files changed, 19 insertions, 27 deletions
@@ -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 |