From: Stefan Beller <hidden> Date: 2018-08-10 22:49:36
This improves colors of the range-diff, see last patch for details.
This is a partial resend of
https://public-inbox.org/git/20180804015317.182683-1-sbeller@google.com/
and is also available via
git fetch https://github.com/stefanbeller/git sb/range-diff-better-colors
It applies on the (just reset) series of sb/range-diff-colors.
Thanks,
Stefan
Stefan Beller (4):
diff.c: emit_line_0 to take string instead of first sign
diff.c: add --output-indicator-{new, old, context}
range-diff: make use of different output indicators
range-diff: indent special lines as context
diff.c | 43 +++++++++++++++++++++++++++++++------------
diff.h | 5 +++++
range-diff.c | 17 ++++++++++++++++-
t/t3206-range-diff.sh | 12 ++++++------
4 files changed, 58 insertions(+), 19 deletions(-)
--
2.18.0.865.gffc8e1a3cd6-goog
From: Stefan Beller <hidden> Date: 2018-08-10 22:49:39
By providing a string as the first part of the emission we can extend
it later more easily.
While at it, document emit_line_0.
Signed-off-by: Stefan Beller <redacted>
---
diff.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
From: Stefan Beller <hidden> Date: 2018-08-10 22:49:43
This will prove useful in range-diff in a later patch as we will be able to
differentiate between adding a new file (that line is starting with +++
and then the file name) and regular new lines.
It could also be useful for experimentation in new patch formats, i.e.
we could teach git to emit moved lines with lines other than +/-.
Signed-off-by: Stefan Beller <redacted>
---
diff.c | 21 +++++++++++++++++----
diff.h | 5 +++++
2 files changed, 22 insertions(+), 4 deletions(-)
@@ -1237,7 +1237,7 @@ static void emit_diff_symbol_from_struct(struct diff_options *o,structemitted_diff_symbol*eds){staticconstchar*nneof=" No newline at end of file\n";-constchar*context,*reset,*set,*set_sign,*meta,*fraginfo;+constchar*context,*reset,*set,*set_sign,*meta,*fraginfo,*first;structstrbufsb=STRBUF_INIT;enumdiff_symbols=eds->s;
From: Stefan Beller <hidden> Date: 2018-08-10 22:49:44
This change itself only changes the internal communication and should
have no visible effect to the user. We instruct the diff code that produces
the inner diffs to use X, Y, Z instead of the usual markers for new, old
and context lines
Signed-off-by: Stefan Beller <redacted>
---
range-diff.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
From: Stefan Beller <hidden> Date: 2018-08-10 22:49:47
The range-diff coloring is a bit fuzzy when it comes to special lines of
a diff, such as indicating new and old files with +++ and ---, as it
would pickup the first character and interpret it for its coloring, which
seems annoying as in regular diffs, these lines are colored bold via
DIFF_METAINFO.
By indenting these lines by a white space, they will be treated as context
which is much more useful, an example [1] on the range diff series itself:
[...]
+ diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.txt
+ new file mode 100644
+ --- /dev/null
+ +++ b/Documentation/git-range-diff.txt
+@@
++git-range-diff(1)
[...]
+
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
[...]
The first lines that introduce the new file for the man page will have the
'+' sign colored and the rest of the line will be bold.
The later lines that indicate a change to the Makefile will be treated as
context both in the outer and inner diff, such that those lines stay
regular color.
[1] ./git-range-diff pr-1/dscho/branch-diff-v3...pr-1/dscho/branch-diff-v4
These tags are found at https://github.com/gitgitgadget/git
Signed-off-by: Stefan Beller <redacted>
---
range-diff.c | 2 ++
t/t3206-range-diff.sh | 12 ++++++------
2 files changed, 8 insertions(+), 6 deletions(-)
From: Johannes Schindelin <hidden> Date: 2018-08-13 11:42:35
Hi Stefan,
On Fri, 10 Aug 2018, Stefan Beller wrote:
By providing a string as the first part of the emission we can extend
it later more easily.
Thank you for working on this!
While at it, document emit_line_0.
[...]
+/*
+ * Emits
+ * <set_sign> <first> <reset> <set> <second> <reset> LF
+ * if they are present. 'first' is a NULL terminated string,
+ * 'second' is a buffer of length 'len'.
+ */
That does not make it clear what the role of `first` or `second` is. Could
you clarify that?
(TBH I am not so sure myself what roles they serve. Previously, it was
kind of obvious to me that `first` tried to specify the diff marker, if
any. But now...?)
The rest looks good to me.
Thanks,
Dscho
quoted hunk
static void emit_line_0(struct diff_options *o,
const char *set_sign, const char *set, const char *reset,
- int first, const char *line, int len)
+ const char *first, const char *second, int len)
{
int has_trailing_newline, has_trailing_carriage_return;
int reverse = !!set && !!set_sign;
From: Johannes Schindelin <hidden> Date: 2018-08-13 11:47:06
Hi Steafn,
On Fri, 10 Aug 2018, Stefan Beller wrote:
This will prove useful in range-diff in a later patch as we will be able to
differentiate between adding a new file (that line is starting with +++
and then the file name) and regular new lines.
Very good!
quoted hunk
It could also be useful for experimentation in new patch formats, i.e.
we could teach git to emit moved lines with lines other than +/-.
Signed-off-by: Stefan Beller <redacted>
---
diff.c | 21 +++++++++++++++++----
diff.h | 5 +++++
2 files changed, 22 insertions(+), 4 deletions(-)
@@ -1237,7 +1237,7 @@ static void emit_diff_symbol_from_struct(struct diff_options *o,structemitted_diff_symbol*eds){staticconstchar*nneof=" No newline at end of file\n";-constchar*context,*reset,*set,*set_sign,*meta,*fraginfo;+constchar*context,*reset,*set,*set_sign,*meta,*fraginfo,*first;structstrbufsb=STRBUF_INIT;enumdiff_symbols=eds->s;
Instead of doing this over and over again, how about
1) setting o->output_indicators to " " in diff_setup()?
2) passing OI_CONTEXT to emit_line_ws_markup() instead of `first`? I.e.
change it to the index in the output_indicators, with -1 indicating
"none"?
quoted hunk
flags & (DIFF_SYMBOL_CONTENT_WS_MASK), 0);
break;
case DIFF_SYMBOL_PLUS:
I could imagine that OI_* is too generic a prefix, and that we would want
to have a prefix that is less prone to collide with other global
constants, such as OUTPUT_INDICATOR_*.
Ciao,
Dscho
From: Johannes Schindelin <hidden> Date: 2018-08-13 11:51:36
Hi Stefan,
On Fri, 10 Aug 2018, Stefan Beller wrote:
quoted hunk
This change itself only changes the internal communication and should
have no visible effect to the user. We instruct the diff code that produces
the inner diffs to use X, Y, Z instead of the usual markers for new, old
and context lines
Signed-off-by: Stefan Beller <redacted>
---
range-diff.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
My preliminary reading (I sadly lack the time to pull your branch and play
with it) suggests that this works, although I have to admit that X/Y/Z
would confuse me in 6 months from now, as they do not really read like
diff markers but like plain text. I could imagine that '>', '<' and '#'
would not impart that confusion on me.
Ciao,
Dscho
From: Johannes Schindelin <hidden> Date: 2018-08-13 11:54:25
Hi Stefan,
On Fri, 10 Aug 2018, Stefan Beller wrote:
The range-diff coloring is a bit fuzzy when it comes to special lines of
a diff, such as indicating new and old files with +++ and ---, as it
would pickup the first character and interpret it for its coloring, which
seems annoying as in regular diffs, these lines are colored bold via
DIFF_METAINFO.
By indenting these lines by a white space, they will be treated as context
which is much more useful, an example [1] on the range diff series itself:
[...]
+ diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.txt
+ new file mode 100644
+ --- /dev/null
+ +++ b/Documentation/git-range-diff.txt
+@@
++git-range-diff(1)
[...]
+
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
[...]
The first lines that introduce the new file for the man page will have the
'+' sign colored and the rest of the line will be bold.
The later lines that indicate a change to the Makefile will be treated as
context both in the outer and inner diff, such that those lines stay
regular color.
While I am a fan of having those lines colored correctly, I have to admit
that I am not exactly enthusiastic about that extra indentation...
Otherwise, this looks good to me.
Thanks,
Dscho
quoted hunk
[1] ./git-range-diff pr-1/dscho/branch-diff-v3...pr-1/dscho/branch-diff-v4
These tags are found at https://github.com/gitgitgadget/git
Signed-off-by: Stefan Beller <redacted>
---
range-diff.c | 2 ++
t/t3206-range-diff.sh | 12 ++++++------
2 files changed, 8 insertions(+), 6 deletions(-)
From: Stefan Beller <hidden> Date: 2018-08-13 18:19:37
On Mon, Aug 13, 2018 at 4:42 AM Johannes Schindelin
[off-list ref] wrote:
quoted
+/*
+ * Emits
+ * <set_sign> <first> <reset> <set> <second> <reset> LF
+ * if they are present. 'first' is a NULL terminated string,
+ * 'second' is a buffer of length 'len'.
+ */
That does not make it clear what the role of `first` or `second` is. Could
you clarify that?
For now it is just "first string" and "second string", where the first is
used for signs and indicators, and the second is allowed to have '\0'
in it as we give the length as a parameter. This doc tried to be
neutral w.r.t. the purpose of the first/second string.
(TBH I am not so sure myself what roles they serve. Previously, it was
kind of obvious to me that `first` tried to specify the diff marker, if
any. But now...?)
Originally I thought we'd split the line into
"++" "line"
for a range diff, but this is not the case.
As the next patch introduces configurable strings, we'd need this patch.
I consider changing the next patch to allow only giving a single character
instead, such that we can keep 'first', which indicates the sign character.
(So maybe I'd even call it 'sign').
From: Stefan Beller <hidden> Date: 2018-08-13 18:24:09
On Mon, Aug 13, 2018 at 4:47 AM Johannes Schindelin
[off-list ref] wrote:
Hi Steafn,
On Fri, 10 Aug 2018, Stefan Beller wrote:
quoted
This will prove useful in range-diff in a later patch as we will be able to
differentiate between adding a new file (that line is starting with +++
and then the file name) and regular new lines.
Very good!
quoted
It could also be useful for experimentation in new patch formats, i.e.
we could teach git to emit moved lines with lines other than +/-.
Signed-off-by: Stefan Beller <redacted>
---
diff.c | 21 +++++++++++++++++----
diff.h | 5 +++++
2 files changed, 22 insertions(+), 4 deletions(-)
@@ -1237,7 +1237,7 @@ static void emit_diff_symbol_from_struct(struct diff_options *o,structemitted_diff_symbol*eds){staticconstchar*nneof=" No newline at end of file\n";-constchar*context,*reset,*set,*set_sign,*meta,*fraginfo;+constchar*context,*reset,*set,*set_sign,*meta,*fraginfo,*first;structstrbufsb=STRBUF_INIT;enumdiff_symbols=eds->s;
Instead of doing this over and over again, how about
1) setting o->output_indicators to " " in diff_setup()?
... and when parsing the command line options we could already overwrite it
in place.
2) passing OI_CONTEXT to emit_line_ws_markup() instead of `first`? I.e.
change it to the index in the output_indicators, with -1 indicating
"none"?
That sounds like an elegant design, as then it is super clear that 'first'
can only ever be a sign (or character that we chose), but
giving -1 for "none" sounds cumbersome. I'll take a look into that.
I could imagine that OI_* is too generic a prefix, and that we would want
to have a prefix that is less prone to collide with other global
constants, such as OUTPUT_INDICATOR_*.
I agree on that; will take the suggestion of
OUTPUT_INDICATOR_*.
From: Stefan Beller <hidden> Date: 2018-08-13 18:25:05
quoted
strbuf_addbuf(&buf, &line);
+ }
My preliminary reading (I sadly lack the time to pull your branch and play
with it) suggests that this works, although I have to admit that X/Y/Z
would confuse me in 6 months from now, as they do not really read like
diff markers but like plain text. I could imagine that '>', '<' and '#'
would not impart that confusion on me.
Thanks for that suggestion! (I'll change it and add a comment)
From: Stefan Beller <hidden> Date: 2018-08-13 18:36:34
quoted
The later lines that indicate a change to the Makefile will be treated as
context both in the outer and inner diff, such that those lines stay
regular color.
While I am a fan of having those lines colored correctly, I have to admit
that I am not exactly enthusiastic about that extra indentation...
Otherwise, this looks good to me.
Can you explain what makes you less enthused about the indentation?
Advantage:
* allows easy coloring (easy implementation)
Disadvantage:
* formats change, but the range diff is still in its early design phase,
so we're not breaking things, yet?
(Do we ever plan on sending range-diff patches that can be applied to
rewrite history? I am very uncertain on such a feature request.
It sounds cool, though)
From: Johannes Schindelin <hidden> Date: 2018-08-14 18:54:27
Hi Stefan,
On Mon, 13 Aug 2018, Stefan Beller wrote:
quoted
quoted
The later lines that indicate a change to the Makefile will be treated as
context both in the outer and inner diff, such that those lines stay
regular color.
While I am a fan of having those lines colored correctly, I have to admit
that I am not exactly enthusiastic about that extra indentation...
Otherwise, this looks good to me.
Can you explain what makes you less enthused about the indentation?
Advantage:
* allows easy coloring (easy implementation)
Disadvantage:
* formats change,
This is it. It breaks my visual flow.
but the range diff is still in its early design phase, so we're not
breaking things, yet?
Indeed. We're not breaking things. If you feel strongly about it, we can
have that indentation, I *can* get used to it.
(Do we ever plan on sending range-diff patches that can be applied to
rewrite history? I am very uncertain on such a feature request. It
sounds cool, though)
I remember that I heard you discussing this internally. I am not too big a
fan of this idea, I have to admit. The range diff seems more designed to
explain how a patch series evolved, rather than providing machine-readable
data that allows to recreate said evolution. For example, the committer
information as well as the date are missing, which would preclude a
faithful reconstruction.
And that is not all: if you wanted to "apply" a range diff, you would need
to know more about the base(s) of the two commit ranges. You would need to
know that they are at least very similar to the base onto which you want
to apply this.
And quite seriously, this would be the wrong way to go in my mind. We have
a very efficient data format to transport all of that information: the Git
bundle.
Let's not overload the range diff format with multiple, partially
contradicting purposes. Think "separation of concerns". It's the same
issue, really, as trying to send highly structured data such as bug
reports or code contributions via a medium meant to send unstructured
plain or formatted text back and forth between human beings.
Ciao,
Dscho
From: Stefan Beller <hidden> Date: 2018-08-14 19:05:51
On Tue, Aug 14, 2018 at 11:54 AM Johannes Schindelin
[off-list ref] wrote:
Hi Stefan,
On Mon, 13 Aug 2018, Stefan Beller wrote:
quoted
quoted
quoted
The later lines that indicate a change to the Makefile will be treated as
context both in the outer and inner diff, such that those lines stay
regular color.
While I am a fan of having those lines colored correctly, I have to admit
that I am not exactly enthusiastic about that extra indentation...
Otherwise, this looks good to me.
Can you explain what makes you less enthused about the indentation?
Advantage:
* allows easy coloring (easy implementation)
Disadvantage:
* formats change,
This is it. It breaks my visual flow.
quoted
but the range diff is still in its early design phase, so we're not
breaking things, yet?
Indeed. We're not breaking things. If you feel strongly about it, we can
have that indentation, I *can* get used to it.
I only feel strongly about it now as that is the *easiest* way to make
the colors
look like I want them to look. And I really value colors in the range-diff.
Earlier you said that color-less range-diff is nearly useless for you and I
thought it was hyperbole, but by now I realize how much truth you spoke.
So getting the colors fixed to not markup files (+++/ --- lines of the inner
diff) is a high priority for me. So high that I would compromise on the
indentation/flow of these corner case areas.
quoted
(Do we ever plan on sending range-diff patches that can be applied to
rewrite history? I am very uncertain on such a feature request. It
sounds cool, though)
I remember that I heard you discussing this internally. I am not too big a
fan of this idea, I have to admit. The range diff seems more designed to
explain how a patch series evolved, rather than providing machine-readable
data that allows to recreate said evolution. For example, the committer
information as well as the date are missing, which would preclude a
faithful reconstruction.
Ah! good point. Though we could just work around that and use the email
date for the new author dates. ;-)
And that is not all: if you wanted to "apply" a range diff, you would need
to know more about the base(s) of the two commit ranges. You would need to
know that they are at least very similar to the base onto which you want
to apply this.
You would say so in the cover letter "This is a resend of sb/range-diff-colors"
and by the knowledge of that tip only and the range-diff you would
know how the new series would look like, even if it was rebased.
And quite seriously, this would be the wrong way to go in my mind. We have
a very efficient data format to transport all of that information: the Git
bundle.
The bundle format is very efficient for machine transport, but I thought the
whole point of the mailing list was easy human readable parts, i.e. you can
point out things in a diff, which you could also do in a range-diff to some
extend. We would loose some of the "fresh eyes" as you'd only see the
changed part of the series. :-/ So yeah even for the workflow this seems
a net-negative. I just thought it would be cool.
Let's not overload the range diff format with multiple, partially
contradicting purposes. Think "separation of concerns". It's the same
issue, really, as trying to send highly structured data such as bug
reports or code contributions via a medium meant to send unstructured
plain or formatted text back and forth between human beings.
From: Johannes Schindelin <hidden> Date: 2018-08-16 08:23:00
Hi Stefan,
On Tue, 14 Aug 2018, Stefan Beller wrote:
On Tue, Aug 14, 2018 at 11:54 AM Johannes Schindelin
[off-list ref] wrote:
quoted
On Mon, 13 Aug 2018, Stefan Beller wrote:
quoted
quoted
quoted
The later lines that indicate a change to the Makefile will be
treated as context both in the outer and inner diff, such that
those lines stay regular color.
While I am a fan of having those lines colored correctly, I have
to admit that I am not exactly enthusiastic about that extra
indentation...
Otherwise, this looks good to me.
Can you explain what makes you less enthused about the indentation?
Advantage:
* allows easy coloring (easy implementation)
Disadvantage:
* formats change,
This is it. It breaks my visual flow.
quoted
but the range diff is still in its early design phase, so we're not
breaking things, yet?
Indeed. We're not breaking things. If you feel strongly about it, we
can have that indentation, I *can* get used to it.
I only feel strongly about it now as that is the *easiest* way to make
the colors look like I want them to look. And I really value colors in
the range-diff. Earlier you said that color-less range-diff is nearly
useless for you and I thought it was hyperbole, but by now I realize how
much truth you spoke. So getting the colors fixed to not markup files
(+++/ --- lines of the inner diff) is a high priority for me. So high
that I would compromise on the indentation/flow of these corner case
areas.
Okay, let's go with your indentation, then.
Ciao,
Dscho
From: Stefan Beller <hidden> Date: 2018-08-17 20:44:09
This improves colors of the range-diff, see last patch for details.
it is also available via
git fetch https://github.com/stefanbeller/git sb/range-diff-better-colors
Thanks,
Stefan
Stefan Beller (3):
diff.c: add --output-indicator-{new, old, context}
range-diff: make use of different output indicators
range-diff: indent special lines as context
diff.c | 21 ++++++++++++++++++---
diff.h | 5 +++++
range-diff.c | 22 +++++++++++++++++++++-
t/t3206-range-diff.sh | 12 ++++++------
4 files changed, 50 insertions(+), 10 deletions(-)
--
2.18.0.265.g16de1b435c9.dirty
From: Stefan Beller <hidden> Date: 2018-08-17 20:44:16
This will prove useful in range-diff in a later patch as we will be able to
differentiate between adding a new file (that line is starting with +++
and then the file name) and regular new lines.
It could also be useful for experimentation in new patch formats, i.e.
we could teach git to emit moved lines with lines other than +/-.
Signed-off-by: Stefan Beller <redacted>
---
diff.c | 21 ++++++++++++++++++---
diff.h | 5 +++++
2 files changed, 23 insertions(+), 3 deletions(-)
From: Stefan Beller <hidden> Date: 2018-08-17 20:44:16
This change itself only changes the internal communication and should
have no visible effect to the user. We instruct the diff code that
produces the inner diffs to use other markers instead of the
usual markers for new, old and context lines.
Signed-off-by: Stefan Beller <redacted>
---
range-diff.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
From: Stefan Beller <hidden> Date: 2018-08-17 20:44:16
The range-diff coloring is a bit fuzzy when it comes to special lines of
a diff, such as indicating new and old files with +++ and ---, as it
would pickup the first character and interpret it for its coloring, which
seems annoying as in regular diffs, these lines are colored bold via
DIFF_METAINFO.
By indenting these lines by a white space, they will be treated as context
which is much more useful, an example [1] on the range diff series itself:
[...]
+ diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.txt
+ new file mode 100644
+ --- /dev/null
+ +++ b/Documentation/git-range-diff.txt
+@@
++git-range-diff(1)
[...]
+
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
[...]
The first lines that introduce the new file for the man page will have the
'+' sign colored and the rest of the line will be bold.
The later lines that indicate a change to the Makefile will be treated as
context both in the outer and inner diff, such that those lines stay
regular color.
[1] ./git-range-diff pr-1/dscho/branch-diff-v3...pr-1/dscho/branch-diff-v4
These tags are found at https://github.com/gitgitgadget/git
Signed-off-by: Stefan Beller <redacted>
---
range-diff.c | 2 ++
t/t3206-range-diff.sh | 12 ++++++------
2 files changed, 8 insertions(+), 6 deletions(-)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
... here, we could simply pass `OUTPUT_INDICATOR_CONTEXT` and let the
callee look it up in`o->output_indicators[]`...
I read all three patches and did not see a reason why we could not
simplify the code that way.
Other than that: great!
Thank you,
Dscho
quoted hunk
+ line, len,
flags & (DIFF_SYMBOL_CONTENT_WS_MASK), 0);
break;
case DIFF_SYMBOL_PLUS:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
... here, we could simply pass `OUTPUT_INDICATOR_CONTEXT` and let the
callee look it up in`o->output_indicators[]`...
I read all three patches and did not see a reason why we could not
simplify the code that way.
Other than that: great!
Thanks!
I considered it, but was put off by the (small) effort of yet another
diff refactoring.
I'll include it in a resend if a resend is needed, otherwise
I would suggest to make it a patch on top?
Thanks,
Stefan
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
... here, we could simply pass `OUTPUT_INDICATOR_CONTEXT` and let the
callee look it up in`o->output_indicators[]`...
I read all three patches and did not see a reason why we could not
simplify the code that way.
Other than that: great!
Thanks!
I considered it, but was put off by the (small) effort of yet another
diff refactoring.
I'll include it in a resend if a resend is needed, otherwise
I would suggest to make it a patch on top?
From: Stefan Beller <hidden> Date: 2018-08-22 22:33:23
Instead of passing the sign directly to emit_line_ws_markup, pass only the
index to lookup the sign in diff_options->output_indicators.
Signed-off-by: Stefan Beller <redacted>
---
diff.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
So something like this on top of sb/range-diff-colors ?
If a resend is needed I'll squash this in (or carry it as a cleanup patch early
in the series), otherwise we could put this on top.
Thanks,
Stefan
From: Johannes Schindelin <hidden> Date: 2018-08-23 14:26:21
Hi Stefan,
On Wed, 22 Aug 2018, Stefan Beller wrote:
Instead of passing the sign directly to emit_line_ws_markup, pass only the
index to lookup the sign in diff_options->output_indicators.
Signed-off-by: Stefan Beller <redacted>
Looks good to me!
---
diff.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
So something like this on top of sb/range-diff-colors ? If a resend is
needed I'll squash this in (or carry it as a cleanup patch early in the
series), otherwise we could put this on top.