From: Patrick Steinhardt <ps@pks.im>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH 2/4] contrib/subtree: stop using `-o` to test for number of args
Date: Fri, 10 Nov 2023 11:18:41 +0100 [thread overview]
Message-ID: <ZU4DgaVfLhSags-r@tanuki> (raw)
In-Reply-To: <20231109185515.GD2711684@coredump.intra.peff.net>
[-- Attachment #1: Type: text/plain, Size: 2282 bytes --]
On Thu, Nov 09, 2023 at 01:55:15PM -0500, Jeff King wrote:
> On Thu, Nov 09, 2023 at 11:53:35AM +0100, Patrick Steinhardt wrote:
>
> > Functions in git-subtree.sh all assert that they are being passed the
> > correct number of arguments. In cases where we accept a variable number
> > of arguments we assert this via a single call to `test` with `-o`, which
> > is discouraged by our coding guidelines.
> >
> > Convert these cases to stop doing so.
>
> OK. I think these ones really are safe, because they're only expanding
> $#, but I agree with the principle to follow the guidelines.
>
> > # Usage: process_subtree_split_trailer SPLIT_HASH MAIN_HASH [REPOSITORY]
> > process_subtree_split_trailer () {
> > - assert test $# = 2 -o $# = 3
> > + assert test $# -ge 2
> > + assert test $# -le 3
>
> It took me a minute to figure out why we were swapping "=" for "-ge". It
> is because we want to logical-OR the two conditions, but "assert"
> requires that we test one at a time. I think that is probably worth
> explaining in the commit message.
I really hate to admit how long I've pondered over this patch series in
total, up to the point where I did a `git rebase --reset-author-date` at
the end just so that it's not obvious. So I totally get everyone who
needs to stop and think for a bit here.
Will adapt the commit message.
Patrick
> > @@ -916,7 +919,7 @@ cmd_split () {
> > if test $# -eq 0
> > then
> > rev=$(git rev-parse HEAD)
> > - elif test $# -eq 1 -o $# -eq 2
> > + elif test $# -eq 1 || test $# -eq 2
>
> OK, this one is a straight-forward use of "||".
>
> > cmd_merge () {
> > - test $# -eq 1 -o $# -eq 2 ||
> > + if test $# -lt 1 || test $# -gt 2
> > + then
> > die "fatal: you must provide exactly one revision, and optionally a repository. Got: '$*'"
> > + fi
> > +
>
> But here we swap "-eq" for other operators. We have to because we went
> from "||" to an "if". I think what you have here is correct, but you
> could also write:
>
> if ! { test $# -eq 1 || test $# -eq 2; }
>
> (I am OK with either, it just took me a minute to verify that your
> conversion was correct. But that is a one-time issue now while
> reviewing, and I think the code is readable going forward).
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-11-10 10:18 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-09 10:53 [PATCH 0/4] Replace use of `test <expr> -o/a <expr>` Patrick Steinhardt
2023-11-09 10:53 ` [PATCH 1/4] global: convert trivial usages of `test <expr> -a/-o <expr>` Patrick Steinhardt
2023-11-09 11:41 ` Junio C Hamano
2023-11-09 18:48 ` Jeff King
2023-11-09 22:56 ` Junio C Hamano
2023-11-10 10:18 ` Patrick Steinhardt
2023-11-09 10:53 ` [PATCH 2/4] contrib/subtree: stop using `-o` to test for number of args Patrick Steinhardt
2023-11-09 18:55 ` Jeff King
2023-11-09 23:02 ` Junio C Hamano
2023-11-10 10:18 ` Patrick Steinhardt
2023-11-10 23:27 ` Junio C Hamano
2023-11-10 10:18 ` Patrick Steinhardt [this message]
2023-11-09 10:53 ` [PATCH 3/4] contrib/subtree: convert subtree type check to use case statement Patrick Steinhardt
2023-11-09 18:56 ` Jeff King
2023-11-09 10:53 ` [PATCH 4/4] Makefile: stop using `test -o` when unlinking duplicate executables Patrick Steinhardt
2023-11-10 10:01 ` [PATCH v2 0/4] Replace use of `test <expr> -o/a <expr>` Patrick Steinhardt
2023-11-10 10:01 ` [PATCH v2 1/4] global: convert trivial usages of `test <expr> -a/-o <expr>` Patrick Steinhardt
2023-11-10 21:44 ` Jeff King
2023-11-11 0:14 ` Junio C Hamano
2023-11-11 0:20 ` Junio C Hamano
2023-11-13 7:12 ` Patrick Steinhardt
2023-11-11 0:12 ` Junio C Hamano
2023-11-10 10:01 ` [PATCH v2 2/4] contrib/subtree: stop using `-o` to test for number of args Patrick Steinhardt
2023-11-10 10:01 ` [PATCH v2 3/4] contrib/subtree: convert subtree type check to use case statement Patrick Steinhardt
2023-11-10 10:01 ` [PATCH v2 4/4] Makefile: stop using `test -o` when unlinking duplicate executables Patrick Steinhardt
2023-11-10 21:46 ` [PATCH v2 0/4] Replace use of `test <expr> -o/a <expr>` Jeff King
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=ZU4DgaVfLhSags-r@tanuki \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/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.