1 #include "git-compat-util.h"
5 #include "merge-ort-wrappers.h"
6 #include "read-cache-ll.h"
11 static int unclean(struct merge_options
*opt
, struct tree
*head
)
13 /* Sanity check on repo state; index must match head */
14 struct strbuf sb
= STRBUF_INIT
;
16 if (head
&& repo_index_has_changes(opt
->repo
, head
, &sb
)) {
17 error(_("Your local changes to the following files would be overwritten by merge:\n %s"),
26 int merge_ort_nonrecursive(struct merge_options
*opt
,
29 struct tree
*merge_base
)
31 struct merge_result result
;
33 if (unclean(opt
, head
))
36 if (oideq(&merge_base
->object
.oid
, &merge
->object
.oid
)) {
37 printf_ln(_("Already up to date."));
41 memset(&result
, 0, sizeof(result
));
42 merge_incore_nonrecursive(opt
, merge_base
, head
, merge
, &result
);
43 merge_switch_to_result(opt
, head
, &result
, 1, 1);
48 int merge_ort_recursive(struct merge_options
*opt
,
51 const struct commit_list
*merge_bases
,
52 struct commit
**result
)
54 struct tree
*head
= repo_get_commit_tree(opt
->repo
, side1
);
55 struct merge_result tmp
;
57 if (unclean(opt
, head
))
60 memset(&tmp
, 0, sizeof(tmp
));
61 merge_incore_recursive(opt
, merge_bases
, side1
, side2
, &tmp
);
62 merge_switch_to_result(opt
, head
, &tmp
, 1, 1);