pretty: enable --expand-tabs by default for selected pretty formats

"git log --pretty={medium,full,fuller}" and "git log" by default
prepend 4 spaces to the log message, so it makes sense to enable
the new "expand-tabs" facility by default for these formats.
Add --no-expand-tabs option to override the new default.

The change alone breaks a test in t4201 that runs "git shortlog"
on the output from "git log", and expects that the output from
"git log" does not do such a tab expansion.  Adjust the test to
explicitly disable expand-tabs with --no-expand-tabs.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2016-03-29 15:49:24 -07:00
parent 7cc13c717b
commit 0893eec85f
6 changed files with 28 additions and 9 deletions

View File

@ -43,9 +43,15 @@ people using 80-column terminals.
commit may be copied to the output. commit may be copied to the output.
--expand-tabs:: --expand-tabs::
--no-expand-tabs::
Perform a tab expansion (replace each tab with enough spaces Perform a tab expansion (replace each tab with enough spaces
to fill to the next display column that is multiple of 8) to fill to the next display column that is multiple of 8)
in the log message before showing it in the output. in the log message before showing it in the output.
+
By default, tabs are expanded in pretty formats that indent the log
message by 4 spaces (i.e. 'medium', which is the default, 'full',
and 'fuller'). `--no-expand-tabs` option can be used to disable
this.
ifndef::git-rev-list[] ifndef::git-rev-list[]
--notes[=<ref>]:: --notes[=<ref>]::

View File

@ -1281,6 +1281,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
git_config(git_format_config, NULL); git_config(git_format_config, NULL);
init_revisions(&rev, prefix); init_revisions(&rev, prefix);
rev.commit_format = CMIT_FMT_EMAIL; rev.commit_format = CMIT_FMT_EMAIL;
rev.expand_tabs_in_log_default = 0;
rev.verbose_header = 1; rev.verbose_header = 1;
rev.diff = 1; rev.diff = 1;
rev.max_parents = 1; rev.max_parents = 1;

View File

@ -16,6 +16,7 @@ static struct cmt_fmt_map {
const char *name; const char *name;
enum cmit_fmt format; enum cmit_fmt format;
int is_tformat; int is_tformat;
int expand_tabs_in_log;
int is_alias; int is_alias;
const char *user_format; const char *user_format;
} *commit_formats; } *commit_formats;
@ -87,13 +88,13 @@ static int git_pretty_formats_config(const char *var, const char *value, void *c
static void setup_commit_formats(void) static void setup_commit_formats(void)
{ {
struct cmt_fmt_map builtin_formats[] = { struct cmt_fmt_map builtin_formats[] = {
{ "raw", CMIT_FMT_RAW, 0 }, { "raw", CMIT_FMT_RAW, 0, 0 },
{ "medium", CMIT_FMT_MEDIUM, 0 }, { "medium", CMIT_FMT_MEDIUM, 0, 1 },
{ "short", CMIT_FMT_SHORT, 0 }, { "short", CMIT_FMT_SHORT, 0, 0 },
{ "email", CMIT_FMT_EMAIL, 0 }, { "email", CMIT_FMT_EMAIL, 0, 0 },
{ "fuller", CMIT_FMT_FULLER, 0 }, { "fuller", CMIT_FMT_FULLER, 0, 1 },
{ "full", CMIT_FMT_FULL, 0 }, { "full", CMIT_FMT_FULL, 0, 1 },
{ "oneline", CMIT_FMT_ONELINE, 1 } { "oneline", CMIT_FMT_ONELINE, 1, 0 }
}; };
commit_formats_len = ARRAY_SIZE(builtin_formats); commit_formats_len = ARRAY_SIZE(builtin_formats);
builtin_formats_len = commit_formats_len; builtin_formats_len = commit_formats_len;
@ -172,6 +173,7 @@ void get_commit_format(const char *arg, struct rev_info *rev)
rev->commit_format = commit_format->format; rev->commit_format = commit_format->format;
rev->use_terminator = commit_format->is_tformat; rev->use_terminator = commit_format->is_tformat;
rev->expand_tabs_in_log_default = commit_format->expand_tabs_in_log;
if (commit_format->format == CMIT_FMT_USERFORMAT) { if (commit_format->format == CMIT_FMT_USERFORMAT) {
save_user_format(rev, commit_format->user_format, save_user_format(rev, commit_format->user_format,
commit_format->is_tformat); commit_format->is_tformat);
@ -1720,6 +1722,8 @@ void pp_remainder(struct pretty_print_context *pp,
strbuf_grow(sb, linelen + indent + 20); strbuf_grow(sb, linelen + indent + 20);
if (indent) if (indent)
pp_handle_indent(pp, sb, indent, line, linelen); pp_handle_indent(pp, sb, indent, line, linelen);
else if (pp->expand_tabs_in_log)
strbuf_add_tabexpand(sb, line, linelen);
else else
strbuf_add(sb, line, linelen); strbuf_add(sb, line, linelen);
strbuf_addch(sb, '\n'); strbuf_addch(sb, '\n');

View File

@ -1412,8 +1412,10 @@ void init_revisions(struct rev_info *revs, const char *prefix)
revs->skip_count = -1; revs->skip_count = -1;
revs->max_count = -1; revs->max_count = -1;
revs->max_parents = -1; revs->max_parents = -1;
revs->expand_tabs_in_log = -1;
revs->commit_format = CMIT_FMT_DEFAULT; revs->commit_format = CMIT_FMT_DEFAULT;
revs->expand_tabs_in_log_default = 1;
init_grep_defaults(); init_grep_defaults();
grep_init(&revs->grep_filter, prefix); grep_init(&revs->grep_filter, prefix);
@ -1917,6 +1919,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
get_commit_format(arg+9, revs); get_commit_format(arg+9, revs);
} else if (!strcmp(arg, "--expand-tabs")) { } else if (!strcmp(arg, "--expand-tabs")) {
revs->expand_tabs_in_log = 1; revs->expand_tabs_in_log = 1;
} else if (!strcmp(arg, "--no-expand-tabs")) {
revs->expand_tabs_in_log = 0;
} else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) { } else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) {
revs->show_notes = 1; revs->show_notes = 1;
revs->show_notes_given = 1; revs->show_notes_given = 1;
@ -2390,6 +2394,9 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
if (revs->first_parent_only && revs->bisect) if (revs->first_parent_only && revs->bisect)
die(_("--first-parent is incompatible with --bisect")); die(_("--first-parent is incompatible with --bisect"));
if (revs->expand_tabs_in_log < 0)
revs->expand_tabs_in_log = revs->expand_tabs_in_log_default;
return left; return left;
} }

View File

@ -133,7 +133,6 @@ struct rev_info {
show_notes_given:1, show_notes_given:1,
show_signature:1, show_signature:1,
pretty_given:1, pretty_given:1,
expand_tabs_in_log:1,
abbrev_commit:1, abbrev_commit:1,
abbrev_commit_given:1, abbrev_commit_given:1,
zero_commit:1, zero_commit:1,
@ -149,6 +148,8 @@ struct rev_info {
linear:1; linear:1;
struct date_mode date_mode; struct date_mode date_mode;
int expand_tabs_in_log; /* unset if negative */
int expand_tabs_in_log_default;
unsigned int abbrev; unsigned int abbrev;
enum cmit_fmt commit_format; enum cmit_fmt commit_format;

View File

@ -115,7 +115,7 @@ EOF
' '
test_expect_success !MINGW 'shortlog from non-git directory' ' test_expect_success !MINGW 'shortlog from non-git directory' '
git log HEAD >log && git log --no-expand-tabs HEAD >log &&
GIT_DIR=non-existing git shortlog -w <log >out && GIT_DIR=non-existing git shortlog -w <log >out &&
test_cmp expect out test_cmp expect out
' '