From d87449c553262a24df26648633c7c73b2db7dcc6 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 8 Aug 2005 22:15:40 -0700 Subject: Introduce --pretty=oneline format. This introduces --pretty=oneline to git-rev-tree and git-rev-list commands to show only the first line of the commit message, without frills. Signed-off-by: Junio C Hamano --- commit.c | 33 ++++++++++++++++++++++++++------- commit.h | 1 + rev-list.c | 11 +++++++++-- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/commit.c b/commit.c index 3ac421ac34..59e93d4590 100644 --- a/commit.c +++ b/commit.c @@ -33,6 +33,8 @@ enum cmit_fmt get_commit_format(const char *arg) return CMIT_FMT_SHORT; if (!strcmp(arg, "=full")) return CMIT_FMT_FULL; + if (!strcmp(arg, "=oneline")) + return CMIT_FMT_ONELINE; die("invalid --pretty format"); } @@ -350,6 +352,8 @@ static int add_user_info(const char *what, enum cmit_fmt fmt, char *buf, const c unsigned long time; int tz, ret; + if (fmt == CMIT_FMT_ONELINE) + return 0; date = strchr(line, '>'); if (!date) return 0; @@ -373,6 +377,9 @@ static int is_empty_line(const char *line, int len) static int add_parent_info(enum cmit_fmt fmt, char *buf, const char *line, int parents) { int offset = 0; + + if (fmt == CMIT_FMT_ONELINE) + return offset; switch (parents) { case 1: break; @@ -393,6 +400,7 @@ unsigned long pretty_print_commit(enum cmit_fmt fmt, const char *msg, unsigned l int hdr = 1, body = 0; unsigned long offset = 0; int parents = 0; + int indent = (fmt == CMIT_FMT_ONELINE) ? 0 : 4; for (;;) { const char *line = msg; @@ -416,7 +424,8 @@ unsigned long pretty_print_commit(enum cmit_fmt fmt, const char *msg, unsigned l if (hdr) { if (linelen == 1) { hdr = 0; - buf[offset++] = '\n'; + if (fmt != CMIT_FMT_ONELINE) + buf[offset++] = '\n'; continue; } if (fmt == CMIT_FMT_RAW) { @@ -446,13 +455,23 @@ unsigned long pretty_print_commit(enum cmit_fmt fmt, const char *msg, unsigned l } else { body = 1; } - memset(buf + offset, ' ', 4); - memcpy(buf + offset + 4, line, linelen); - offset += linelen + 4; + + memset(buf + offset, ' ', indent); + memcpy(buf + offset + indent, line, linelen); + offset += linelen + indent; + if (fmt == CMIT_FMT_ONELINE) + break; + } + if (fmt == CMIT_FMT_ONELINE) { + /* We do not want the terminating newline */ + if (buf[offset - 1] == '\n') + offset--; + } + else { + /* Make sure there is an EOLN */ + if (buf[offset - 1] != '\n') + buf[offset++] = '\n'; } - /* Make sure there is an EOLN */ - if (buf[offset - 1] != '\n') - buf[offset++] = '\n'; buf[offset] = '\0'; return offset; } diff --git a/commit.h b/commit.h index c24ab21061..5d179d4dc8 100644 --- a/commit.h +++ b/commit.h @@ -40,6 +40,7 @@ enum cmit_fmt { CMIT_FMT_DEFAULT = CMIT_FMT_MEDIUM, CMIT_FMT_SHORT, CMIT_FMT_FULL, + CMIT_FMT_ONELINE, }; extern enum cmit_fmt get_commit_format(const char *arg); diff --git a/rev-list.c b/rev-list.c index 1a03bf7b37..ce5b8b2ad5 100644 --- a/rev-list.c +++ b/rev-list.c @@ -63,7 +63,11 @@ static void show_commit(struct commit *commit) parents = parents->next; } } - putchar('\n'); + if (commit_format == CMIT_FMT_ONELINE) + putchar(' '); + else + putchar('\n'); + if (verbose_header) { static char pretty_header[16384]; pretty_print_commit(commit_format, commit->buffer, ~0, pretty_header, sizeof(pretty_header)); @@ -503,7 +507,10 @@ int main(int argc, char **argv) commit_format = get_commit_format(arg+8); verbose_header = 1; hdr_termination = '\n'; - prefix = "commit "; + if (commit_format == CMIT_FMT_ONELINE) + prefix = ""; + else + prefix = "commit "; continue; } if (!strncmp(arg, "--no-merges", 11)) { -- cgit v1.2.3