On Fri, Mar 30 2018, Johannes Schindelin wrote [expressing frustrations about Windows test suite slowness]: I've wondered for a while whether it wouldn't be a viable approach to make something like an interpreter for our test suite to get around this problem, i.e. much of it's very repetitive and just using a few shell functions we've defined, what if we had C equivalents of those? Duy had a WIP patch set a while ago to add C test suite support, but I thought what if we turn that inside-out, and instead have a shell interpreter that knows about the likes of test_cmp, and executes them directly? Here's proof of concept as a patch to the dash shell: u dash (debian/master=) $ git diff diff --git a/src/builtins.def.in b/src/builtins.def.in index 4441fe4..b214a17 100644 --- a/src/builtins.def.in +++ b/src/builtins.def.in @@ -92,3 +92,4 @@ ulimitcmd ulimit #endif testcmd test [ killcmd -u kill +testcmpcmd test_cmp diff --git a/src/jobs.c b/src/jobs.c index c2c2332..905563f 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -1502,3 +1502,12 @@ getstatus(struct job *job) { jobno(job), job->nprocs, status, retval)); return retval; } + +#include <stdio.h> +int +testcmpcmd(argc, argv) + int argc; + char **argv; +{ + fprintf(stderr, "Got %d arguments\n", argc); +} I just added that to jobs.c because it was easiest, then test_cmp becomes a builtin: u dash (debian/master=) $ src/dash -c 'type test_cmp' test_cmp is a shell builtin u dash (debian/master=) $ src/dash -c 'echo foo && test_cmp 1 2 3' foo Got 4 arguments I.e. it's really easy to add new built in commands to the dash shell (and probably other shells, but dash is really small & fast). We could carry some patch like that to dash, and also patch it so test-lib.sh could know that that was our own custom shell, and we'd then skip defining functions like test_cmp, and instead use that new builtin. Similarly, it could then be linked to our own binaries, and the test-tool would be a builtin that would appropriately dispatch, and we could even eventually make "git" a shell builtin. I don't have time or interest to work on this now, but thought it was interesting to share. This assumes that something in shellscript like: while echo foo; do echo bar; done Is no slower on Windows than *nix, since it's purely using built-ins, as opposed to something that would shell out.