shortlog: handle multi-line subjects like log --pretty=oneline et. al. do

The commit message parser of git shortlog used to treat only the first
non-empty line of the commit message as the subject.  Other log commands
(e.g. --pretty=oneline) show the whole first paragraph instead (unwrapped
into a single line).

For consistency, this patch borrows format_subject() from pretty.c to
make shortlog do the same.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2009-01-06 21:41:06 +01:00 committed by Junio C Hamano
parent f53bd743ff
commit cec08717cc
2 changed files with 8 additions and 5 deletions

View File

@ -29,6 +29,9 @@ static int compare_by_number(const void *a1, const void *a2)
return -1; return -1;
} }
const char *format_subject(struct strbuf *sb, const char *msg,
const char *line_separator);
static void insert_one_record(struct shortlog *log, static void insert_one_record(struct shortlog *log,
const char *author, const char *author,
const char *oneline) const char *oneline)
@ -41,6 +44,7 @@ static void insert_one_record(struct shortlog *log,
size_t len; size_t len;
const char *eol; const char *eol;
const char *boemail, *eoemail; const char *boemail, *eoemail;
struct strbuf subject = STRBUF_INIT;
boemail = strchr(author, '<'); boemail = strchr(author, '<');
if (!boemail) if (!boemail)
@ -89,9 +93,8 @@ static void insert_one_record(struct shortlog *log,
while (*oneline && isspace(*oneline) && *oneline != '\n') while (*oneline && isspace(*oneline) && *oneline != '\n')
oneline++; oneline++;
len = eol - oneline; len = eol - oneline;
while (len && isspace(oneline[len-1])) format_subject(&subject, oneline, " ");
len--; buffer = strbuf_detach(&subject, NULL);
buffer = xmemdupz(oneline, len);
if (dot3) { if (dot3) {
int dot3len = strlen(dot3); int dot3len = strlen(dot3);

View File

@ -486,7 +486,7 @@ static void parse_commit_header(struct format_commit_context *context)
context->commit_header_parsed = 1; context->commit_header_parsed = 1;
} }
static const char *format_subject(struct strbuf *sb, const char *msg, const char *format_subject(struct strbuf *sb, const char *msg,
const char *line_separator) const char *line_separator)
{ {
int first = 1; int first = 1;