From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Stefan Beller <sbeller@google.com>
Cc: Jonathan Tan <jonathantanmy@google.com>,
Jacob Keller <jacob.keller@gmail.com>,
Simon Ruderich <simon@ruderich.org>, git <git@vger.kernel.org>
Subject: Re: [PATCH 5/7] diff.c: refactor internal representation for coloring moved code
Date: Tue, 03 Apr 2018 22:44:28 +0200 [thread overview]
Message-ID: <87muykuij7.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <CAGZ79kaQV-F0by52fbv3fmOH_ZVMU6u=KOkJFxALyHHaH2Enfw@mail.gmail.com>
On Tue, Apr 03 2018, Stefan Beller wrote:
> On Tue, Apr 3, 2018 at 12:39 PM, Ævar Arnfjörð Bjarmason
> <avarab@gmail.com> wrote:
>>
>> On Mon, Apr 02 2018, Stefan Beller wrote:
>>
>>> At the time the move coloring was implemented we thought an enum of modes
>>> is the best to configure this feature. However as we want to tack on new
>>> features, the enum would grow exponentially.
>>>
>>> Refactor the code such that features are enabled via bits. Currently we can
>>> * activate the move detection,
>>> * enable the block detection on top, and
>>> * enable the dimming inside a block, though this could be done without
>>> block detection as well (mode "plain, dimmed")
>>>
>>> Choose the flags to not be at bit position 2,3,4 as the next patch
>>> will occupy these.
>>
>> When I've been playing with colorMoved the thing I've found really
>> confusing is that the current config has confused two completely
>> unrelated things (at least, from a user perspective), what underlying
>> algorithm you use, and how the colors look.
>
> Not sure I follow. The colors are in color.diff.X and the algorithm is in
> diff.colorMoved, whereas some colors are reused for different algorithms?
>
>>
>> I was helping someone at work the other day where they were trying:
>>
>> git -c color.diff.new="green bold" \
>> -c color.diff.old="red bold" \
>> -c color.diff.newMoved="green" \
>> -c color.diff.oldMoved="red" \
>> -c diff.colorMoved=plain show <commit>
>>
>> But what gave better results was:
>>
>> git -c color.diff.new="green bold" \
>> -c color.diff.old="red bold" \
>> -c color.diff.newMoved="green" \
>> -c color.diff.oldMoved="red" \
>> -c diff.colorMoved=zebra \
>> -c color.diff.oldMovedAlternative=red \
>> -c color.diff.newMovedAlternative=green show <commit>
>>
>> I don't have a public test commit to share (sorry), but I have an
>> internal example where "plain" will consider a thing as falling under
>> color.diff.old OR color.diff.oldMoved, but zebra will consider that
>> whole part only color.diff.old.
>
> What do you mean by "OR" ?
> Is the hunk present multiple times and colored one or the other way?
> Is it colored differently in different invocations of Git?
> Is one hunk mixing up both colors?
>
> Is the hunk "small" ?
> small hunks are un-colored, to avoid showing empty lines
> or closing braces as moved. But plain mode ignores this heuristic.
>
>> I see now that that might be since only the "zebra" supports the
>> *Alternative that it ends up "stealing" chunks from something that would
>> have otherwise been classified differently, so I have no idea if there's
>> an easy "solution", or if it's even a problem.
>
> Can you describe the issue more to see if it is a problem?
> (It sounds like a problem in the documentation/UX to me already
> as the docs could not tell you what to expect)
>
>> Sorry about being vague, I just dug this up from some old notes now
>> after this patch jolted my memory about it.
Forget about what I said so far, sorry, that was a really shitty
report. I dug into this a bit more and here's a better one.
I still can't share the actual diff I have in front of me (internal
code).
Currently we have plain, zebra & dimmed_zebra, and zebra is the
default.
I got an internal report from someone who had, because zebra looked
crappy in his terminal, moved to "plain", and was reporting getting
worse moved diffs as a result.
I found that there's essentially a missing setting between "plain" and
"zebra", in git command terms:
# The "plain" setting
git -c diff.colorMoved=true \
-c diff.colorMoved=plain \
show <commit>
# We don't have this, it's "plain" but with "zebra" heuristics,
# plain_zebra?
git -c diff.colorMoved=true \
-c color.diff.oldMovedAlternative="bold magenta" \
-c color.diff.newMovedAlternative="bold yellow" \
-c diff.colorMoved=zebra \
show <commit>
# The "zebra" setting.
git -c diff.colorMoved=true \
-c diff.colorMoved=zebra \
show <commit>
Which is what I mean by the current config conflating two (to me)
unrelated things. One is how we, via any method, detect what's moved or
not, and the other is what color/format we use to present this to the
user.
You can feed that plain_zebra invocation input where it'll color-wise
produce something that looks *almost* like "plain", but will differ (and
usually be better) in what lines it decides to show as moved, which of
course is due to *MovedAlternative.
next prev parent reply other threads:[~2018-04-03 20:44 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-02 22:48 [RFC PATCH 0/7] Moved code detection: ignore space on uniform indentation Stefan Beller
2018-04-02 22:48 ` [PATCH 1/7] xdiff/xdiff.h: remove unused flags Stefan Beller
2018-04-02 22:48 ` [PATCH 2/7] xdiff/xdiffi.c: remove unneeded function declarations Stefan Beller
2018-04-02 22:48 ` [PATCH 3/7] diff.c: do not pass diff options as keydata to hashmap Stefan Beller
2018-04-06 20:04 ` Jeff King
2018-04-06 20:41 ` Stefan Beller
2018-04-02 22:48 ` [PATCH 4/7] diff.c: adjust hash function signature to match hashmap expectation Stefan Beller
2018-04-02 22:48 ` [PATCH 5/7] diff.c: refactor internal representation for coloring moved code Stefan Beller
2018-04-02 23:51 ` Jonathan Tan
2018-04-03 18:59 ` Stefan Beller
2018-04-06 21:28 ` Stefan Beller
2018-04-06 22:27 ` Jonathan Tan
2018-04-03 19:39 ` Ævar Arnfjörð Bjarmason
2018-04-03 19:49 ` Stefan Beller
2018-04-03 20:44 ` Ævar Arnfjörð Bjarmason [this message]
2018-04-03 21:05 ` [PATCH] diff: add a blocks mode for moved code detection Stefan Beller
2018-04-02 22:48 ` [PATCH 6/7] diff.c: decouple white space treatment for move detection from generic option Stefan Beller
2018-04-03 0:31 ` Jonathan Tan
2018-04-02 22:48 ` [PATCH 7/7] diff.c: add --color-moved-ignore-space-delta option Stefan Beller
2018-04-03 0:41 ` Jonathan Tan
2018-04-03 19:22 ` Stefan Beller
2018-04-03 20:38 ` Jonathan Tan
2018-04-02 23:47 ` [RFC PATCH 0/7] Moved code detection: ignore space on uniform indentation Jonathan Tan
2018-04-03 0:03 ` Jacob Keller
2018-04-03 19:00 ` Stefan Beller
2018-04-03 19:55 ` Jacob Keller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87muykuij7.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=jacob.keller@gmail.com \
--cc=jonathantanmy@google.com \
--cc=sbeller@google.com \
--cc=simon@ruderich.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.