summaryrefslogtreecommitdiff
path: root/merge-ort.c
diff options
context:
space:
mode:
authorLibravatar Elijah Newren <newren@gmail.com>2020-12-13 08:04:12 +0000
committerLibravatar Junio C Hamano <gitster@pobox.com>2020-12-13 14:18:19 -0800
commit0c0d705b5cba39c70b01b8b21e2c4d3ca014daf3 (patch)
tree78c6520da3daf05273074fb144b4de1c17819515 /merge-ort.c
parentmerge-ort: use histogram diff (diff)
downloadtgif-0c0d705b5cba39c70b01b8b21e2c4d3ca014daf3.tar.xz
merge-ort: add an err() function similar to one from merge-recursive
Various places in merge-recursive used an err() function when it hit some kind of unrecoverable error. That code was from the reusable bits of merge-recursive.c that we liked, such as merge_3way, writing object files to the object store, reading blobs from the object store, etc. So create a similar function to allow us to port that code over, and use it for when we detect problems returned from collect_merge_info()'s traverse_trees() call, which we will be adding next. While we are at it, also add more documentation for the "clean" field from struct merge_result, particularly since the name suggests a boolean but it is not quite one and this is our first non-boolean usage. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-ort.c')
-rw-r--r--merge-ort.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/merge-ort.c b/merge-ort.c
index 85942cfa7c..76c0f93427 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -168,12 +168,27 @@ struct conflict_info {
unsigned match_mask:3;
};
+static int err(struct merge_options *opt, const char *err, ...)
+{
+ va_list params;
+ struct strbuf sb = STRBUF_INIT;
+
+ strbuf_addstr(&sb, "error: ");
+ va_start(params, err);
+ strbuf_vaddf(&sb, err, params);
+ va_end(params);
+
+ error("%s", sb.buf);
+ strbuf_release(&sb);
+
+ return -1;
+}
+
static int collect_merge_info(struct merge_options *opt,
struct tree *merge_base,
struct tree *side1,
struct tree *side2)
{
- /* TODO: Implement this using traverse_trees() */
die("Not yet implemented.");
}
@@ -276,7 +291,19 @@ static void merge_ort_nonrecursive_internal(struct merge_options *opt,
{
struct object_id working_tree_oid;
- collect_merge_info(opt, merge_base, side1, side2);
+ if (collect_merge_info(opt, merge_base, side1, side2) != 0) {
+ /*
+ * TRANSLATORS: The %s arguments are: 1) tree hash of a merge
+ * base, and 2-3) the trees for the two trees we're merging.
+ */
+ err(opt, _("collecting merge info failed for trees %s, %s, %s"),
+ oid_to_hex(&merge_base->object.oid),
+ oid_to_hex(&side1->object.oid),
+ oid_to_hex(&side2->object.oid));
+ result->clean = -1;
+ return;
+ }
+
result->clean = detect_and_process_renames(opt, merge_base,
side1, side2);
process_entries(opt, &working_tree_oid);