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>maint
parent
c8017176ac
commit
0c0d705b5c
31
merge-ort.c
31
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);
|
||||
|
|
|
@ -7,7 +7,14 @@ struct commit;
|
|||
struct tree;
|
||||
|
||||
struct merge_result {
|
||||
/* Whether the merge is clean */
|
||||
/*
|
||||
* Whether the merge is clean; possible values:
|
||||
* 1: clean
|
||||
* 0: not clean (merge conflicts)
|
||||
* <0: operation aborted prematurely. (object database
|
||||
* unreadable, disk full, etc.) Worktree may be left in an
|
||||
* inconsistent state if operation failed near the end.
|
||||
*/
|
||||
int clean;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue