pretty: enable --expand-tabs by default for selected pretty formats
authorJunio C Hamano <gitster@pobox.com>
Tue, 29 Mar 2016 22:49:24 +0000 (15:49 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 30 Mar 2016 19:39:29 +0000 (12:39 -0700)
"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>
Documentation/pretty-options.txt
builtin/log.c
pretty.c
revision.c
revision.h
t/t4201-shortlog.sh
index d820653784d27c18e3fe910a2aabae5a909c21ce..edbb02f18c13c6fb93e594426f4c3173bdedf603 100644 (file)
@@ -43,9 +43,15 @@ people using 80-column terminals.
        commit may be copied to the output.
 
 --expand-tabs::
        commit may be copied to the output.
 
 --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)
        in the log message before showing it in the output.
        Perform a tab expansion (replace each tab with enough spaces
        to fill to the next display column that is multiple of 8)
        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[]
 --notes[=<ref>]::
 
 ifndef::git-rev-list[]
 --notes[=<ref>]::
index e00cea75cca8bbde28ba45359c28b5a13a1b75e7..e5775ae4d18ecc21baac79490a7ae1c5341eb8df 100644 (file)
@@ -1281,6 +1281,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        git_config(git_format_config, NULL);
        init_revisions(&rev, prefix);
        rev.commit_format = CMIT_FMT_EMAIL;
        git_config(git_format_config, NULL);
        init_revisions(&rev, prefix);
        rev.commit_format = CMIT_FMT_EMAIL;
+       rev.expand_tabs_in_log_default = 0;
        rev.verbose_header = 1;
        rev.diff = 1;
        rev.max_parents = 1;
        rev.verbose_header = 1;
        rev.diff = 1;
        rev.max_parents = 1;
index c8b075d91b9dfdcca505c6576b470c8d03e34ac4..b7938e0ef7e18e09b7fdb3bead2e19f6e24824a1 100644 (file)
--- a/pretty.c
+++ b/pretty.c
@@ -16,6 +16,7 @@ static struct cmt_fmt_map {
        const char *name;
        enum cmit_fmt format;
        int is_tformat;
        const char *name;
        enum cmit_fmt format;
        int is_tformat;
+       int expand_tabs_in_log;
        int is_alias;
        const char *user_format;
 } *commit_formats;
        int is_alias;
        const char *user_format;
 } *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)
 {
        struct cmt_fmt_map builtin_formats[] = {
 static void setup_commit_formats(void)
 {
        struct cmt_fmt_map builtin_formats[] = {
-               { "raw",        CMIT_FMT_RAW,           0 },
-               { "medium",     CMIT_FMT_MEDIUM,        0 },
-               { "short",      CMIT_FMT_SHORT,         0 },
-               { "email",      CMIT_FMT_EMAIL,         0 },
-               { "fuller",     CMIT_FMT_FULLER,        0 },
-               { "full",       CMIT_FMT_FULL,          0 },
-               { "oneline",    CMIT_FMT_ONELINE,       1 }
+               { "raw",        CMIT_FMT_RAW,           0,      0 },
+               { "medium",     CMIT_FMT_MEDIUM,        0,      1 },
+               { "short",      CMIT_FMT_SHORT,         0,      0 },
+               { "email",      CMIT_FMT_EMAIL,         0,      0 },
+               { "fuller",     CMIT_FMT_FULLER,        0,      1 },
+               { "full",       CMIT_FMT_FULL,          0,      1 },
+               { "oneline",    CMIT_FMT_ONELINE,       1,      0 }
        };
        commit_formats_len = ARRAY_SIZE(builtin_formats);
        builtin_formats_len = commit_formats_len;
        };
        commit_formats_len = ARRAY_SIZE(builtin_formats);
        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->use_terminator = commit_format->is_tformat;
 
        rev->commit_format = commit_format->format;
        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) {
                save_user_format(rev, commit_format->user_format,
                                 commit_format->is_tformat);
        if (commit_format->format == CMIT_FMT_USERFORMAT) {
                save_user_format(rev, commit_format->user_format,
                                 commit_format->is_tformat);
@@ -1720,6 +1722,8 @@ void pp_remainder(struct pretty_print_context *pp,
                strbuf_grow(sb, linelen + indent + 20);
                if (indent)
                        pp_handle_indent(pp, sb, indent, line, linelen);
                strbuf_grow(sb, linelen + indent + 20);
                if (indent)
                        pp_handle_indent(pp, sb, indent, line, linelen);
+               else if (pp->expand_tabs_in_log)
+                       strbuf_add_tabexpand(sb, line, linelen);
                else
                        strbuf_add(sb, line, linelen);
                strbuf_addch(sb, '\n');
                else
                        strbuf_add(sb, line, linelen);
                strbuf_addch(sb, '\n');
index e662230ff1f08f4f5a8b233fa45d808b0c22289b..da53b6ce35841c03a541141165fb49297bf68c27 100644 (file)
@@ -1412,8 +1412,10 @@ void init_revisions(struct rev_info *revs, const char *prefix)
        revs->skip_count = -1;
        revs->max_count = -1;
        revs->max_parents = -1;
        revs->skip_count = -1;
        revs->max_count = -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();
        grep_init(&revs->grep_filter, prefix);
 
        init_grep_defaults();
        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);
        } else if (!strcmp(arg, "--expand-tabs")) {
                revs->expand_tabs_in_log = 1;
                get_commit_format(arg+9, revs);
        } else if (!strcmp(arg, "--expand-tabs")) {
                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")) {
                revs->show_notes = 1;
                revs->show_notes_given = 1;
        } else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) {
                revs->show_notes = 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)
                die(_("--first-parent is incompatible with --bisect"));
 
        if (revs->first_parent_only && revs->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;
 }
 
index 40797535fa71d15dca7602cc850cc46218c6df1f..6cc36b49c59cc2265040eaa033e4f0e5c607ea48 100644 (file)
@@ -133,7 +133,6 @@ struct rev_info {
                        show_notes_given:1,
                        show_signature:1,
                        pretty_given:1,
                        show_notes_given:1,
                        show_signature:1,
                        pretty_given:1,
-                       expand_tabs_in_log:1,
                        abbrev_commit:1,
                        abbrev_commit_given:1,
                        zero_commit:1,
                        abbrev_commit:1,
                        abbrev_commit_given:1,
                        zero_commit:1,
@@ -149,6 +148,8 @@ struct rev_info {
                        linear:1;
 
        struct date_mode date_mode;
                        linear:1;
 
        struct date_mode date_mode;
+       int             expand_tabs_in_log; /* unset if negative */
+       int             expand_tabs_in_log_default;
 
        unsigned int    abbrev;
        enum cmit_fmt   commit_format;
 
        unsigned int    abbrev;
        enum cmit_fmt   commit_format;
index 7600a3e3e8f4fab47abd68a29bb06defb6bbce02..2fec94886af7cfad22d1f7f9eaa43c63a57e827b 100755 (executable)
@@ -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 &&
        test_cmp expect out
 '
        GIT_DIR=non-existing git shortlog -w <log >out &&
        test_cmp expect out
 '