Code

commit,status: describe -u likewise
[git.git] / notes-merge.c
index a2feab6d1bb7821329bc976b1cd7682e61191f86..1467ad31795ae21896f1e608e7cb032df2bc94a8 100644 (file)
@@ -8,6 +8,7 @@
 #include "dir.h"
 #include "notes.h"
 #include "notes-merge.h"
+#include "strbuf.h"
 
 struct notes_merge_pair {
        unsigned char obj[20], base[20], local[20], remote[20];
@@ -16,6 +17,7 @@ struct notes_merge_pair {
 void init_notes_merge_options(struct notes_merge_options *o)
 {
        memset(o, 0, sizeof(struct notes_merge_options));
+       strbuf_init(&(o->commit_msg), 0);
        o->verbosity = NOTES_MERGE_VERBOSITY_DEFAULT;
 }
 
@@ -384,6 +386,12 @@ static int merge_one_change_manual(struct notes_merge_options *o,
               sha1_to_hex(p->obj), sha1_to_hex(p->base),
               sha1_to_hex(p->local), sha1_to_hex(p->remote));
 
+       /* add "Conflicts:" section to commit message first time through */
+       if (!o->has_worktree)
+               strbuf_addstr(&(o->commit_msg), "\n\nConflicts:\n");
+
+       strbuf_addf(&(o->commit_msg), "\t%s\n", sha1_to_hex(p->obj));
+
        OUTPUT(o, 2, "Auto-merging notes for %s", sha1_to_hex(p->obj));
        check_notes_merge_worktree(o);
        if (is_null_sha1(p->local)) {
@@ -445,6 +453,13 @@ static int merge_one_change(struct notes_merge_options *o,
                        die("failed to concatenate notes "
                            "(combine_notes_concatenate)");
                return 0;
+       case NOTES_MERGE_RESOLVE_CAT_SORT_UNIQ:
+               OUTPUT(o, 2, "Concatenating unique lines in local and remote "
+                      "notes for %s", sha1_to_hex(p->obj));
+               if (add_note(t, p->obj, p->remote, combine_notes_cat_sort_uniq))
+                       die("failed to concatenate notes "
+                           "(combine_notes_cat_sort_uniq)");
+               return 0;
        }
        die("Unknown strategy (%i).", o->strategy);
 }
@@ -600,7 +615,7 @@ int notes_merge(struct notes_merge_options *o,
        bases = get_merge_bases(local, remote, 1);
        if (!bases) {
                base_sha1 = null_sha1;
-               base_tree_sha1 = (unsigned char *)EMPTY_TREE_SHA1_BIN;
+               base_tree_sha1 = EMPTY_TREE_SHA1_BIN;
                OUTPUT(o, 4, "No merge base found; doing history-less merge");
        } else if (!bases->next) {
                base_sha1 = bases->item->object.sha1;
@@ -640,12 +655,13 @@ int notes_merge(struct notes_merge_options *o,
                struct commit_list *parents = NULL;
                commit_list_insert(remote, &parents); /* LIFO order */
                commit_list_insert(local, &parents);
-               create_notes_commit(local_tree, parents, o->commit_msg,
+               create_notes_commit(local_tree, parents, o->commit_msg.buf,
                                    result_sha1);
        }
 
 found_result:
        free_commit_list(bases);
+       strbuf_release(&(o->commit_msg));
        trace_printf("notes_merge(): result = %i, result_sha1 = %.7s\n",
               result, sha1_to_hex(result_sha1));
        return result;