]> git.ipfire.org Git - thirdparty/git.git/blobdiff - run-command.c
run-command: optimize out useless shell calls
[thirdparty/git.git] / run-command.c
index b2bdcfda3df9cc9a50453dae33926da7377a7b57..47ced570bd58d7146bf226fcbb0fdfdf06b99be5 100644 (file)
@@ -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 (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 (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);
+               }
        }
 
        for (argc = 0; argv[argc]; argc++)