From: Jonathan Nieder <jrnieder@gmail.com>
To: Ben Walton <bwalton@artsci.utoronto.ca>
Cc: peff@peff.net, gitster@pobox.com, git@vger.kernel.org
Subject: Re: [PATCH] Use SHELL_PATH to fork commands in run_command.c:prepare_shell_cmd
Date: Mon, 26 Mar 2012 23:26:20 -0500 [thread overview]
Message-ID: <20120327042620.GA22547@burratino> (raw)
In-Reply-To: <1332816078-26829-1-git-send-email-bwalton@artsci.utoronto.ca>
Hi again,
Ben Walton wrote:
> The shell spawned in run-command.c:prepare_shell_cmd was hard coded to
> "sh." This was breaking "t7006-pager:command-specific pager" when the
> "sh" found in the PATH happened to be a broken one such as Solaris'
> /usr/bin/sh. (The breakage in this case was due to ^ being
> interpreted the same as | which was seeing two processes forked
> instead of a single sed process.)
Better. But the above is still focusing on what you changed rather
than the intended impact and potential fallout. Remember, the commit
log is where most of git's design documents are stored.
Isn't it something more like this?
Ever since <date or version>, the "command-specific pager" test
from t7006-pager has not been passing on Solaris with the
default value of PATH.
The cause: that test (and some subsequent ones) sets the pager
command used by git log to "sed s/^/foo:/ >actual" which is fine
in a POSIX-compliant sh, but not in Solaris' sh. The
run_command machinery uses plain "sh" as a shell and if the user
PATH at runtime happens to put the ancient system sh before any
modern POSIX-style sh, the ^ is interpreted the same as | and
chaos results.
Or to put it another way, t7006 expects that the shell used to
interpret GIT_PAGER is a POSIX-style shell and run_command's
shell feature fails to deliver.
To fix this:
a. instead of launching a shell on its own, run_command could
call system() or popen(). This launches a POSIX shell on
Solaris as long as _POSIX_SOURCE is defined.
b. the git wrapper could prepend SANE_TOOL_PATH to $PATH for
builtin commands for consistency with scripted commands that
do that using git-sh-setup. If we're lucky, the first "sh"
command found in the new PATH would be a suitable shell,
though git's current scripts do not rely on that.
c. the run_command machinery could use the same SHELL_PATH
shell that is used by the git filter-branch script and in
all script's #! lines.
However:
- (a) means losing the ability to open a bidirectional pipe to a
filter script. It would also break git for Windows, where
system() uses cmd.exe instead of a POSIX-style shell (see
v1.7.5-rc0~144^2, "alias: use run_command api to execute
aliases, 2011-01-07).
- On Solaris systems with schilyutils in /opt/csw/bin at the
beginning of SANE_TOOL_PATH, (b) finds /opt/csw/bin/sh which
is another ancient Bourne-style shell with the same problem.
So let's go with (c).
After this patch, $GIT_PAGER is interpreted by the same shell
in scripted commands which use the git_pager function that uses
"eval" and builtins which use the run_command machinery to
launch the interpreter specified as SHELL_PATH when git was built.
Just my two cents,
Jonathan
next prev parent reply other threads:[~2012-03-27 4:27 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-25 12:31 [PATCH 0/2] Make run-command.c honour SHELL_PATH Ben Walton
2012-03-25 12:31 ` [PATCH 1/2] run-command.c: Define SHELL_PATH macro for use in prepare_shell_cmd Ben Walton
2012-03-25 12:31 ` [PATCH 2/2] Makefile: Set EXTRA_CPPFLAGS during the compilation of run-command Ben Walton
2012-03-26 1:11 ` [PATCH 0/2] Make run-command.c honour SHELL_PATH Jonathan Nieder
2012-03-26 13:38 ` Ben Walton
2012-03-26 18:12 ` Jeff King
2012-03-26 18:19 ` Ben Walton
2012-03-26 18:24 ` Jeff King
2012-03-27 2:41 ` [PATCH] Use SHELL_PATH to fork commands in run_command.c:prepare_shell_cmd Ben Walton
2012-03-27 3:29 ` Jeff King
2012-03-27 3:34 ` Jeff King
2012-03-27 5:01 ` Jonathan Nieder
2012-03-27 5:12 ` Jeff King
2012-03-27 5:53 ` Jonathan Nieder
2012-03-27 6:23 ` Johannes Sixt
2012-03-28 2:46 ` Ben Walton
2012-03-28 4:22 ` Jeff King
2012-03-28 23:26 ` [PATCH] Use SHELL_PATH from build system " Ben Walton
2012-03-29 4:02 ` Junio C Hamano
2012-03-29 6:09 ` Jonathan Nieder
[not found] ` <1333073831-sup-5734@pinkfloyd.chass.utoronto.ca>
2012-03-30 6:32 ` Jonathan Nieder
2012-03-29 23:00 ` Jonathan Nieder
2012-03-28 23:28 ` [PATCH] Use SHELL_PATH to fork commands " Ben Walton
2012-03-27 4:26 ` Jonathan Nieder [this message]
2012-03-27 4:49 ` Jonathan Nieder
2012-03-27 2:45 ` [PATCH 0/2] Make run-command.c honour SHELL_PATH Ben Walton
2012-03-26 18:17 ` Jonathan Nieder
2012-03-26 18:08 ` Jeff King
2012-03-26 17:58 ` 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=20120327042620.GA22547@burratino \
--to=jrnieder@gmail.com \
--cc=bwalton@artsci.utoronto.ca \
--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 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).