builtin/commit.c: extract ignore_non_trailer() helper function
Extract a helper function from prepare_to_commit() to determine where to place a new Signed-off-by: line, which is essentially the true "end" of the log message, ignoring the trailing "Conflicts:" line and everything below it. The detection _should_ make sure the "Conflicts:" line it finds is truly the conflict hint block by checking everything that follows is a HT indented pathname to avoid false positive, but this logic will be revamped in a later patch to ignore comments and blanks anyway, so it is left as-is in this step. Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
75c961b767
commit
073bd75e17
|
@ -593,6 +593,37 @@ static char *cut_ident_timestamp_part(char *string)
|
||||||
return ket;
|
return ket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Inspect sb and determine the true "end" of the log message, in
|
||||||
|
* order to find where to put a new Signed-off-by: line. Ignored are
|
||||||
|
* trailing "Conflict:" block.
|
||||||
|
*
|
||||||
|
* Returns the number of bytes from the tail to ignore, to be fed as
|
||||||
|
* the second parameter to append_signoff().
|
||||||
|
*/
|
||||||
|
static int ignore_non_trailer(struct strbuf *sb)
|
||||||
|
{
|
||||||
|
int ignore_footer = 0;
|
||||||
|
int i, eol, previous = 0;
|
||||||
|
const char *nl;
|
||||||
|
|
||||||
|
for (i = 0; i < sb->len; i++) {
|
||||||
|
nl = memchr(sb->buf + i, '\n', sb->len - i);
|
||||||
|
if (nl)
|
||||||
|
eol = nl - sb->buf;
|
||||||
|
else
|
||||||
|
eol = sb->len;
|
||||||
|
if (!prefixcmp(sb->buf + previous, "\nConflicts:\n")) {
|
||||||
|
ignore_footer = sb->len - previous;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (i < eol)
|
||||||
|
i++;
|
||||||
|
previous = eol;
|
||||||
|
}
|
||||||
|
return ignore_footer;
|
||||||
|
}
|
||||||
|
|
||||||
static int prepare_to_commit(const char *index_file, const char *prefix,
|
static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||||
struct commit *current_head,
|
struct commit *current_head,
|
||||||
struct wt_status *s,
|
struct wt_status *s,
|
||||||
|
@ -718,32 +749,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||||
if (clean_message_contents)
|
if (clean_message_contents)
|
||||||
stripspace(&sb, 0);
|
stripspace(&sb, 0);
|
||||||
|
|
||||||
if (signoff) {
|
if (signoff)
|
||||||
/*
|
append_signoff(&sb, ignore_non_trailer(&sb), 0);
|
||||||
* See if we have a Conflicts: block at the end. If yes, count
|
|
||||||
* its size, so we can ignore it.
|
|
||||||
*/
|
|
||||||
int ignore_footer = 0;
|
|
||||||
int i, eol, previous = 0;
|
|
||||||
const char *nl;
|
|
||||||
|
|
||||||
for (i = 0; i < sb.len; i++) {
|
|
||||||
nl = memchr(sb.buf + i, '\n', sb.len - i);
|
|
||||||
if (nl)
|
|
||||||
eol = nl - sb.buf;
|
|
||||||
else
|
|
||||||
eol = sb.len;
|
|
||||||
if (!prefixcmp(sb.buf + previous, "\nConflicts:\n")) {
|
|
||||||
ignore_footer = sb.len - previous;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
while (i < eol)
|
|
||||||
i++;
|
|
||||||
previous = eol;
|
|
||||||
}
|
|
||||||
|
|
||||||
append_signoff(&sb, ignore_footer, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
|
if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
|
||||||
die_errno(_("could not write commit template"));
|
die_errno(_("could not write commit template"));
|
||||||
|
|
Loading…
Reference in New Issue