Merge branch 'js/log-abbrev-commit-config'
authorJunio C Hamano <gitster@pobox.com>
Wed, 25 May 2011 23:23:22 +0000 (16:23 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 25 May 2011 23:23:22 +0000 (16:23 -0700)
* js/log-abbrev-commit-config:
Add log.abbrevCommit config variable
"git log -h": typofix misspelled 'suppress'

Documentation/config.txt
Documentation/pretty-options.txt
builtin/log.c
revision.c
revision.h
t/t4202-log.sh
index 1a060ecbc8b137bff3df2c689d7e803937c66d18..6b937771994f5b0a532b6f2cc522a9d3f35c9c09 100644 (file)
@@ -1315,6 +1315,11 @@ interactive.singlekey::
        setting is silently ignored if portable keystroke input
        is not available.
 
+log.abbrevCommit::
+       If true, makes linkgit:git-log[1], linkgit:git-show[1], and
+       linkgit:git-whatchanged[1] assume `\--abbrev-commit`. You may
+       override this option with `\--no-abbrev-commit`.
+
 log.date::
        Set the default date-time mode for the 'log' command.
        Setting a value for log.date is similar to using 'git log''s
index d5c977262a818683ebd47d77d37a26c66737119f..2a3dc8664f16957a05bc4d81824d7995517ac89c 100644 (file)
@@ -19,6 +19,11 @@ configuration (see linkgit:git-config[1]).
 This should make "--pretty=oneline" a whole lot more readable for
 people using 80-column terminals.
 
+--no-abbrev-commit::
+       Show the full 40-byte hexadecimal commit object name. This negates
+       `--abbrev-commit` and those options which imply it such as
+       "--oneline". It also overrides the 'log.abbrevCommit' variable.
+
 --oneline::
        This is a shorthand for "--pretty=oneline --abbrev-commit"
        used together.
index f6219909a787ae355a43e39974140a36848ab1d6..27849dc91de03a46d4c9357ca0d7b3f79188cc98 100644 (file)
@@ -23,6 +23,7 @@
 /* Set a default date-time format for git log ("log.date" config variable) */
 static const char *default_date_mode = NULL;
 
+static int default_abbrev_commit;
 static int default_show_root = 1;
 static int decoration_style;
 static int decoration_given;
@@ -77,6 +78,7 @@ static void cmd_log_init_defaults(struct rev_info *rev)
                get_commit_format(fmt_pretty, rev);
        rev->verbose_header = 1;
        DIFF_OPT_SET(&rev->diffopt, RECURSIVE);
+       rev->abbrev_commit = default_abbrev_commit;
        rev->show_root_diff = default_show_root;
        rev->subject_prefix = fmt_patch_subject_prefix;
        DIFF_OPT_SET(&rev->diffopt, ALLOW_TEXTCONV);
@@ -92,7 +94,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
        int quiet = 0, source = 0;
 
        const struct option builtin_log_options[] = {
-               OPT_BOOLEAN(0, "quiet", &quiet, "supress diff output"),
+               OPT_BOOLEAN(0, "quiet", &quiet, "suppress diff output"),
                OPT_BOOLEAN(0, "source", &source, "show source"),
                { OPTION_CALLBACK, 0, "decorate", NULL, NULL, "decorate options",
                  PARSE_OPT_OPTARG, decorate_callback},
@@ -129,13 +131,16 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
        if (source)
                rev->show_source = 1;
 
-       /*
-        * defeat log.decorate configuration interacting with --pretty=raw
-        * from the command line.
-        */
-       if (!decoration_given && rev->pretty_given
-           && rev->commit_format == CMIT_FMT_RAW)
-               decoration_style = 0;
+       if (rev->pretty_given && rev->commit_format == CMIT_FMT_RAW) {
+               /*
+                * "log --pretty=raw" is special; ignore UI oriented
+                * configuration variables such as decoration.
+                */
+               if (!decoration_given)
+                       decoration_style = 0;
+               if (!rev->abbrev_commit_given)
+                       rev->abbrev_commit = 0;
+       }
 
        if (decoration_style) {
                rev->show_decorations = 1;
@@ -323,6 +328,10 @@ static int git_log_config(const char *var, const char *value, void *cb)
                return git_config_string(&fmt_pretty, var, value);
        if (!strcmp(var, "format.subjectprefix"))
                return git_config_string(&fmt_patch_subject_prefix, var, value);
+       if (!strcmp(var, "log.abbrevcommit")) {
+               default_abbrev_commit = git_config_bool(var, value);
+               return 0;
+       }
        if (!strcmp(var, "log.date"))
                return git_config_string(&default_date_mode, var, value);
        if (!strcmp(var, "log.decorate")) {
@@ -516,11 +525,11 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
 
        init_revisions(&rev, prefix);
        init_reflog_walk(&rev.reflog_info);
-       rev.abbrev_commit = 1;
        rev.verbose_header = 1;
        memset(&opt, 0, sizeof(opt));
        opt.def = "HEAD";
        cmd_log_init_defaults(&rev);
+       rev.abbrev_commit = 1;
        rev.commit_format = CMIT_FMT_ONELINE;
        rev.use_terminator = 1;
        rev.always_show_header = 1;
index 7934b2f68bbaf9327ff3957aaa3eb316c2a7fb05..7588a60b8e8ff55e81f29ff09bcde1750f8d0852 100644 (file)
@@ -1428,6 +1428,9 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                        revs->abbrev = 40;
        } else if (!strcmp(arg, "--abbrev-commit")) {
                revs->abbrev_commit = 1;
+               revs->abbrev_commit_given = 1;
+       } else if (!strcmp(arg, "--no-abbrev-commit")) {
+               revs->abbrev_commit = 0;
        } else if (!strcmp(arg, "--full-diff")) {
                revs->diff = 1;
                revs->full_diff = 1;
index bca9947977c50d151b0fed90931ec52112e72bae..5e1f5c7e8f8071c6cab381306638067a1e20d71c 100644 (file)
@@ -90,6 +90,7 @@ struct rev_info {
                        show_notes_given:1,
                        pretty_given:1,
                        abbrev_commit:1,
+                       abbrev_commit_given:1,
                        use_terminator:1,
                        missing_newline:1,
                        date_mode_explicit:1;
index 2fcc31a6f3d346e533b697eecf853e219d174cd0..983e34bec67a4cc4ba1182332e495377cc879ac9 100755 (executable)
@@ -448,6 +448,59 @@ test_expect_success 'log.decorate configuration' '
        git log --oneline --decorate >actual &&
        test_cmp expect.short actual
 
+       git config --unset-all log.decorate &&
+       git log --pretty=raw >expect.raw &&
+       git config log.decorate full &&
+       git log --pretty=raw >actual &&
+       test_cmp expect.raw actual
+
+'
+
+test_expect_success 'reflog is expected format' '
+       test_might_fail git config --remove-section log &&
+       git log -g --abbrev-commit --pretty=oneline >expect &&
+       git reflog >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'whatchanged is expected format' '
+       git log --no-merges --raw >expect &&
+       git whatchanged >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'log.abbrevCommit configuration' '
+       test_when_finished "git config --unset log.abbrevCommit" &&
+
+       test_might_fail git config --unset log.abbrevCommit &&
+
+       git log --abbrev-commit >expect.log.abbrev &&
+       git log --no-abbrev-commit >expect.log.full &&
+       git log --pretty=raw >expect.log.raw &&
+       git reflog --abbrev-commit >expect.reflog.abbrev &&
+       git reflog --no-abbrev-commit >expect.reflog.full &&
+       git whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
+       git whatchanged --no-abbrev-commit >expect.whatchanged.full &&
+
+       git config log.abbrevCommit true &&
+
+       git log >actual &&
+       test_cmp expect.log.abbrev actual &&
+       git log --no-abbrev-commit >actual &&
+       test_cmp expect.log.full actual &&
+
+       git log --pretty=raw >actual &&
+       test_cmp expect.log.raw actual &&
+
+       git reflog >actual &&
+       test_cmp expect.reflog.abbrev actual &&
+       git reflog --no-abbrev-commit >actual &&
+       test_cmp expect.reflog.full actual &&
+
+       git whatchanged >actual &&
+       test_cmp expect.whatchanged.abbrev actual &&
+       git whatchanged --no-abbrev-commit >actual &&
+       test_cmp expect.whatchanged.full actual
 '
 
 test_expect_success 'show added path under "--follow -M"' '