Skip to content

Commit

Permalink
merge & sequencer: unify codepaths that write "Conflicts:" hint
Browse files Browse the repository at this point in the history
Two identical loops in suggest_conflicts() in merge, and
do_recursive_merge() in sequencer, can use a single helper function
extracted from the latter that prepares the "Conflicts:" hint that
is meant to remind the user the paths for which merge conflicts had
to be resolved to write a better commit log message.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Oct 24, 2014
1 parent 08e3ce5 commit 75c961b
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 28 deletions.
18 changes: 5 additions & 13 deletions builtin/merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "remote.h"
#include "fmt-merge-msg.h"
#include "gpg-interface.h"
#include "sequencer.h"

#define DEFAULT_TWOHEAD (1<<0)
#define DEFAULT_OCTOPUS (1<<1)
Expand Down Expand Up @@ -888,24 +889,15 @@ static int suggest_conflicts(void)
{
const char *filename;
FILE *fp;
int pos;
struct strbuf msgbuf = STRBUF_INIT;

filename = git_path("MERGE_MSG");
fp = fopen(filename, "a");
if (!fp)
die_errno(_("Could not open '%s' for writing"), filename);
fprintf(fp, "\nConflicts:\n");
for (pos = 0; pos < active_nr; pos++) {
const struct cache_entry *ce = active_cache[pos];

if (ce_stage(ce)) {
fprintf(fp, "\t%s\n", ce->name);
while (pos + 1 < active_nr &&
!strcmp(ce->name,
active_cache[pos + 1]->name))
pos++;
}
}

append_conflicts_hint(&msgbuf);
fputs(msgbuf.buf, fp);
fclose(fp);
rerere(allow_rerere_auto);
printf(_("Automatic merge failed; "
Expand Down
35 changes: 20 additions & 15 deletions sequencer.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,24 @@ static int fast_forward_to(const unsigned char *to, const unsigned char *from,
return ret;
}

void append_conflicts_hint(struct strbuf *msgbuf)
{
int i;

strbuf_addstr(msgbuf, "\nConflicts:\n");
for (i = 0; i < active_nr;) {
const struct cache_entry *ce = active_cache[i++];
if (ce_stage(ce)) {
strbuf_addch(msgbuf, '\t');
strbuf_addstr(msgbuf, ce->name);
strbuf_addch(msgbuf, '\n');
while (i < active_nr && !strcmp(ce->name,
active_cache[i]->name))
i++;
}
}
}

static int do_recursive_merge(struct commit *base, struct commit *next,
const char *base_label, const char *next_label,
unsigned char *head, struct strbuf *msgbuf,
Expand Down Expand Up @@ -328,21 +346,8 @@ static int do_recursive_merge(struct commit *base, struct commit *next,
if (opts->signoff)
append_signoff(msgbuf, 0, 0);

if (!clean) {
int i;
strbuf_addstr(msgbuf, "\nConflicts:\n");
for (i = 0; i < active_nr;) {
const struct cache_entry *ce = active_cache[i++];
if (ce_stage(ce)) {
strbuf_addch(msgbuf, '\t');
strbuf_addstr(msgbuf, ce->name);
strbuf_addch(msgbuf, '\n');
while (i < active_nr && !strcmp(ce->name,
active_cache[i]->name))
i++;
}
}
}
if (!clean)
append_conflicts_hint(msgbuf);

return !clean;
}
Expand Down
1 change: 1 addition & 0 deletions sequencer.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,6 @@ int sequencer_pick_revisions(struct replay_opts *opts);
extern const char sign_off_header[];

void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag);
void append_conflicts_hint(struct strbuf *msgbuf);

#endif

0 comments on commit 75c961b

Please sign in to comment.