Skip to content

Commit

Permalink
pretty: allow tweaking tabwidth in --expand-tabs
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
gitster committed Mar 30, 2016
1 parent 0893eec commit fe37a9c
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 13 deletions.
9 changes: 6 additions & 3 deletions Documentation/pretty-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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>]::
Expand Down
2 changes: 1 addition & 1 deletion commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
15 changes: 8 additions & 7 deletions pretty.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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);
}
Expand Down Expand Up @@ -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');
Expand Down
9 changes: 7 additions & 2 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit fe37a9c

Please sign in to comment.