From: Matthew DeVore <matvore@google.com>
To: sunshine@sunshineco.com
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Jonathan Tan <jonathantanmy@google.com>,
Junio C Hamano <gitster@pobox.com>,
Jonathan Nieder <jrn@google.com>
Subject: Re: [PATCH v2 1/6] CodingGuidelines: add shell piping guidelines
Date: Tue, 18 Sep 2018 19:11:34 -0700 [thread overview]
Message-ID: <CAMfpvhKejvbgzwtTv93iqLG8fMxqZW_MRTAU0q9bDArqJU2zUg@mail.gmail.com> (raw)
In-Reply-To: <CAPig+cSzddcS+8mx=GMbJ5BP+=fPtza+7UdA5ugN+83NuOHyiw@mail.gmail.com>
On Mon, Sep 17, 2018 at 5:16 PM Eric Sunshine <sunshine@sunshineco.com> wrote:
>
> On Mon, Sep 17, 2018 at 6:24 PM Matthew DeVore <matvore@google.com> wrote:
> > diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
> > @@ -163,6 +163,35 @@ For shell scripts specifically (not exhaustive):
> > + - In a piped sequence which spans multiple lines, put each statement
> > + on a separate line and put pipes on the end of each line, rather
> > + than the start. This means you don't need to use \ to join lines,
> > + since | implies a join already. Also, do not indent subsequent
> > + lines; if you need a sequence to visually stand apart from the
> > + surrounding code, use a blank line before and/or after the piped
> > + sequence.
> > +
> > + (incorrect)
> > + [...]
> > + (correct)
> > + echo '...' > expected
>
> Existing tests seem to favor the name "expect" over "expected", so
> perhaps use that instead.
>
> $ git grep '>expect\b' -- t | wc -l
> 2674
> $ git grep '>expected\b' -- t | wc -l
> 1406
Thank you for clarifying that out for me, but I'm not longer using
that example, so it's moot.
>
> > + git ls-files -s file.1 file.2 file.3 file.4 file.5 |
> > + awk '{print $1}' |
> > + sort >observed
>
> This is not a great example since it flatly contradicts the very next
> bit of advice added by this patch about not placing a Git command
> upstream in a pipe. Perhaps come up with an example which doesn't
> suffer this shortcoming.
Done.
>
> I've seen the advice earlier in the thread of not indenting the
> sub-commands in a pipe, but I find that the result makes it far more
> difficult to see which commands are part of the pipe sequence than
> with them indented, so I'm not convinced that this advice should be in
> the guidelines. (But that just my opinion.)
I'm not totally sure either way, nor do I have a strong opinion. I
agree it's probably better to not codify this in the documentation
until there's a great reason to.
>
> > + - In a pipe, any non-zero exit codes returned by processes besides
> > + the last will be ignored. If there is any possibility some
> > + non-final command in the pipe will raise an error, prefer writing
> > + the output of that command to a temporary file with '>' rather than
> > + pipe it.
>
> It's not so much that we care about losing a non-zero exit code (which
> might be perfectly acceptable depending upon the context) but that we
> care about missing a Git command which outright crashes. So, it might
> make sense to make this text more specific by saying that ("exit code
> indicating a crash" and "Git command") rather than being generic in
> saying only "exit code" and "command".
Fixed.
>
> Also, what about expression like $(git foo) by which a crash of a Git
> command can also be lost? Do we want to talk about that, as well?
Yes, it's probably better to add a point about that. Here is the new
documentation after applying your suggestions:
- If a piped sequence which spans multiple lines, put each statement
on a separate line and put pipes on the end of each line, rather
than the start. This means you don't need to use \ to join lines,
since | implies a join already.
(incorrect)
grep blob verify_pack_result \
| awk -f print_1.awk \
| sort >actual &&
...
(correct)
grep blob verify_pack_result |
awk -f print_1.awk |
sort >actual &&
...
- In a pipe, any exit codes returned by processes besides the last
are ignored. This means that if git crashes at the beginning or
middle of a pipe, it may go undetected. Prefer writing the output
of that command to a temporary file with '>' rather than pipe it.
- The $(git ...) construct also discards git's exit code, so if the
goal is to test that particular command, redirect its output to a
temporary file rather than wrap it with $( ).
next prev parent reply other threads:[~2018-09-19 2:11 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-15 0:02 [PATCH v1 0/2] Cleanup tests for test_cmp argument ordering and "|" placement Matthew DeVore
2018-09-15 0:02 ` [PATCH v1 1/2] t/*: fix pipe placement and remove \'s Matthew DeVore
2018-09-17 16:31 ` Jonathan Nieder
2018-09-17 21:47 ` Matthew DeVore
2018-09-15 0:02 ` [PATCH v1 2/2] t/*: fix ordering of expected/observed arguments Matthew DeVore
2018-09-17 12:56 ` Matthew DeVore
2018-09-15 15:55 ` [PATCH v1 0/2] Cleanup tests for test_cmp argument ordering and "|" placement Junio C Hamano
2018-09-17 22:24 ` [PATCH v2 0/6] Clean up tests for test_cmp arg ordering and pipe placement Matthew DeVore
2018-09-17 22:24 ` [PATCH v2 4/6] tests: Add linter check for pipe placement style Matthew DeVore
2018-09-18 0:34 ` Eric Sunshine
2018-09-19 17:39 ` Matthew DeVore
[not found] ` <cover.1537223021.git.matvore@google.com>
2018-09-17 22:24 ` [PATCH v2 1/6] CodingGuidelines: add shell piping guidelines Matthew DeVore
2018-09-18 0:16 ` Eric Sunshine
2018-09-19 2:11 ` Matthew DeVore [this message]
2018-09-19 12:36 ` Eric Sunshine
2018-09-19 14:24 ` Junio C Hamano
2018-09-19 20:06 ` Matthew DeVore
2018-09-17 22:24 ` [PATCH v2 2/6] tests: standardize pipe placement Matthew DeVore
2018-09-17 22:24 ` [PATCH v2 3/6] t/*: fix ordering of expected/observed arguments Matthew DeVore
2018-09-17 22:24 ` [PATCH v2 4/6] tests: add linter check for pipe placement style Matthew DeVore
2018-09-17 22:24 ` [PATCH v2 5/6] tests: split up pipes Matthew DeVore
2018-09-18 1:30 ` Eric Sunshine
2018-09-19 2:33 ` Matthew DeVore
2018-09-17 22:24 ` [PATCH v2 6/6] t9109-git-svn-props.sh: split up several pipes Matthew DeVore
2018-09-18 1:56 ` Eric Sunshine
2018-09-19 2:56 ` Matthew DeVore
2018-09-19 12:50 ` Eric Sunshine
2018-09-19 18:43 ` Matthew DeVore
2018-09-21 1:43 ` [PATCH v3 0/5] Clean up tests for test_cmp arg ordering and pipe placement Matthew DeVore
2018-09-21 1:43 ` [PATCH v3 1/5] CodingGuidelines: add shell piping guidelines Matthew DeVore
2018-09-21 2:06 ` Eric Sunshine
2018-09-21 21:03 ` Matthew DeVore
2018-09-24 21:03 ` SZEDER Gábor
2018-09-25 21:58 ` Matthew DeVore
2018-09-27 21:18 ` SZEDER Gábor
2018-10-01 23:07 ` Matthew DeVore
2018-09-21 1:43 ` [PATCH v3 2/5] tests: standardize pipe placement Matthew DeVore
2018-09-21 1:43 ` [PATCH v3 3/5] t/*: fix ordering of expected/observed arguments Matthew DeVore
2018-09-21 1:43 ` [PATCH v3 4/5] tests: don't swallow Git errors upstream of pipes Matthew DeVore
2018-09-21 1:43 ` [PATCH v3 5/5] t9109: " Matthew DeVore
2018-10-03 16:25 ` [PATCH v4 0/7] Clean up tests for test_cmp arg ordering and pipe placement Matthew DeVore
2018-10-03 16:25 ` [PATCH v4 1/7] t/README: reformat Do, Don't, Keep in mind lists Matthew DeVore
2018-10-05 6:15 ` Junio C Hamano
2018-10-05 14:57 ` Matthew DeVore
2018-10-03 16:26 ` [PATCH v4 2/7] Documentation: add shell guidelines Matthew DeVore
2018-10-05 16:48 ` Junio C Hamano
2018-10-05 18:21 ` Matthew DeVore
2018-10-03 16:26 ` [PATCH v4 3/7] tests: standardize pipe placement Matthew DeVore
2018-10-03 16:26 ` [PATCH v4 4/7] t/*: fix ordering of expected/observed arguments Matthew DeVore
2018-10-03 16:26 ` [PATCH v4 5/7] tests: don't swallow Git errors upstream of pipes Matthew DeVore
2018-10-05 16:48 ` Junio C Hamano
2018-10-05 17:54 ` Matthew DeVore
2018-10-05 18:12 ` Matthew DeVore
2018-10-03 16:26 ` [PATCH v4 6/7] t9109: " Matthew DeVore
2018-10-03 16:26 ` [PATCH v4 7/7] tests: order arguments to git-rev-list properly Matthew DeVore
2018-10-03 16:33 ` Matthew DeVore
2018-10-05 8:16 ` Junio C Hamano
2018-10-05 21:54 ` [PATCH v5 0/7] subject: Clean up tests for test_cmp arg ordering and pipe placement Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 1/7] t/README: reformat Do, Don't, Keep in mind lists Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 2/7] Documentation: add shell guidelines Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 3/7] tests: standardize pipe placement Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 4/7] t/*: fix ordering of expected/observed arguments Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 5/7] tests: don't swallow Git errors upstream of pipes Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 6/7] t9109: " Matthew DeVore
2018-10-05 21:54 ` [PATCH v5 7/7] tests: order arguments to git-rev-list properly Matthew DeVore
2018-10-06 23:53 ` [PATCH v5 0/7] subject: Clean up tests for test_cmp arg ordering and pipe placement Junio C Hamano
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAMfpvhKejvbgzwtTv93iqLG8fMxqZW_MRTAU0q9bDArqJU2zUg@mail.gmail.com \
--to=matvore@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=jrn@google.com \
--cc=peff@peff.net \
--cc=sunshine@sunshineco.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).