pretty: allow tweaking tabwidth in --expand-tabs

When the local convention of the project is to use tab width that is
not 8, it may make sense to allow "git log --expand-tabs=<n>" to
tweak the output to match it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2016-03-29 16:05:39 -07:00
Родитель 0893eec85f
Коммит fe37a9c586
4 изменённых файлов: 22 добавлений и 13 удалений

Просмотреть файл

@ -42,16 +42,19 @@ people using 80-column terminals.
verbatim; this means that invalid sequences in the original
commit may be copied to the output.
--expand-tabs=<n>::
--expand-tabs::
--no-expand-tabs::
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 '<n>')
in the log message before showing it in the output.
`--expand-tabs` is a short-hand for `--expand-tabs=8`, and
`--no-expand-tabs` is a short-hand for `--expand-tabs=0`,
which disables tab expansion.
+
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.
and 'fuller').
ifndef::git-rev-list[]
--notes[=<ref>]::

Просмотреть файл

@ -147,7 +147,7 @@ struct pretty_print_context {
int preserve_subject;
struct date_mode date_mode;
unsigned date_mode_explicit:1;
unsigned expand_tabs_in_log:1;
int expand_tabs_in_log;
int need_8bit_cte;
char *notes_message;
struct reflog_walk_info *reflog_info;

Просмотреть файл

@ -89,11 +89,11 @@ static void setup_commit_formats(void)
{
struct cmt_fmt_map builtin_formats[] = {
{ "raw", CMIT_FMT_RAW, 0, 0 },
{ "medium", CMIT_FMT_MEDIUM, 0, 1 },
{ "medium", CMIT_FMT_MEDIUM, 0, 8 },
{ "short", CMIT_FMT_SHORT, 0, 0 },
{ "email", CMIT_FMT_EMAIL, 0, 0 },
{ "fuller", CMIT_FMT_FULLER, 0, 1 },
{ "full", CMIT_FMT_FULL, 0, 1 },
{ "fuller", CMIT_FMT_FULLER, 0, 8 },
{ "full", CMIT_FMT_FULL, 0, 8 },
{ "oneline", CMIT_FMT_ONELINE, 1, 0 }
};
commit_formats_len = ARRAY_SIZE(builtin_formats);
@ -1645,7 +1645,7 @@ static int pp_utf8_width(const char *start, const char *end)
return width;
}
static void strbuf_add_tabexpand(struct strbuf *sb,
static void strbuf_add_tabexpand(struct strbuf *sb, int tabwidth,
const char *line, int linelen)
{
const char *tab;
@ -1666,7 +1666,7 @@ static void strbuf_add_tabexpand(struct strbuf *sb,
strbuf_add(sb, line, tab - line);
/* .. and the de-tabified tab */
strbuf_addchars(sb, ' ', 8 - (width % 8));
strbuf_addchars(sb, ' ', tabwidth - (width % tabwidth));
/* Skip over the printed part .. */
linelen -= tab + 1 - line;
@ -1692,7 +1692,7 @@ static void pp_handle_indent(struct pretty_print_context *pp,
{
strbuf_addchars(sb, ' ', indent);
if (pp->expand_tabs_in_log)
strbuf_add_tabexpand(sb, line, linelen);
strbuf_add_tabexpand(sb, pp->expand_tabs_in_log, line, linelen);
else
strbuf_add(sb, line, linelen);
}
@ -1723,7 +1723,8 @@ void pp_remainder(struct pretty_print_context *pp,
if (indent)
pp_handle_indent(pp, sb, indent, line, linelen);
else if (pp->expand_tabs_in_log)
strbuf_add_tabexpand(sb, line, linelen);
strbuf_add_tabexpand(sb, pp->expand_tabs_in_log,
line, linelen);
else
strbuf_add(sb, line, linelen);
strbuf_addch(sb, '\n');

Просмотреть файл

@ -1415,7 +1415,7 @@ void init_revisions(struct rev_info *revs, const char *prefix)
revs->expand_tabs_in_log = -1;
revs->commit_format = CMIT_FMT_DEFAULT;
revs->expand_tabs_in_log_default = 1;
revs->expand_tabs_in_log_default = 8;
init_grep_defaults();
grep_init(&revs->grep_filter, prefix);
@ -1918,9 +1918,14 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
revs->pretty_given = 1;
get_commit_format(arg+9, revs);
} else if (!strcmp(arg, "--expand-tabs")) {
revs->expand_tabs_in_log = 1;
revs->expand_tabs_in_log = 8;
} else if (!strcmp(arg, "--no-expand-tabs")) {
revs->expand_tabs_in_log = 0;
} else if (skip_prefix(arg, "--expand-tabs=", &arg)) {
int val;
if (strtol_i(arg, 10, &val) < 0 || val < 0)
die("'%s': not a non-negative integer", arg);
revs->expand_tabs_in_log = val;
} else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) {
revs->show_notes = 1;
revs->show_notes_given = 1;