Browse Source

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>
maint
René Scharfe 16 years ago committed by Junio C Hamano
parent
commit
cec08717cc
  1. 9
      builtin-shortlog.c
  2. 4
      pretty.c

9
builtin-shortlog.c

@ -29,6 +29,9 @@ static int compare_by_number(const void *a1, const void *a2) @@ -29,6 +29,9 @@ static int compare_by_number(const void *a1, const void *a2)
return -1;
}

const char *format_subject(struct strbuf *sb, const char *msg,
const char *line_separator);

static void insert_one_record(struct shortlog *log,
const char *author,
const char *oneline)
@ -41,6 +44,7 @@ static void insert_one_record(struct shortlog *log, @@ -41,6 +44,7 @@ static void insert_one_record(struct shortlog *log,
size_t len;
const char *eol;
const char *boemail, *eoemail;
struct strbuf subject = STRBUF_INIT;

boemail = strchr(author, '<');
if (!boemail)
@ -89,9 +93,8 @@ static void insert_one_record(struct shortlog *log, @@ -89,9 +93,8 @@ static void insert_one_record(struct shortlog *log,
while (*oneline && isspace(*oneline) && *oneline != '\n')
oneline++;
len = eol - oneline;
while (len && isspace(oneline[len-1]))
len--;
buffer = xmemdupz(oneline, len);
format_subject(&subject, oneline, " ");
buffer = strbuf_detach(&subject, NULL);

if (dot3) {
int dot3len = strlen(dot3);

4
pretty.c

@ -486,8 +486,8 @@ static void parse_commit_header(struct format_commit_context *context) @@ -486,8 +486,8 @@ static void parse_commit_header(struct format_commit_context *context)
context->commit_header_parsed = 1;
}

static const char *format_subject(struct strbuf *sb, const char *msg,
const char *line_separator)
const char *format_subject(struct strbuf *sb, const char *msg,
const char *line_separator)
{
int first = 1;


Loading…
Cancel
Save