git-mergetool spawns an enormous amount of processes. For this reason,
the test script, t7610, is exceptionally slow, in particular, on
Windows. Most of the processes are invocations of git, but there are
also some that can be replaced with shell builtins.
I've measured the number of processes with
ps; ./t7610-mergetool.sh >/dev/null; ps
on a quiet system and the number of non-git commands invoked with
strace -e execve -f -o /tmp/git.strace ./t7610-mergetool.sh
grep 'execve(' /tmp/git.strace | grep -v 'execve(".home' | wc -l
baseline:
15628 pts/1 00:00:00 ps
29413 pts/1 00:00:00 ps
=> 13785 processes
=> 3082 non-git commands
t7610-mergetool: do not place pipelines headed by `yes` in subshells
12620 pts/1 00:00:00 ps
26348 pts/1 00:00:00 ps
=> 13728 processes
=> 3082 non-git commands
mergetool: dissect strings with shell variable magic instead of `expr`
8766 pts/1 00:00:00 ps
21913 pts/1 00:00:00 ps
=> 13147 processes
=> 2521 non-git commands
mergetool: use shell variable magic instead of `awk`
2081 pts/1 00:00:00 ps
14393 pts/1 00:00:00 ps
=> 12312 processes
=> 2007 non-git commands
The reduction of processes is not as dramatic as I hoped, but still
more than 10%.
Johannes Sixt (3):
t7610-mergetool: do not place pipelines headed by `yes` in subshells
mergetool: dissect strings with shell variable magic instead of `expr`
mergetool: use shell variable magic instead of `awk`
git-mergetool.sh | 45 ++++++++----
t/t7610-mergetool.sh | 170 +++++++++++++++++++++----------------------
2 files changed, 116 insertions(+), 99 deletions(-)
--
2.21.0.285.gc38d92e052