run-command: optimize out useless shell calls
If there are no metacharacters in the program to be run, we can just skip running the shell entirely and directly exec the program. The metacharacter test is pulled verbatim from launch_editor, which already implements this optimization. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ac0ba18df0
commit
f445644fd2
@ -28,15 +28,17 @@ static const char **prepare_shell_cmd(const char **argv)
|
||||
if (argc < 1)
|
||||
die("BUG: shell command is empty");
|
||||
|
||||
nargv[nargc++] = "sh";
|
||||
nargv[nargc++] = "-c";
|
||||
if (strcspn(argv[0], "|&;<>()$`\\\"' \t\n*?[#~=%") != strlen(argv[0])) {
|
||||
nargv[nargc++] = "sh";
|
||||
nargv[nargc++] = "-c";
|
||||
|
||||
if (argc < 2)
|
||||
nargv[nargc++] = argv[0];
|
||||
else {
|
||||
struct strbuf arg0 = STRBUF_INIT;
|
||||
strbuf_addf(&arg0, "%s \"$@\"", argv[0]);
|
||||
nargv[nargc++] = strbuf_detach(&arg0, NULL);
|
||||
if (argc < 2)
|
||||
nargv[nargc++] = argv[0];
|
||||
else {
|
||||
struct strbuf arg0 = STRBUF_INIT;
|
||||
strbuf_addf(&arg0, "%s \"$@\"", argv[0]);
|
||||
nargv[nargc++] = strbuf_detach(&arg0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
for (argc = 0; argv[argc]; argc++)
|
||||
|
Loading…
Reference in New Issue
Block a user