{"thread":{"id":"31917","subject":"[RFC PATCH 0/2] Localize log output","startedAt":"2012-10-23T12:24:09Z","lastAt":"2012-10-23T12:25:11Z","messageCount":3,"participants":["Peter Krefting"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"201730","messageId":"alpine.DEB.2.00.1210231323480.602@ds9.cixit.se","threadId":"31917","inReplyTo":null,"subject":"[RFC PATCH 0/2] Localize log output","fromName":"Peter Krefting","fromEmail":"peter@softwolves.pp.se","sentAt":"2012-10-23T12:24:09Z","receivedAt":"2012-10-23T12:24:09Z","isPatch":true,"sender":{"key":"peter@softwolves.pp.se","avatar":"https://avatars.githubusercontent.com/u/990764?v=4"},"body":"In v1.8.0, I saw a regression in, among other, \"git show --stat\" in\nthat it would no longer output the diffstat in Swedish. This turned\nout to be intentional, to fix format-patch and friends, but I liked\nthe old behaviour.\n\nThis series tries to fix that, and related code such as \"git log\",\nwhile making sure that \"git format-patch\" still outputs in English.\n\nI am posting this as a RFC, as I might very well have broken something\nelse in the process, from not knowing the code well enough.\n\nThe branch is also available from\nhttps://github.com/nafmo/git-l10n-sv/commits/fix-diff-translation-20121023-1.8.0\nwith an updated Swedish translation.\n\nPeter Krefting (2):\n   Use localized date in log output\n   Localize diff and log output\n\n  builtin/apply.c  |  2 +-\n  builtin/commit.c |  4 +--\n  builtin/log.c    |  6 ++--\n  commit.h         |  3 +-\n  date.c           |  4 ++-\n  diff.c           | 22 +++++++++-----\n  diff.h           |  5 +++-\n  gettext.c        |  1 +\n  log-tree.c       | 11 +++++--\n  pretty.c         | 87 +++++++++++++++++++++++++++++++++++++++++++-------------\n  strbuf.c         | 10 +++++++\n  strbuf.h         |  1 +\n  12 files changed, 119 insertions(+), 37 deletions(-)\n\n-- \n1.8.0\n"},{"id":"201731","messageId":"alpine.DEB.2.00.1210231325010.705@ds9.cixit.se","threadId":"31917","inReplyTo":"alpine.DEB.2.00.1210231323480.602@ds9.cixit.se","subject":"[RFC PATCH 1/2] Use localized date in log output","fromName":"Peter Krefting","fromEmail":"peter@softwolves.pp.se","sentAt":"2012-10-23T12:25:05Z","receivedAt":"2012-10-23T12:25:05Z","isPatch":true,"sender":{"key":"peter@softwolves.pp.se","avatar":"https://avatars.githubusercontent.com/u/990764?v=4"},"body":"When outputting a normal log, without having specified which date format\nto use, we should output the current user locale's default format. Do this\nby initializing LC_TIME properly and using strftime() to format the date.\n---\n  date.c    |  4 +++-\n  gettext.c |  1 +\n  strbuf.c  | 10 ++++++++++\n  strbuf.h  |  1 +\n  4 files changed, 15 insertions(+), 1 deletion(-)\n\ndiff --git a/date.c b/date.c\nindex 57331ed..88f928c 100644\n--- a/date.c\n+++ b/date.c\n@@ -203,7 +203,7 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode)\n  \t\t\tweekday_names[tm->tm_wday], tm->tm_mday,\n  \t\t\tmonth_names[tm->tm_mon], tm->tm_year + 1900,\n  \t\t\ttm->tm_hour, tm->tm_min, tm->tm_sec, tz);\n-\telse\n+\telse if (mode == DATE_RAW)\n  \t\tstrbuf_addf(&timebuf, \"%.3s %.3s %d %02d:%02d:%02d %d%c%+05d\",\n  \t\t\t\tweekday_names[tm->tm_wday],\n  \t\t\t\tmonth_names[tm->tm_mon],\n@@ -212,6 +212,8 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode)\n  \t\t\t\ttm->tm_year + 1900,\n  \t\t\t\t(mode == DATE_LOCAL) ? 0 : ' ',\n  \t\t\t\ttz);\n+\telse\n+\t\tstrbuf_strftime(&timebuf,\"%c\",tm);\n  \treturn timebuf.buf;\n  }\n\ndiff --git a/gettext.c b/gettext.c\nindex 71e9545..a87d144 100644\n--- a/gettext.c\n+++ b/gettext.c\n@@ -126,6 +126,7 @@ void git_setup_gettext(void)\n  \t\tpodir = GIT_LOCALE_PATH;\n  \tbindtextdomain(\"git\", podir);\n  \tsetlocale(LC_MESSAGES, \"\");\n+\tsetlocale(LC_TIME, \"\");\n  \tinit_gettext_charset(\"git\");\n  \ttextdomain(\"git\");\n  }\ndiff --git a/strbuf.c b/strbuf.c\nindex 0510f76..d393de9 100644\n--- a/strbuf.c\n+++ b/strbuf.c\n@@ -228,6 +228,16 @@ void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap)\n  \tstrbuf_setlen(sb, sb->len + len);\n  }\n\n+void strbuf_strftime(struct strbuf *sb, const char *fmt, struct tm *tm)\n+{\n+\tint len;\n+\n+\tif (!strbuf_avail(sb))\n+\t\tstrbuf_grow(sb, 256);\n+\tlen = strftime(sb->buf + sb->len, sb->alloc - sb->len, fmt, tm);\n+\tstrbuf_setlen(sb, sb->len + len);\n+}\n+\n  void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,\n  \t\t   void *context)\n  {\ndiff --git a/strbuf.h b/strbuf.h\nindex be941ee..9ca1d59 100644\n--- a/strbuf.h\n+++ b/strbuf.h\n@@ -99,6 +99,7 @@ __attribute__((format (printf,2,3)))\n  extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);\n  __attribute__((format (printf,2,0)))\n  extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap);\n+extern void strbuf_strfime(struct strbuf *sb, const char *fmt, struct tm *tm);\n\n  extern void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, size_t size);\n\n-- \n1.8.0\n"},{"id":"201732","messageId":"alpine.DEB.2.00.1210231325060.705@ds9.cixit.se","threadId":"31917","inReplyTo":"alpine.DEB.2.00.1210231323480.602@ds9.cixit.se","subject":"[RFC PATCH 2/2] Localize diff and log output","fromName":"Peter Krefting","fromEmail":"peter@softwolves.pp.se","sentAt":"2012-10-23T12:25:11Z","receivedAt":"2012-10-23T12:25:11Z","isPatch":true,"sender":{"key":"peter@softwolves.pp.se","avatar":"https://avatars.githubusercontent.com/u/990764?v=4"},"body":"The output of \"git diff --stat\", \"git show --stat\" and \"git log\" should be\ntranslated to the local user language. The output of \"git format-patch\"\nshould not, however. Add localization where needed, and add a flag for\nmaking sure that \"format-patch\"'s output remains in English.\n\nThis partially reverts commit 218adaaaa064c436115dbcd5705a0e2c42e90a25 (Revert\ndiffstat back to English; 2012-09-13).\n---\n  builtin/apply.c  |  2 +-\n  builtin/commit.c |  4 +--\n  builtin/log.c    |  6 ++--\n  commit.h         |  3 +-\n  diff.c           | 22 +++++++++-----\n  diff.h           |  5 +++-\n  log-tree.c       | 11 +++++--\n  pretty.c         | 87 +++++++++++++++++++++++++++++++++++++++++++-------------\n  8 files changed, 104 insertions(+), 36 deletions(-)\n\ndiff --git a/builtin/apply.c b/builtin/apply.c\nindex 156b3ce..9ead305 100644\n--- a/builtin/apply.c\n+++ b/builtin/apply.c\n@@ -3644,7 +3644,7 @@ static void stat_patch_list(struct patch *patch)\n  \t\tshow_stats(patch);\n  \t}\n\n-\tprint_stat_summary(stdout, files, adds, dels);\n+\tprint_stat_summary(stdout, files, adds, dels, NULL);\n  }\n\n  static void numstat_patch_list(struct patch *patch)\ndiff --git a/builtin/commit.c b/builtin/commit.c\nindex a17a5df..406346e 100644\n--- a/builtin/commit.c\n+++ b/builtin/commit.c\n@@ -1248,11 +1248,11 @@ static void print_summary(const char *prefix, const unsigned char *sha1,\n  \tformat_commit_message(commit, \"%an <%ae>\", &author_ident, &pctx);\n  \tformat_commit_message(commit, \"%cn <%ce>\", &committer_ident, &pctx);\n  \tif (strbuf_cmp(&author_ident, &committer_ident)) {\n-\t\tstrbuf_addstr(&format, \"\\n Author: \");\n+\t\tstrbuf_addstr(&format, _(\"\\n Author: \"));\n  \t\tstrbuf_addbuf_percentquote(&format, &author_ident);\n  \t}\n  \tif (!user_ident_sufficiently_given()) {\n-\t\tstrbuf_addstr(&format, \"\\n Committer: \");\n+\t\tstrbuf_addstr(&format, _(\"\\n Committer: \"));\n  \t\tstrbuf_addbuf_percentquote(&format, &committer_ident);\n  \t\tif (advice_implicit_identity) {\n  \t\t\tstrbuf_addch(&format, '\\n');\ndiff --git a/builtin/log.c b/builtin/log.c\nindex 09cf43e..0c579d7 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -381,7 +381,7 @@ static void show_tagger(char *buf, int len, struct rev_info *rev)\n\n  \tpp.fmt = rev->commit_format;\n  \tpp.date_mode = rev->date_mode;\n-\tpp_user_info(&pp, \"Tagger\", &out, buf, get_log_output_encoding());\n+\tpp_user_info(&pp, _(\"Tagger\"), _(\"TaggerDate\"), 0, &out, buf, get_log_output_encoding());\n  \tprintf(\"%s\", out.buf);\n  \tstrbuf_release(&out);\n  }\n@@ -804,7 +804,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,\n  \tmsg = body;\n  \tpp.fmt = CMIT_FMT_EMAIL;\n  \tpp.date_mode = DATE_RFC2822;\n-\tpp_user_info(&pp, NULL, &sb, committer, encoding);\n+\tpp_user_info(&pp, NULL, NULL, 0, &sb, committer, encoding);\n  \tpp_title_line(&pp, &msg, &sb, encoding, need_8bit_cte);\n  \tpp_remainder(&pp, &msg, &sb, 0);\n  \tadd_branch_description(&sb, branch_name);\n@@ -1222,6 +1222,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n\n  \t/* Always generate a patch */\n  \trev.diffopt.output_format |= DIFF_FORMAT_PATCH;\n+\t/* Never translate format-patch output */\n+\trev.diffopt.output_format |= DIFF_FORMAT_ENGLISH;\n\n  \tif (!DIFF_OPT_TST(&rev.diffopt, TEXT) && !no_binary_diff)\n  \t\tDIFF_OPT_SET(&rev.diffopt, BINARY);\ndiff --git a/commit.h b/commit.h\nindex 9f21313..2a9ac6a 100644\n--- a/commit.h\n+++ b/commit.h\n@@ -114,7 +114,8 @@ extern void pretty_print_commit(const struct pretty_print_context *pp,\n  extern void pp_commit_easy(enum cmit_fmt fmt, const struct commit *commit,\n  \t\t\t   struct strbuf *sb);\n  void pp_user_info(const struct pretty_print_context *pp,\n-\t\t  const char *what, struct strbuf *sb,\n+\t\t  const char *what, const char *whatdate, int extra_padding,\n+\t\t  struct strbuf *sb,\n  \t\t  const char *line, const char *encoding);\n  void pp_title_line(const struct pretty_print_context *pp,\n  \t\t   const char **msg_p,\ndiff --git a/diff.c b/diff.c\nindex 35d3f07..ef655d1 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -1391,18 +1391,22 @@ static void fill_print_name(struct diffstat_file *file)\n  \tfile->print_name = pname;\n  }\n\n-int print_stat_summary(FILE *fp, int files, int insertions, int deletions)\n+int print_stat_summary(FILE *fp, int files, int insertions, int deletions, struct diff_options *options)\n  {\n  \tstruct strbuf sb = STRBUF_INIT;\n  \tint ret;\n\n+\tint english = options && !!(options->output_format & DIFF_FORMAT_ENGLISH);\n+\n  \tif (!files) {\n  \t\tassert(insertions == 0 && deletions == 0);\n-\t\treturn fprintf(fp, \"%s\\n\", \" 0 files changed\");\n+\t\treturn fprintf(fp, \"%s\\n\", english ? \" 0 files changed\"\n+\t\t                                   : _(\" 0 files changed\"));\n  \t}\n\n  \tstrbuf_addf(&sb,\n-\t\t    (files == 1) ? \" %d file changed\" : \" %d files changed\",\n+\t\t    english ? ((files == 1) ? \" %d file changed\" : \" %d files changed\")\n+\t\t            : Q_(\" %d file changed\", \" %d files changed\", files),\n  \t\t    files);\n\n  \t/*\n@@ -1419,7 +1423,9 @@ int print_stat_summary(FILE *fp, int files, int insertions, int deletions)\n  \t\t * do not translate it.\n  \t\t */\n  \t\tstrbuf_addf(&sb,\n-\t\t\t    (insertions == 1) ? \", %d insertion(+)\" : \", %d insertions(+)\",\n+\t\t\t    english ? ((insertions == 1) ? \", %d insertion(+)\" : \", %d insertions(+)\")\n+\t\t\t            : Q_(\", %d insertion(+)\", \", %d insertions(+)\",\n+\t\t\t                 insertions),\n  \t\t\t    insertions);\n  \t}\n\n@@ -1429,7 +1435,9 @@ int print_stat_summary(FILE *fp, int files, int insertions, int deletions)\n  \t\t * do not translate it.\n  \t\t */\n  \t\tstrbuf_addf(&sb,\n-\t\t\t    (deletions == 1) ? \", %d deletion(-)\" : \", %d deletions(-)\",\n+\t\t\t    english ? ((deletions == 1) ? \", %d deletion(-)\" : \", %d deletions(-)\")\n+\t\t\t            : Q_(\", %d deletion(-)\", \", %d deletions(-)\",\n+\t\t\t                 deletions),\n  \t\t\t    deletions);\n  \t}\n  \tstrbuf_addch(&sb, '\\n');\n@@ -1681,7 +1689,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)\n  \t\textra_shown = 1;\n  \t}\n  \tfprintf(options->file, \"%s\", line_prefix);\n-\tprint_stat_summary(options->file, total_files, adds, dels);\n+\tprint_stat_summary(options->file, total_files, adds, dels, options);\n  }\n\n  static void show_shortstats(struct diffstat_t *data, struct diff_options *options)\n@@ -1710,7 +1718,7 @@ static void show_shortstats(struct diffstat_t *data, struct diff_options *option\n  \t\t\t\toptions->output_prefix_data);\n  \t\tfprintf(options->file, \"%s\", msg->buf);\n  \t}\n-\tprint_stat_summary(options->file, total_files, adds, dels);\n+\tprint_stat_summary(options->file, total_files, adds, dels, options);\n  }\n\n  static void show_numstat(struct diffstat_t *data, struct diff_options *options)\ndiff --git a/diff.h b/diff.h\nindex a658f85..73684f7 100644\n--- a/diff.h\n+++ b/diff.h\n@@ -54,6 +54,9 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data)\n\n  #define DIFF_FORMAT_CALLBACK\t0x1000\n\n+/* Never output translated content, used by format-patch et.al */\n+#define DIFF_FORMAT_ENGLISH\t\t0x2000\n+\n  #define DIFF_OPT_RECURSIVE           (1 <<  0)\n  #define DIFF_OPT_TREE_IN_RECURSIVE   (1 <<  1)\n  #define DIFF_OPT_BINARY              (1 <<  2)\n@@ -334,6 +337,6 @@ extern struct userdiff_driver *get_textconv(struct diff_filespec *one);\n  extern int parse_rename_score(const char **cp_p);\n\n  extern int print_stat_summary(FILE *fp, int files,\n-\t\t\t      int insertions, int deletions);\n+\t\t\t      int insertions, int deletions, struct diff_options *options);\n\n  #endif /* DIFF_H */\ndiff --git a/log-tree.c b/log-tree.c\nindex c894930..0f68413 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -601,8 +601,12 @@ void show_log(struct rev_info *opt)\n  \t\t\t\t\t&ctx.need_8bit_cte);\n  \t} else if (opt->commit_format != CMIT_FMT_USERFORMAT) {\n  \t\tfputs(diff_get_color_opt(&opt->diffopt, DIFF_COMMIT), stdout);\n+\t\t/*\n+\t\t * TRANSLATORS: This string precedes the commit identifier in git log\n+\t\t * output.\n+\t\t */\n  \t\tif (opt->commit_format != CMIT_FMT_ONELINE)\n-\t\t\tfputs(\"commit \", stdout);\n+\t\t\tfputs(_(\"commit \"), stdout);\n\n  \t\tif (!opt->graph)\n  \t\t\tput_revision_mark(opt, commit);\n@@ -612,8 +616,11 @@ void show_log(struct rev_info *opt)\n  \t\t\tshow_parents(commit, abbrev_commit);\n  \t\tif (opt->children.name)\n  \t\t\tshow_children(opt, commit, abbrev_commit);\n+\t\t/*\n+\t\t * TRANSLATORS: %s is a commit identifier.\n+\t\t */\n  \t\tif (parent)\n-\t\t\tprintf(\" (from %s)\",\n+\t\t\tprintf(_(\" (from %s)\"),\n  \t\t\t       find_unique_abbrev(parent->object.sha1,\n  \t\t\t\t\t\t  abbrev_commit));\n  \t\tshow_decorations(opt, commit);\ndiff --git a/pretty.c b/pretty.c\nindex 8b1ea9f..8623bbd 100644\n--- a/pretty.c\n+++ b/pretty.c\n@@ -320,7 +320,8 @@ needquote:\n  }\n\n  void pp_user_info(const struct pretty_print_context *pp,\n-\t\t  const char *what, struct strbuf *sb,\n+\t\t  const char *what, const char *whatdate, int extra_padding,\n+\t\t  struct strbuf *sb,\n  \t\t  const char *line, const char *encoding)\n  {\n  \tchar *date;\n@@ -365,24 +366,37 @@ void pp_user_info(const struct pretty_print_context *pp,\n  \t\t}\n  \t\tstrbuf_add(sb, name_tail, namelen - display_name_length);\n  \t\tstrbuf_addch(sb, '\\n');\n-\t} else {\n-\t\tstrbuf_addf(sb, \"%s: %.*s%.*s\\n\", what,\n-\t\t\t      (pp->fmt == CMIT_FMT_FULLER) ? 4 : 0,\n-\t\t\t      \"    \", namelen, line);\n-\t}\n-\tswitch (pp->fmt) {\n-\tcase CMIT_FMT_MEDIUM:\n-\t\tstrbuf_addf(sb, \"Date:   %s\\n\", show_date(time, tz, pp->date_mode));\n-\t\tbreak;\n-\tcase CMIT_FMT_EMAIL:\n  \t\tstrbuf_addf(sb, \"Date: %s\\n\", show_date(time, tz, DATE_RFC2822));\n-\t\tbreak;\n-\tcase CMIT_FMT_FULLER:\n-\t\tstrbuf_addf(sb, \"%sDate: %s\\n\", what, show_date(time, tz, pp->date_mode));\n-\t\tbreak;\n-\tdefault:\n-\t\t/* notin' */\n-\t\tbreak;\n+\t} else {\n+\t\t/*\n+\t\t * Calculate the padding to use to get the two fields we are outputting\n+\t\t * here aligned. We are passed the padding we need to get these fields\n+\t\t * aligned with whatever fields are output in other calls to\n+\t\t * pp_user_info().\n+\t\t *\n+\t\t * FIXME: strlen() used to measure string width; should use mblen()\n+\t\t * or similar, but since that is expensive, it should be done further\n+\t\t * up the callstack, not on each commit. */\n+\t\tint datelen = 0, whatlen = 0;\n+\n+\t\tif (pp->fmt != CMIT_FMT_FULLER)\n+\t\t\twhatdate = _(\"Date\");\n+\t\tif (pp->fmt == CMIT_FMT_MEDIUM || pp->fmt == CMIT_FMT_FULLER) {\n+\t\t\tdatelen = whatdate ? strlen(whatdate) : 0;\n+\t\t\twhatlen = what ? strlen(what) : 0;\n+\t\t}\n+\n+\t\tstrbuf_addf(sb, \"%s: %.*s%.*s%.*s\\n\", what,\n+\t\t            (datelen > whatlen ? datelen - whatlen : 0), \"                \",\n+\t\t            extra_padding, \"                \",\n+\t\t\t        namelen, line);\n+\n+ \t\tif (pp->fmt == CMIT_FMT_MEDIUM || pp->fmt == CMIT_FMT_FULLER) {\n+\t\t\tstrbuf_addf(sb, \"%s: %.*s%.*s%s\\n\", whatdate,\n+\t\t\t\t        (whatlen > datelen ? whatlen - datelen : 0), \"                \",\n+\t\t\t            extra_padding, \"                \",\n+\t\t\t            show_date(time, tz, pp->date_mode));\n+\t\t}\n  \t}\n  }\n\n@@ -1218,6 +1232,39 @@ static void pp_header(const struct pretty_print_context *pp,\n  \t\t      struct strbuf *sb)\n  {\n  \tint parents_shown = 0;\n+\tconst char *author_label = _(\"Author\");\n+\tconst char *authordate_label = _(\"AuthorDate\");\n+\tconst char *commit_label = _(\"Commit\");\n+\tconst char *commitdate_label = _(\"CommitDate\");\n+\tint extra_padding_author = 0, extra_padding_commit = 0;\n+\n+\t/*\n+\t * Calculate the padding to use to get all the fields aligned.\n+\t *\n+\t * pp_user_info() makes sure to align the Author and Date strings, but\n+\t * we aso need to align between the Author and Commit block (if outputting\n+\t * FULL or FULLER\n+\t *\n+\t * FIXME: strlen() used to measure string width; should use mblen()\n+\t * or similar, but since that is expensive, it should be done further\n+\t * up the callstack, not on each commit. */\n+\tif (pp->fmt == CMIT_FMT_FULL || pp->fmt == CMIT_FMT_FULLER) {\n+\t\tint author_label_width = strlen(author_label);\n+\t\tint commit_label_width = strlen(commit_label);\n+\n+\t\tif (pp->fmt == CMIT_FMT_FULLER) {\n+\t\t\tint authordate_label_width = strlen(authordate_label);\n+\t\t\tint commitdate_label_width = strlen(commitdate_label);\n+\t\t\tif (authordate_label_width > author_label_width)\n+\t\t\t\tauthor_label_width = authordate_label_width;\n+\t\t\tif (commitdate_label_width > commit_label_width)\n+\t\t\t\tcommit_label_width = commitdate_label_width;\n+\t\t}\n+\t\textra_padding_author = commit_label_width > author_label_width\n+\t\t\t? commit_label_width - author_label_width : 0; \n+\t\textra_padding_commit = author_label_width > commit_label_width\n+\t\t\t? author_label_width - commit_label_width : 0; \n+\t}\n\n  \tfor (;;) {\n  \t\tconst char *line = *msg_p;\n@@ -1262,12 +1309,12 @@ static void pp_header(const struct pretty_print_context *pp,\n  \t\t */\n  \t\tif (!memcmp(line, \"author \", 7)) {\n  \t\t\tstrbuf_grow(sb, linelen + 80);\n-\t\t\tpp_user_info(pp, \"Author\", sb, line + 7, encoding);\n+\t\t\tpp_user_info(pp, author_label, authordate_label, extra_padding_author, sb, line + 7, encoding);\n  \t\t}\n  \t\tif (!memcmp(line, \"committer \", 10) &&\n  \t\t    (pp->fmt == CMIT_FMT_FULL || pp->fmt == CMIT_FMT_FULLER)) {\n  \t\t\tstrbuf_grow(sb, linelen + 80);\n-\t\t\tpp_user_info(pp, \"Commit\", sb, line + 10, encoding);\n+\t\t\tpp_user_info(pp, commit_label, commitdate_label, extra_padding_commit, sb, line + 10, encoding);\n  \t\t}\n  \t}\n  }\n-- \n1.8.0\n"}]}