git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv3 00/16] bash prompt speedup

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Jun 24, 2013, 16:39 UTC
Message-ID
<1372091966-19315-1-git-send-email-szeder@ira.uka.de>
Hi,

displaying the git-specific bash prompt on Windows/MinGW takes quite long, long enough to be noticeable. This is mainly caused by the numerous fork()s and exec()s to create subshells and run git or other commands, which are rather expensive on Windows.

This patch series eliminates many command substitutions and command executions in __git_ps1() from top to bottom by replacing them with bash builtins or consolidating them. A few timing results are shown in the log message of the last patch.

Changes since v2 [1]:
 - The detached HEAD abbreviated object name is now unique and
   respects core.abbrev; see patches 5 and 11, replacing v2's patch 9.
   (This is why I asked the detached HEAD before root commit thing
   yesterday.)  
 - Patches 12 and 16 are new.
 - Incorporated Peff's suggestion about using the 'write_script'
   helper into patch 2.
 - Incorporated Eric's typofix.
 - Rephrased a few commit messages.

It applies on top of current master; 2847cae8 (prompt: squelch error output from cat, 2013-06-14) graduated recently.

This patch series will conflict with Eduardo's work on refactoring the colorizing function, and the conflict is not trivial. Although there are still some open questions left with that series (using tput, zsh tests), those won't affect the conflicts between the two patch series. So, for the convenience of our maintainer, I picked up Eduardo's series, took the liberty to apply a fixup commit on top with my suggestions from [2], merged the two series, and published the result at:

  https://github.com/szeder/git.git bash-prompt-speedup-and-color-refactorization

Eduardo, could you please also check that my conflict resolution is correct? Thanks.

Best, Gábor

[1] - http://thread.gmane.org/gmane.comp.version-control.git/228132 [2] - http://article.gmane.org/gmane.comp.version-control.git/228707

SZEDER Gábor (16):
  bash prompt: fix redirection coding style in tests
  bash prompt: use 'write_script' helper in interactive rebase test
  completion, bash prompt: move __gitdir() tests to completion test
    suite
  bash prompt: add a test for symbolic link symbolic refs
  bash prompt: print unique detached HEAD abbreviated object name
  bash prompt: return early from __git_ps1() when not in a git
    repository
  bash prompt: run 'git rev-parse --git-dir' directly instead of
    __gitdir()
  bash prompt: use bash builtins to find out rebase state
  bash prompt: use bash builtins to find out current branch
  bash prompt: combine 'git rev-parse' executions in the main code path
  bash prompt: combine 'git rev-parse' for detached head
  bash prompt: use bash builtins to check for unborn branch for dirty
    state
  bash prompt: use bash builtins to check stash state
  bash prompt: avoid command substitution when checking for untracked
    files
  bash prompt: avoid command substitution when finalizing gitstring
  bash prompt: mention that PROMPT_COMMAND mode is faster
 contrib/completion/git-completion.bash |   2 -
 contrib/completion/git-prompt.sh       | 241 ++++++++++++------------
 t/t9902-completion.sh                  | 134 ++++++++++++++
 t/t9903-bash-prompt.sh                 | 323 +++++++++++----------------------
 4 files changed, 367 insertions(+), 333 deletions(-)
-- 
1.8.3.1.599.g4459181
Next: SZEDER Gábor
Message 1 of 19 in “[PATCHv3 00/16] bash prompt speedup”
  1. SZEDER GáborJun 24, 2013
  2. 01/16 bash prompt: fix redirection coding style in testsSZEDER Gábor, Jun 24, 2013
  3. 02/16 bash prompt: use 'write_script' helper in interactive rebase testSZEDER Gábor, Jun 24, 2013
  4. 03/16 completion, bash prompt: move __gitdir() tests to completion test suiteSZEDER Gábor, Jun 24, 2013
  5. 04/16 bash prompt: add a test for symbolic link symbolic refsSZEDER Gábor, Jun 24, 2013
  6. 05/16 bash prompt: print unique detached HEAD abbreviated object nameSZEDER Gábor, Jun 24, 2013
  7. 06/16 bash prompt: return early from __git_ps1() when not in a git repositorySZEDER Gábor, Jun 24, 2013
  8. 07/16 bash prompt: run 'git rev-parse --git-dir' directly instead of __gitdir()SZEDER Gábor, Jun 24, 2013
  9. 08/16 bash prompt: use bash builtins to find out rebase stateSZEDER Gábor, Jun 24, 2013
  10. 09/16 bash prompt: use bash builtins to find out current branchSZEDER Gábor, Jun 24, 2013
  11. 10/16 bash prompt: combine 'git rev-parse' executions in the main code pathSZEDER Gábor, Jun 24, 2013
  12. 11/16 bash prompt: combine 'git rev-parse' for detached headSZEDER Gábor, Jun 24, 2013
  13. 12/16 bash prompt: use bash builtins to check for unborn branch for dirty stateSZEDER Gábor, Jun 24, 2013
  14. 13/16 bash prompt: use bash builtins to check stash stateSZEDER Gábor, Jun 24, 2013
  15. 14/16 bash prompt: avoid command substitution when checking for untracked filesSZEDER Gábor, Jun 24, 2013
  16. 15/16 bash prompt: avoid command substitution when finalizing gitstringSZEDER Gábor, Jun 24, 2013
  17. 16/16 bash prompt: mention that PROMPT_COMMAND mode is fasterSZEDER Gábor, Jun 24, 2013
  18. Junio C HamanoJun 24, 2013
  19. Eduardo R. D'AvilaJun 25, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.