From: Jeff King <email@example.com> To: Thomas Guyot-Sionnest <firstname.lastname@example.org> Cc: Taylor Blau <email@example.com>, firstname.lastname@example.org, Thomas Guyot-Sionnest <email@example.com> Subject: Re: [PATCH 2/2] Allow passing pipes for input pipes to diff --no-index Date: Fri, 18 Sep 2020 13:19:50 -0400 [thread overview] Message-ID: <20200918171950.GA183026@coredump.intra.peff.net> (raw) In-Reply-To: <CALqVohfFjsh-2jZLNNwON_V95Dfh-aEh1aMb53t4NQrM0qz1tQ@mail.gmail.com> On Fri, Sep 18, 2020 at 12:34:48PM -0400, Thomas Guyot-Sionnest wrote: > Hi Taylor, > > On Fri, 18 Sep 2020 at 10:36, Taylor Blau <firstname.lastname@example.org> wrote: > > On Fri, Sep 18, 2020 at 07:32:56AM -0400, Thomas Guyot-Sionnest wrote: > > > A very handy way to pass data to applications is to use the <() process > > > substitution syntax in bash variants. It allow comparing files streamed > > > from a remote server or doing on-the-fly stream processing to alter the > > > diff. These are usually implemented as a symlink that points to a bogus > > > name (ex "pipe:") but opens as a pipe. > > > > This is true in bash, but sh does not support process substitution with > > <(). > > Bash, ksh, zsh and likely any more moden shell. Other programming > languages also setup such pipes. It's much cleaner than creating temp > files and cleaning them up and in some cases faster too (I've ran > diff's like this over GB's of test data, it's very handy to remove > known patterns that would cause needless diffs). Yeah, it's definitely a reasonable thing to want (see below). And from a portability perspective, it is outside of Git's scope; users with those shells can use the feature, and people on other shells don't have to care. But we do have to account for this in the test suite, which must be able to run under a vanilla POSIX shell. So you'd probably want to set up a prerequisite that lets us skip these tests on other shells, like: test_lazy_prereq PROCESS_SUBSTITUTION ' echo foo >expect && cat >actual <(echo foo) && test_cmp expect actual ' test_expect_success PROCESS_SUBSTITUTION 'some test...' ' # safe because we skip this test on shells that do not support it git diff --no-index <(cat whatever) ' Though it is a little sad that people running the suite with a vanilla /bin/sh like dash wouldn't ever run the tests. I wonder if there's a more portable way to formulate it. Getting back to the overall feature, this is definitely something that has come up before. The last I know of is: https://email@example.com/ which everybody seemed to like the direction of; I suspect the original author (cc'd) just never got around to it again. Compared to this approach, it uses a command-line option to avoid dereferencing symlinks. That puts an extra burden on the caller to pass the option, but it's way less magical; you could drop all of the "does this look like a symlink to a pipe" heuristics. It would also be much easier to test. ;) -Peff
next prev parent reply other threads:[~2020-09-18 17:19 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-18 11:32 Allow passing pipes to diff --no-index + bugfix Thomas Guyot-Sionnest 2020-09-18 11:32 ` [PATCH 1/2] diff: Fix modified lines stats with --stat and --numstat Thomas Guyot-Sionnest 2020-09-18 14:46 ` Taylor Blau 2020-09-18 15:10 ` Thomas Guyot-Sionnest 2020-09-18 17:37 ` Jeff King 2020-09-18 18:00 ` Thomas Guyot-Sionnest 2020-09-20 4:53 ` Thomas Guyot 2020-09-18 17:27 ` Jeff King 2020-09-18 17:52 ` Thomas Guyot-Sionnest 2020-09-18 18:06 ` Junio C Hamano 2020-09-23 19:16 ` Johannes Schindelin 2020-09-23 19:23 ` Junio C Hamano 2020-09-23 20:44 ` Johannes Schindelin 2020-09-24 4:49 ` Thomas Guyot 2020-09-24 5:24 ` [PATCH v3] " Thomas Guyot-Sionnest 2020-09-24 7:41 ` [PATCH v4] " Thomas Guyot-Sionnest 2020-09-24 6:40 ` [PATCH 1/2] " Junio C Hamano 2020-09-24 7:13 ` Thomas Guyot 2020-09-24 17:19 ` Junio C Hamano 2020-09-24 17:38 ` Junio C Hamano 2020-09-23 15:05 ` Johannes Schindelin 2020-09-20 13:09 ` [PATCH v2] " Thomas Guyot-Sionnest 2020-09-20 15:39 ` Taylor Blau 2020-09-20 16:38 ` Thomas Guyot 2020-09-20 19:11 ` Junio C Hamano 2020-09-20 20:08 ` Junio C Hamano 2020-09-20 20:36 ` Junio C Hamano 2020-09-20 22:15 ` Junio C Hamano 2020-09-21 19:26 ` Jeff King 2020-09-21 21:51 ` Junio C Hamano 2020-09-21 22:20 ` Jeff King 2020-09-21 22:37 ` Junio C Hamano 2020-09-18 11:32 ` [PATCH 2/2] Allow passing pipes for input pipes to diff --no-index Thomas Guyot-Sionnest 2020-09-18 14:36 ` Taylor Blau 2020-09-18 16:34 ` Thomas Guyot-Sionnest 2020-09-18 17:19 ` Jeff King [this message] 2020-09-18 17:21 ` Jeff King 2020-09-18 17:39 ` Thomas Guyot-Sionnest 2020-09-18 17:48 ` Junio C Hamano 2020-09-18 18:02 ` Jeff King 2020-09-20 12:54 ` Thomas Guyot 2020-09-21 19:31 ` Jeff King 2020-09-21 20:14 ` Junio C Hamano 2020-09-18 17:58 ` Taylor Blau 2020-09-18 18:05 ` Jeff King 2020-09-18 17:20 ` Jeff King 2020-09-18 18:00 ` Taylor Blau 2020-09-18 21:56 ` brian m. carlson 2020-09-18 17:51 ` Allow passing pipes to diff --no-index + bugfix Junio C Hamano 2020-09-18 18:24 ` Thomas Guyot-Sionnest
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=20200918171950.GA183026@coredump.intra.peff.net \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --subject='Re: [PATCH 2/2] Allow passing pipes for input pipes to diff --no-index' \ /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
Code repositories for project(s) associated with this 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).