Skip to content

Commit

Permalink
git notes merge: List conflicting notes in notes merge commit message
Browse files Browse the repository at this point in the history
This brings notes merge in line with regular merge's behaviour.

This patch has been improved by the following contributions:
- Ævar Arnfjörð Bjarmason: Don't use C99 comments.

Thanks-to: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Johan Herland authored and Junio C Hamano committed Nov 17, 2010
1 parent 6abb365 commit 443259c
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 3 deletions.
2 changes: 1 addition & 1 deletion builtin/notes.c
Original file line number Diff line number Diff line change
Expand Up @@ -902,7 +902,7 @@ static int merge(int argc, const char **argv, const char *prefix)

strbuf_addf(&msg, "notes: Merged notes from %s into %s",
remote_ref.buf, default_notes_ref());
o.commit_msg = msg.buf + 7; // skip "notes: " prefix
strbuf_add(&(o.commit_msg), msg.buf + 7, msg.len - 7); /* skip "notes: " */

result = notes_merge(&o, t, result_sha1);

Expand Down
11 changes: 10 additions & 1 deletion notes-merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -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;
}

Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -640,12 +648,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;
Expand Down
2 changes: 1 addition & 1 deletion notes-merge.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ enum notes_merge_verbosity {
struct notes_merge_options {
const char *local_ref;
const char *remote_ref;
const char *commit_msg;
struct strbuf commit_msg;
int verbosity;
enum {
NOTES_MERGE_RESOLVE_MANUAL = 0,
Expand Down
12 changes: 12 additions & 0 deletions t/t3310-notes-merge-manual-resolve.sh
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,12 @@ EOF
git log -1 --format=%B refs/notes/m > merge_commit_msg &&
grep -q refs/notes/m merge_commit_msg &&
grep -q refs/notes/z merge_commit_msg &&
# Merge commit mentions conflicting notes
grep -q "Conflicts" merge_commit_msg &&
( for sha1 in $(cat expect_conflicts); do
grep -q "$sha1" merge_commit_msg ||
exit 1
done ) &&
# Verify contents of merge result
verify_notes m &&
# Verify that other notes refs has not changed (w, x, y and z)
Expand Down Expand Up @@ -456,6 +462,12 @@ EOF
git log -1 --format=%B refs/notes/m > merge_commit_msg &&
grep -q refs/notes/m merge_commit_msg &&
grep -q refs/notes/z merge_commit_msg &&
# Merge commit mentions conflicting notes
grep -q "Conflicts" merge_commit_msg &&
( for sha1 in $(cat expect_conflicts); do
grep -q "$sha1" merge_commit_msg ||
exit 1
done ) &&
# Verify contents of merge result
verify_notes m &&
# Verify that other notes refs has not changed (w, x, y and z)
Expand Down

0 comments on commit 443259c

Please sign in to comment.