From: Paul Smith <paul@mad-scientist.net>
To: Elijah Newren <newren@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Anyone know why git ls-remote output might be corrupted?
Date: Fri, 09 Jun 2023 11:33:42 -0400 [thread overview]
Message-ID: <e6f9334dd93c683b97ecdf61eb06bbe28b0a4e30.camel@mad-scientist.net> (raw)
In-Reply-To: <CABPp-BF9Xjww=BBkL4qQcENo-UCHd8eEj334ho1iO1EMbGxhZw@mail.gmail.com>
On Fri, 2023-06-02 at 18:12 -0700, Elijah Newren wrote:
> Sounds kind of like
> https://lore.kernel.org/git/6786526.72e2EbofS7@devpool47/ which also
> triggered for some other tooling and then was reduced down to some
> shell commands. Unfortunately, the thread ended without a lot of
> resolution other than "don't mix stdout and stderr" and "if we slow
> down the network connection somehow, that'll avoid the problem".
As I was riding my bike home last week I had this exact same epiphany.
So, I examined my script and discovered that indeed, I was using
subprocess.PIPE for stderr, which is the Python equivalent of the
shell's 2>&1 operation. So, both stdout and stderr are going to the
same place.
I also checked and indeed, the git ls-remote command does print to both
stdout and stderr as part of its "standard" behavior:
$ git ls-remote --heads >/dev/null
From git@git:myrepo
This is unexpected to me, although of course there's nothing inherently
wrong with it but usually you don't expect "regular" output to go to
stderr. I suppose the idea is that people can run:
$ git ls-remote --heads 2>/dev/null
if they want just the output without the header.
Anyway, I modified my scripting to keep stdout and stderr separate and
I haven't heard anything about things continuing to fail so I guess
that was the problem.
The mode of failure is very very bizarre to me: first why is it just
one "bogus" character embedded in the output? Second why are 60 lines
just dropped? Third where did the REST of the stderr output go?
And finally, why did this not fail 100% of the time on Linux? I can
believe that Windows pipe behavior is not POSIX and maybe Python's
emulation of it is imperfect, but surely that is not the case on Linux
and we would ALWAYS get the full results of both stdout and stderr on
Linux, even if mixed together?!?!
The mysteries never end.
Thanks all; hopefully this helps someone else.
next prev parent reply other threads:[~2023-06-09 15:33 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-02 18:59 Anyone know why git ls-remote output might be corrupted? Paul Smith
2023-06-02 19:12 ` Paul Smith
2023-06-02 19:34 ` rsbecker
2023-06-02 19:53 ` Paul Smith
2023-06-02 20:02 ` rsbecker
2023-06-02 20:12 ` Paul Smith
2023-06-03 1:17 ` Elijah Newren
2023-06-03 1:12 ` Elijah Newren
2023-06-04 6:00 ` Jeff King
2023-06-04 6:25 ` Jeff King
2023-06-04 6:30 ` Jeff King
2023-06-09 15:33 ` Paul Smith [this message]
2023-06-09 18:58 ` Junio C Hamano
2023-06-12 19:59 ` Paul Smith
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=e6f9334dd93c683b97ecdf61eb06bbe28b0a4e30.camel@mad-scientist.net \
--to=paul@mad-scientist.net \
--cc=git@vger.kernel.org \
--cc=newren@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).