git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3] Add log.abbrevCommit config variable

From
Jay Soffian <jaysoffian@gmail.com>
Date
May 14, 2011, 22:49 UTC
Message-ID
<1305413341-56450-1-git-send-email-jaysoffian@gmail.com>
In-Reply-To
<BANLkTi=og+e6JW8t+sCvkFJUnR=SrFtWGg@mail.gmail.com>

Add log.abbrevCommit config variable as a convenience for users who often use --abbrev-commit with git log and friends. Allow the option to be overridden with --no-abbrev-commit.

(Also, a drive-by spelling correction in git log's short help.)
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
Changes from v2: ignore log.abbrevCommit when given --pretty=raw
 Documentation/config.txt         |    5 +++++
 Documentation/pretty-options.txt |    5 +++++
 builtin/log.c                    |   14 +++++++++++++-
 revision.c                       |    3 +++
 revision.h                       |    1 +
 t/t4202-log.sh                   |   15 +++++++++++++++
 6 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 285c7f73ca..8a3a1d08f7 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1314,6 +1314,11 @@ interactive.singlekey::
 	linkgit:git-checkout[1]. Note that this 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
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
index d5c977262a..2a3dc8664f 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.txt
@@ -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.
diff --git a/builtin/log.c b/builtin/log.c
index f6219909a7..460fc15d8f 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -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},
@@ -137,6 +139,12 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
 	    && rev->commit_format == CMIT_FMT_RAW)
 		decoration_style = 0;
 
+	/* ditto for log.abbrevCommit */
+	if (!rev->abbrev_commit_given && rev->abbrev_commit
+	    && rev->commit_format == CMIT_FMT_RAW)
+		rev->abbrev_commit = 0;
+
+
 	if (decoration_style) {
 		rev->show_decorations = 1;
 		load_ref_decorations(decoration_style);
@@ -323,6 +331,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")) {
diff --git a/revision.c b/revision.c
index a7cf79bf2e..be74bf92f5 100644
--- a/revision.c
+++ b/revision.c
@@ -1429,6 +1429,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;
diff --git a/revision.h b/revision.h
index bca9947977..5e1f5c7e8f 100644
--- a/revision.h
+++ b/revision.h
@@ -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;
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index 2fcc31a6f3..9e8afd65a2 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -450,6 +450,21 @@ test_expect_success 'log.decorate configuration' '
 
 '
 
+test_expect_success 'log.abbrev-commit configuration' '
+	test_might_fail git config --remove-section log &&
+	test_when_finished "git config --unset log.abbrevCommit" &&
+	git log >expect.full &&
+	git log --pretty=raw >expect.raw &&
+	git log --abbrev-commit >expect.abbrev &&
+	git config log.abbrevCommit true &&
+	git log >actual.abbrev &&
+	test_cmp expect.abbrev actual.abbrev &&
+	git log --no-abbrev-commit >actual.full &&
+	test_cmp expect.full actual.full &&
+	git log --pretty=raw >actual.raw &&
+	test_cmp expect.raw actual.raw
+'
+
 test_expect_success 'show added path under "--follow -M"' '
 	# This tests for a regression introduced in v1.7.2-rc0~103^2~2
 	test_create_repo regression &&
-- 
1.7.5.1.290.g992321
Previous: Jay SoffianNext: Jay Soffian
Message 10 of 22 in “Add log.abbrev-commit config option”
  1. Add log.abbrev-commit config optionJay Soffian, May 14, 2011
  2. Jay SoffianMay 14, 2011
  3. Jonathan NiederMay 14, 2011
  4. Jay SoffianMay 14, 2011
  5. add, merge, diff: do not use strcasecmp to compare config variable namesJonathan Nieder, May 14, 2011
  6. Junio C HamanoMay 15, 2011
  7. Add log.abbrevCommit config variableJay Soffian, May 14, 2011
  8. Jonathan NiederMay 14, 2011
  9. Jay SoffianMay 14, 2011
  10. Add log.abbrevCommit config variableJay Soffian, May 14, 2011
  11. Jay SoffianMay 15, 2011
  12. Junio C HamanoMay 15, 2011
  13. Jay SoffianMay 16, 2011
  14. Jonathan NiederMay 16, 2011
  15. Jay SoffianMay 16, 2011
  16. Junio C HamanoMay 17, 2011
  17. Junio C HamanoMay 17, 2011
  18. Jay SoffianMay 18, 2011
  19. Junio C HamanoMay 17, 2011
  20. Jay SoffianMay 17, 2011
  21. Junio C HamanoMay 15, 2011
  22. Michael J GruberMay 16, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.