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

[PATCH 3/3] builtin/blame: add new coloring scheme config

From
Stefan Beller <sbeller@google.com>
Date
Apr 24, 2018, 00:09 UTC
Message-ID
<20180424000900.175235-4-sbeller@google.com>
In-Reply-To
<20180424000900.175235-1-sbeller@google.com>

Add a config option that allows selecting the default color scheme for blame. The command line still takes precedence over the configuration.

It is to be seen, how color.ui will integrate with blame coloring.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
 Documentation/config.txt |  5 +++++
 builtin/blame.c          | 18 ++++++++++++++++++
 t/t8012-blame-colors.sh  |  4 ++++
 3 files changed, 27 insertions(+)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 1496fa4917..c03e20cf23 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1240,6 +1240,11 @@ everything older than one year blue, recent changes between one month and
 one year old are kept white, and lines introduced within the last month are
 colored red.
 
+blame.coloring::
+	This determines the coloring scheme to be applied to blame
+	output. It can be 'repeatedLines', 'highlightRecent',
+	or 'none' which is the default.
+
 color.ui::
 	This variable determines the default value for variables such
 	as `color.diff` and `color.grep` that control the use of color
diff --git a/builtin/blame.c b/builtin/blame.c
index d1d469c0b5..fede1cf1e3 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -49,6 +49,7 @@ static int abbrev = -1;
 static int no_whole_file_rename;
 static int show_progress;
 static char repeated_meta_color[COLOR_MAXLEN];
+static int coloring_mode;
 
 static struct date_mode blame_date_mode = { DATE_ISO8601 };
 static size_t blame_date_width;
@@ -702,6 +703,20 @@ static int git_blame_config(const char *var, const char *value, void *cb)
 		return 0;
 	}
 
+	if (!strcmp(var, "blame.coloring")) {
+		if (!strcmp(value, "repeatedLines")) {
+			coloring_mode |= OUTPUT_COLOR_LINE;
+		} else if (!strcmp(value, "highlightRecent")) {
+			coloring_mode |= OUTPUT_SHOW_AGE_WITH_COLOR;
+		} else if (!strcmp(value, "none")) {
+			coloring_mode &= ~(OUTPUT_COLOR_LINE |
+					    OUTPUT_SHOW_AGE_WITH_COLOR);
+		} else {
+			warning(_("invalid value for blame.coloring"));
+			return 0;
+		}
+	}
+
 	if (git_diff_heuristic_config(var, value, cb) < 0)
 		return -1;
 	if (userdiff_config(var, value) < 0)
@@ -1046,6 +1061,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 
 	blame_coalesce(&sb);
 
+	if (!(output_option & (OUTPUT_COLOR_LINE | OUTPUT_SHOW_AGE_WITH_COLOR)))
+		output_option |= coloring_mode;
+
 	if (!(output_option & OUTPUT_PORCELAIN)) {
 		find_alignment(&sb, &output_option);
 		if (!*repeated_meta_color &&
diff --git a/t/t8012-blame-colors.sh b/t/t8012-blame-colors.sh
index ae9aa79d4e..ed38f74de9 100755
--- a/t/t8012-blame-colors.sh
+++ b/t/t8012-blame-colors.sh
@@ -8,6 +8,8 @@ PROG='git blame -c'
 
 test_expect_success 'colored blame colors contiguous lines' '
 	git -c color.blame.repeatedLines=yellow blame --color-lines --abbrev=12 hello.c >actual.raw &&
+	git -c color.blame.repeatedLines=yellow -c blame.coloring=repeatedLines blame --abbrev=12 hello.c >actual.raw.2 &&
+	test_cmp actual.raw actual.raw.2 &&
 	test_decode_color <actual.raw >actual &&
 	grep "<YELLOW>" <actual >darkened &&
 	grep "(F" darkened > F.expect &&
@@ -18,6 +20,8 @@ test_expect_success 'colored blame colors contiguous lines' '
 
 test_expect_success 'color by age consistently colors old code' '
 	git blame --color-by-age hello.c >actual.raw &&
+	git -c blame.coloring=highlightRecent blame hello.c >actual.raw.2 &&
+	test_cmp actual.raw actual.raw.2 &&
 	test_decode_color <actual.raw >actual &&
 	grep "<BLUE>" <actual >colored &&
 	test_line_count = 10 colored
-- 
2.17.0.441.gb46fe60e1d-goog
Previous: Stefan BellerNext: Junio C Hamano
Message 4 of 6 in “Colorful blame output”
  1. 0/3 Colorful blame outputStefan Beller, Apr 24, 2018
  2. 1/3 builtin/blame: dim uninteresting metadata linesStefan Beller, Apr 24, 2018
  3. 2/3 builtin/blame: highlight recently changed linesStefan Beller, Apr 24, 2018
  4. 3/3 builtin/blame: add new coloring scheme configStefan Beller, Apr 24, 2018
  5. Junio C HamanoApr 24, 2018
  6. Stefan BellerApr 24, 2018

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.