diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-09-15 13:15:26 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-09-15 13:15:26 -0700 |
commit | c76fcf3e46a86d389739b7ee94b3d4faa351af84 (patch) | |
tree | 49d216f9c9d2d5715ece2dc8f01b6914c0a738f9 /apply.c | |
parent | Merge branch 'bs/doc-bugreport-outdir' (diff) | |
parent | apply: resolve trivial merge without hitting ll-merge with "--3way" (diff) | |
download | tgif-c76fcf3e46a86d389739b7ee94b3d4faa351af84.tar.xz |
Merge branch 'jc/trivial-threeway-binary-merge'
The "git apply -3" code path learned not to bother the lower level
merge machinery when the three-way merge can be trivially resolved
without the content level merge.
* jc/trivial-threeway-binary-merge:
apply: resolve trivial merge without hitting ll-merge with "--3way"
Diffstat (limited to 'apply.c')
-rw-r--r-- | apply.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -3468,6 +3468,21 @@ static int load_preimage(struct apply_state *state, return 0; } +static int resolve_to(struct image *image, const struct object_id *result_id) +{ + unsigned long size; + enum object_type type; + + clear_image(image); + + image->buf = read_object_file(result_id, &type, &size); + if (!image->buf || type != OBJ_BLOB) + die("unable to read blob object %s", oid_to_hex(result_id)); + image->len = size; + + return 0; +} + static int three_way_merge(struct apply_state *state, struct image *image, char *path, @@ -3479,6 +3494,12 @@ static int three_way_merge(struct apply_state *state, mmbuffer_t result = { NULL }; int status; + /* resolve trivial cases first */ + if (oideq(base, ours)) + return resolve_to(image, theirs); + else if (oideq(base, theirs) || oideq(ours, theirs)) + return resolve_to(image, ours); + read_mmblob(&base_file, base); read_mmblob(&our_file, ours); read_mmblob(&their_file, theirs); |