git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Sixt <j6t@kdbg.org>
To: git@vger.kernel.org
Cc: szeder.dev@gmail.com, gitster@pobox.com, Johannes Sixt <j6t@kdbg.org>
Subject: [PATCH v2 0/4] Reduce number of processes spawned by git-mergetool
Date: Wed, 12 Jun 2019 18:33:44 +0200	[thread overview]
Message-ID: <cover.1560356675.git.j6t@kdbg.org> (raw)
In-Reply-To: <cover.1560152205.git.j6t@kdbg.org>

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. There are
also some that can be replaced with shell builtins.

I've measured the number of processes and the number of
non-git commands invoked with

  strace -e execve,clone -f -o /tmp/git.strace ./t7610-mergetool.sh
  # processes:
  grep 'stack=NULL' /tmp/git.strace | wc -l
  # non-git commands:
  grep 'execve(' /tmp/git.strace | grep -v 'execve(".home' | wc -l

          non-git
processes commands
13775     3082    baseline
13690     3082    t7610-mergetool: do not place pipelines headed by `yes` in subshells
13645     3082    t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
13084     2521    mergetool: dissect strings with shell variable magic instead of `expr`
11542     2007    mergetool: use shell variable magic instead of `awk`

Notes on v2:
- Followed Gábor's suggestion to transform test ($cat ..) = txt
  (new patch 2).  It does not help a lot, but neither does
  patch 1, the pipe-in-subshell conversion.  Both are foremost
  clean-ups.
- Commit message tweaks; see below.
- Did not include measurement results in the commit messages, because
  I would have to repeat the measurement method every time.

Johannes Sixt (4):
  t7610-mergetool: do not place pipelines headed by `yes` in subshells
  t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
  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 | 309 +++++++++++++++++++++++++------------------
 2 files changed, 208 insertions(+), 146 deletions(-)

Range-diff against v1:
1:  75c812bd48 = 1:  75c812bd48 t7610-mergetool: do not place pipelines headed by `yes` in subshells
-:  ---------- > 2:  82bafc90de t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
2:  2a33ca20af ! 3:  ad34a9a7ab mergetool: dissect strings with shell variable magic instead of `expr`
    @@ -4,7 +4,7 @@
     
         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
    +    Windows. Most of the processes are invocations of git. There are
         also some that can be replaced with shell builtins. Do so with `expr`.
     
         Signed-off-by: Johannes Sixt <j6t@kdbg.org>
3:  d6675b0291 ! 4:  99a6a89339 mergetool: use shell variable magic instead of `awk`
    @@ -4,7 +4,7 @@
     
         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
    +    Windows. Most of the processes are invocations of git. There are
         also some that can be replaced with shell builtins. Avoid repeated
         calls of `git ls-files` and `awk`.
     
-- 
2.21.0.285.gc38d92e052


  parent reply	other threads:[~2019-06-12 16:34 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-10  8:58 [PATCH 0/3] Reduce number of processes spawned by git-mergetool Johannes Sixt
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 ` Johannes Sixt [this message]
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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1560356675.git.j6t@kdbg.org \
    --to=j6t@kdbg.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=szeder.dev@gmail.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).