]> git.ipfire.org Git - thirdparty/git.git/blobdiff - apply.c
t7004: use "test-tool ref-store" for reflog inspection
[thirdparty/git.git] / apply.c
diff --git a/apply.c b/apply.c
index 4ed4b271691a4cf5db0f6c1df73fae1cb891741f..43a0aebf4eec85fa6b0a69f655c0224aa14f29e5 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -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);