git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "SZEDER Gábor" <szeder@ira.uka.de>
To: git@vger.kernel.org
Cc: "Eduardo D'Avila" <erdavila@gmail.com>,
	"SZEDER Gábor" <szeder@ira.uka.de>
Subject: [PATCHv3 16/16] bash prompt: mention that PROMPT_COMMAND mode is faster
Date: Mon, 24 Jun 2013 18:39:26 +0200	[thread overview]
Message-ID: <1372091966-19315-17-git-send-email-szeder@ira.uka.de> (raw)
In-Reply-To: <1372091966-19315-1-git-send-email-szeder@ira.uka.de>

__git_ps1() is usually added to the prompt inside a command
substitution, imposing the overhead of fork()ing a subshell.  Using
__git_ps1() for $PROMPT_COMMAND is slightly faster, because it avoids
that command substitution.

Mention this in the comments about setting up the git prompt.

The whole series speeds up the bash prompt on Windows/MSysGit
considerably.  Here are some timing results in three scenarios, each
repeated 10 times:

At the top of the work tree, before:

    $ time for i in {0..9} ; do prompt="$(__git_ps1)" ; done

    real    0m1.716s
    user    0m0.301s
    sys     0m0.772s

  After:

    real    0m0.687s
    user    0m0.075s
    sys     0m0.396s

  After, from $PROMPT_COMMAND:

    $ time for i in {0..9} ; do __git_ps1 '\h:\w' '$ ' ; done

    real    0m0.546s
    user    0m0.075s
    sys     0m0.181s

At the top of the work tree, detached head, before:

    real    0m2.574s
    user    0m0.376s
    sys     0m1.207s

  After:

    real    0m1.139s
    user    0m0.151s
    sys     0m0.500s

  After, from $PROMPT_COMMAND:

    real    0m1.030s
    user    0m0.245s
    sys     0m0.336s

In a subdirectory, during rebase, stash status indicator enabled,
before:

    real    0m3.557s
    user    0m0.495s
    sys     0m1.767s

  After:

    real    0m0.717s
    user    0m0.120s
    sys     0m0.300s

  After, from $PROMPT_COMMAND:

    real    0m0.577s
    user    0m0.047s
    sys     0m0.258s

On Linux the speedup ratio is comparable to Windows, but overall it
was about an order of magnitude faster to begin with.  The last case
from above, repeated 100 times, before:

    $ time for i in {0..99} ; do prompt="$(__git_ps1)" ; done

    real    0m2.806s
    user    0m0.180s
    sys     0m0.264s

  After:

    real    0m0.857s
    user    0m0.020s
    sys     0m0.028s

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---
 contrib/completion/git-prompt.sh | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 7152ae49..daed6a1d 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -15,11 +15,11 @@
 #        Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
 #        ZSH:  PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
 #        the optional argument will be used as format string.
-#    3b) Alternatively, if you are using bash, __git_ps1 can be
-#        used for PROMPT_COMMAND with two parameters, <pre> and
-#        <post>, which are strings you would put in $PS1 before
-#        and after the status string generated by the git-prompt
-#        machinery.  e.g.
+#    3b) Alternatively, for a slighly faster prompt, if you are
+#        using bash, __git_ps1 can be used for PROMPT_COMMAND
+#        with two parameters, <pre> and <post>, which are strings
+#        you would put in $PS1 before and after the status string
+#        generated by the git-prompt machinery.  e.g.
 #        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
 #        ZSH:  precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
 #        will show username, at-sign, host, colon, cwd, then
-- 
1.8.3.1.599.g4459181

  parent reply	other threads:[~2013-06-24 16:46 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-24 16:39 [PATCHv3 00/16] bash prompt speedup SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 01/16] bash prompt: fix redirection coding style in tests SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 02/16] bash prompt: use 'write_script' helper in interactive rebase test SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 03/16] completion, bash prompt: move __gitdir() tests to completion test suite SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 04/16] bash prompt: add a test for symbolic link symbolic refs SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 05/16] bash prompt: print unique detached HEAD abbreviated object name SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 06/16] bash prompt: return early from __git_ps1() when not in a git repository SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 07/16] bash prompt: run 'git rev-parse --git-dir' directly instead of __gitdir() SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 08/16] bash prompt: use bash builtins to find out rebase state SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 09/16] bash prompt: use bash builtins to find out current branch SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 10/16] bash prompt: combine 'git rev-parse' executions in the main code path SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 11/16] bash prompt: combine 'git rev-parse' for detached head SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 12/16] bash prompt: use bash builtins to check for unborn branch for dirty state SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 13/16] bash prompt: use bash builtins to check stash state SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 14/16] bash prompt: avoid command substitution when checking for untracked files SZEDER Gábor
2013-06-24 16:39 ` [PATCHv3 15/16] bash prompt: avoid command substitution when finalizing gitstring SZEDER Gábor
2013-06-24 16:39 ` SZEDER Gábor [this message]
2013-06-24 19:25 ` [PATCHv3 00/16] bash prompt speedup Junio C Hamano
2013-06-25  2:00 ` Eduardo R. D'Avila

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=1372091966-19315-17-git-send-email-szeder@ira.uka.de \
    --to=szeder@ira.uka.de \
    --cc=erdavila@gmail.com \
    --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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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 NNTP newsgroup(s).