git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "dsal3389 via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, dsal3389 <dsal3389@gmail.com>
Subject: Re: [PATCH 1/2] python file more pytonic, adjust "if" and "for"
Date: Thu, 06 Oct 2022 10:16:43 -0700	[thread overview]
Message-ID: <xmqqh70glvno.fsf@gitster.g> (raw)
In-Reply-To: 71da6f53a44cd3390d122ff2c0446824313e5101.1665056747.git.gitgitgadget@gmail.com

"dsal3389 via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: dsal3389 <dsal3389@gmail.com>
>
> L371
> redesign few lines to get rid of the "else" statement
>
> L404
> moved the if statement below another if statement that
> checks if it should exit the code, only if it doesnt need to,
> then we can iterate the for loop and decode the text
>
> Changes to be committed:
> 	modified:   git-p4.py

Compare this with the commits by others in "git log --no-merges"
output of this project.

> Signed-off-by: Daniel Sonbolian <dsal3389@gmail.com>

Please have this on the in-body "From:" line we see above.  I think
GitGitGadget takes it from the author of the commit object it sends
out, so you may have to go back to your branch and fix them with
"rebase -i".

> ---
>  git-p4.py | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/git-p4.py b/git-p4.py
> index d26a980e5ac..0ba5115fa2e 100755
> --- a/git-p4.py
> +++ b/git-p4.py
> @@ -368,10 +368,9 @@ def read_pipe(c, ignore_error=False, raw=False, *k, **kw):
>         """
>      retcode, out, err = read_pipe_full(c, *k, **kw)
>      if retcode != 0:
> -        if ignore_error:
> -            out = ""
> -        else:
> +        if not ignore_error:
>              die('Command failed: {}\nError: {}'.format(' '.join(c), err))
> +        out = ""

I think the code with or without the patch is about the same
complexity, but people tend to have harder time understanding logic
that involves double negation, so I can imagine that some readers
may find the code with the patch harder to understand.  In any case,
the difference falls into the "it is minor enough that once it is
written in one way, it is not worth the churn to rewrite it in the
other way" category.

> @@ -400,10 +399,10 @@ def read_pipe_lines(c, raw=False, *k, **kw):
>      p = subprocess.Popen(c, stdout=subprocess.PIPE, *k, **kw)
>      pipe = p.stdout
>      lines = pipe.readlines()
> -    if not raw:
> -        lines = [decode_text_stream(line) for line in lines]
>      if pipe.close() or p.wait():
>          die('Command failed: {}'.format(' '.join(c)))
> +    if not raw:
> +        lines = [decode_text_stream(line) for line in lines]
>      return lines

This is in the same "the difference is minor enough that once it is
written in one way, it is not worth the churn to rewrite it in the
other way" category.  Your reasoning might be that massaging of the
lines is only needed when we do not die() and it is more efficient
to check and die first, but that is optimizing for the wrong case.
The code should not die in its normal operation and there is no
point optimizing for an error code path.

One thing that might deserve benchmarking and optimizing here is if
we can do better than reading everything in lines array and holding
onto the original until decoding the whole thing at once at the end
of input.  If converting each line and appending the result as it is
read from the pipe turns out to be more efficient, it may be an
optimization worth considering, as it is optimizaing for the normal
case.


  parent reply	other threads:[~2022-10-06 17:16 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-06 11:45 [PATCH 0/2] Minor Refactors: remove useless else dsal3389 via GitGitGadget
2022-10-06 11:45 ` [PATCH 1/2] python file more pytonic, adjust "if" and "for" dsal3389 via GitGitGadget
2022-10-06 16:02   ` Victoria Dye
2022-10-06 17:16   ` Junio C Hamano [this message]
2022-10-06 11:45 ` [PATCH 2/2] removed else statement dsal3389 via GitGitGadget
2022-10-06 16:14   ` Victoria Dye
2022-10-07 18:35     ` Junio C Hamano
2022-10-06 17:16   ` Junio C Hamano
2022-10-06 17:06 ` [PATCH 0/2] Minor Refactors: remove useless else Junio C Hamano
2022-10-07 14:38 ` [PATCH v2 0/2] git.c: improve readability | git-p4: minor optimization Daniel Sonbolian via GitGitGadget
2022-10-07 14:38   ` [PATCH v2 1/2] git-p4: minor optimization in read_pip_lines Daniel Sonbolian via GitGitGadget
2022-10-07 15:17     ` Phillip Wood
2022-10-07 17:28       ` Junio C Hamano
2022-10-07 14:38   ` [PATCH v2 2/2] git.c: improve code readability in cmd_main Daniel Sonbolian via GitGitGadget
2022-10-08 16:21   ` [PATCH v3] " Daniel Sonbolian via GitGitGadget

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=xmqqh70glvno.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=dsal3389@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.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).