Git Mailing List Archive on lore.kernel.org
 help / color / Atom feed
From: Johannes Sixt <j6t@kdbg.org>
To: git@vger.kernel.org
Cc: Johannes Sixt <j6t@kdbg.org>
Subject: [PATCH 0/3] Reduce number of processes spawned by git-mergetool
Date: Mon, 10 Jun 2019 10:58:57 +0200
Message-ID: <cover.1560152205.git.j6t@kdbg.org> (raw)

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


             reply index

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-10  8:58 Johannes Sixt [this message]
2019-06-10  8:58 ` [PATCH 1/3] t7610-mergetool: do not place pipelines headed by `yes` in subshells Johannes Sixt
2019-06-10  9:59   ` SZEDER Gábor
2019-06-10 17:23     ` Junio C Hamano
2019-06-10 17:56       ` SZEDER Gábor
2019-06-10 18:29     ` Johannes Schindelin
2019-06-10 18:57       ` SZEDER Gábor
2019-06-10  8:58 ` [PATCH 2/3] mergetool: dissect strings with shell variable magic instead of `expr` Johannes Sixt
2019-06-10 17:17   ` Junio C Hamano
2019-06-10 21:34     ` Johannes Sixt
2019-06-10  8:59 ` [PATCH 3/3] mergetool: use shell variable magic instead of `awk` Johannes Sixt
2019-06-10 17:21   ` Junio C Hamano
2019-06-10 22:01     ` Johannes Sixt
2019-06-12 16:33 [PATCH v2 0/4] Reduce number of processes spawned by git-mergetool Johannes Sixt
2019-06-12 16:33 ` [PATCH v2 1/4] t7610-mergetool: do not place pipelines headed by `yes` in subshells Johannes Sixt
2019-06-12 16:33 ` [PATCH v2 2/4] t7610-mergetool: use test_cmp instead of test $(cat file) = $txt Johannes Sixt
2019-06-12 16:33 ` [PATCH v2 3/4] mergetool: dissect strings with shell variable magic instead of `expr` Johannes Sixt
2019-06-12 16:33 ` [PATCH v2 4/4] mergetool: use shell variable magic instead of `awk` Johannes Sixt

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=cover.1560152205.git.j6t@kdbg.org \
    --to=j6t@kdbg.org \
    --cc=git@vger.kernel.org \
    /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

Git Mailing List Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/git/0 git/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 git git/ https://lore.kernel.org/git \
		git@vger.kernel.org
	public-inbox-index git

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.git


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git