git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Beller <sbeller@google.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Junio C Hamano <gitster@pobox.com>, git <git@vger.kernel.org>
Subject: Re: [PATCH 8/8] diff.c: rewrite emit_line_0 more understandably
Date: Mon, 13 Aug 2018 11:57:20 -0700	[thread overview]
Message-ID: <CAGZ79kZ=bs84WGeA5TbVUTbQL2ECUSwEJanMKmeWw+xKp-rH5Q@mail.gmail.com> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.1808131429550.71@tvgsbejvaqbjf.bet>

On Mon, Aug 13, 2018 at 5:42 AM Johannes Schindelin
<Johannes.Schindelin@gmx.de> wrote:
>
> Hi Stefan,
>
> On Fri, 10 Aug 2018, Stefan Beller wrote:
>
> > emit_line_0 has no nested conditions, but puts out all its arguments
> > (if set) in order.
>
> Well, currently `emit_line_0()` *has* nested conditions: `first == '\n'`
> inside `len == 0`.
>
> And these nested conditions make things hard to read, so resolving that
> to a simpler workflow makes a ton of sense. You can sell that better by
> starting the commit message with something along the lines that you are
> making the overly complex logic easier to follow.
>
> > There is still a slight confusion with set and set_sign, but let's defer
> > that to a later patch.
>
> There is no later patch in this here patch series.

yup, I got overly excited when writing this commit message, as for
what we could try next.

> I would therefore
> appreciate it if you could spend the paragraph or two on explaining
> yourself here.

noted.

>
> > at "diff: add an internal option to dual-color diffs of diffs",
> > 2018-07-21), as there we broadened the meaning of 'first' to also
> > signal an early return.
>
> Did we? I thought we introduced the possibility of passing *just* a first
> character or *just* a "rest of the line". I might misremember, though.
>
> > The change in 'emit_line' makes sure that 'first' is never content, but
>
> <tongue-in-cheek>Awwww, you want to make 'first' sad all the time? That's
> not nice of you...</tongue-in-cheek>
>
> Seriously again, the adjective "content" has a different meaning than the
> noun and this ambiguity made this sentence very hard for me to parse.

So what is a good noun for the stuff that Git stores? ("stuff" is not a
good one)

> > always under our control, a sign or special character in the beginning
> > of the line (or 0, in which case we ignore it).
>
> It would be good to reword this paragraph to say that from now on, we will
> only pass a diff marker as `first`, or 0.

Makes sense.



> > +     if (!len && !first)
> > +             goto end_of_line;
> > +
> > +     if (reverse && want_color(o->use_color)) {
>
> Since you implied `reverse` to mean that a non-`NULL` `set` *as well as*
> `set_sign` were passed in, and since a non-`NULL` `set` *implies* that we
> want color, you could drop that `want_color(o->use_color)` here.
>
> But as I stated above, I am not a fan of having such unintuitive
> implications in the code.

okay. So we'd want to be explicit about reverse again?

> > +     fwrite(line, len, 1, file);
> > +     needs_reset |= len > 0;
>
> First of all, this should be a `||=`, not a `|=`.
>
> And then, this code is skipped by the `if (!len) goto end_of_line;` part
> above, so `len > 0` is *always* 1 at this point.
>
> But then, I wonder why we bother all that much. After all, we want to
> reset whenever we used color. So why not simply initialize
>
>         int need_reset = reverse || set_sign || set;
>
> and be done with it?

I just removed that line and all tests still pass. :/
I could have sworn of a failing test when writing the code
that ensures that content (noun), that contains color codes,
would still look okay by having a reset at the end of the line,
so really we'd need to have

  need_reset = reverse || set_sign || set || (len > 0);

I'll dig into this again.

Thanks,
Stefan

  reply	other threads:[~2018-08-13 18:57 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-10 22:34 [PATCH 0/8] Resending sb/range-diff-colors Stefan Beller
2018-08-10 22:34 ` [PATCH 1/8] test_decode_color: understand FAINT and ITALIC Stefan Beller
2018-08-10 22:34 ` [PATCH 2/8] t3206: add color test for range-diff --dual-color Stefan Beller
2018-08-13 12:05   ` Johannes Schindelin
2018-08-13 18:30     ` Stefan Beller
2018-08-10 22:34 ` [PATCH 3/8] diff.c: simplify caller of emit_line_0 Stefan Beller
2018-08-13 12:07   ` Johannes Schindelin
2018-08-10 22:34 ` [PATCH 4/8] diff.c: reorder arguments for emit_line_ws_markup Stefan Beller
2018-08-13 12:09   ` Johannes Schindelin
2018-08-10 22:34 ` [PATCH 5/8] diff.c: add set_sign to emit_line_0 Stefan Beller
2018-08-13 12:16   ` Johannes Schindelin
2018-08-13 23:42     ` Stefan Beller
2018-08-10 22:34 ` [PATCH 6/8] diff: use emit_line_0 once per line Stefan Beller
2018-08-13 12:22   ` Johannes Schindelin
2018-08-10 22:34 ` [PATCH 7/8] diff.c: compute reverse locally in emit_line_0 Stefan Beller
2018-08-13 12:26   ` Johannes Schindelin
2018-08-13 19:00     ` Stefan Beller
2018-08-10 22:34 ` [PATCH 8/8] diff.c: rewrite emit_line_0 more understandably Stefan Beller
2018-08-13 12:42   ` Johannes Schindelin
2018-08-13 18:57     ` Stefan Beller [this message]
2018-08-13 23:36 ` [PATCH 0/8] Resending sb/range-diff-colors Stefan Beller
2018-08-14  1:41 ` [PATCHv2 " Stefan Beller
2018-08-14  1:41   ` [PATCH 1/8] test_decode_color: understand FAINT and ITALIC Stefan Beller
2018-08-14  1:41   ` [PATCH 2/8] t3206: add color test for range-diff --dual-color Stefan Beller
2018-08-14  1:41   ` [PATCH 3/8] diff.c: simplify caller of emit_line_0 Stefan Beller
2018-08-14  1:41   ` [PATCH 4/8] diff.c: reorder arguments for emit_line_ws_markup Stefan Beller
2018-08-14  1:41   ` [PATCH 5/8] diff.c: add set_sign to emit_line_0 Stefan Beller
2018-08-14  1:41   ` [PATCH 6/8] diff: use emit_line_0 once per line Stefan Beller
2018-08-14  1:41   ` [PATCH 7/8] diff.c: omit check for line prefix in emit_line_0 Stefan Beller
2018-08-14  1:41   ` [PATCH 8/8] diff.c: rewrite emit_line_0 more understandably Stefan Beller
2018-08-14 15:05   ` [PATCHv2 0/8] Resending sb/range-diff-colors Johannes Schindelin
2018-08-14 16:45     ` Stefan Beller
  -- strict thread matches above, loose matches on Subject: below --
2018-07-28  3:04 [PATCH 0/8] Add color test for range-diff, simplify diff.c Stefan Beller
2018-07-28  3:04 ` [PATCH 8/8] diff.c: rewrite emit_line_0 more understandably Stefan Beller
2018-07-28  6:33   ` Eric Sunshine
2018-07-31  0:31 ` [PATCHv2 0/8] Add color test for range-diff, simplify diff.c Stefan Beller
2018-07-31  0:31   ` [PATCH 8/8] diff.c: rewrite emit_line_0 more understandably Stefan Beller

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='CAGZ79kZ=bs84WGeA5TbVUTbQL2ECUSwEJanMKmeWw+xKp-rH5Q@mail.gmail.com' \
    --to=sbeller@google.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).