b875df8970a67d02eef74f1aad0b60f42fedb356

Author
Brian Degenhardt <bdegenhardt@twitter.com>
Committer
Brian Degenhardt <bdegenhardt@twitter.com>
Date

Message

agnoster: speed up git prompt

Problem

On detached-refs, the git prompt is very slow because it uses a command
to output all refs, which takes 32s on the twitter internal git repo.

Solution

Use git-rev-parse instead of git-show-ref to only output the head ref.
Runtime drops to 0.03 seconds.

Note

Interestingly, git-rev-parse isn't slow without the --head arguement so
I'll probably be cooking up a patch for the git team to speed this up
eventually, but it's still pointless to sigpipe git as it walks the
filesystem.

Diff

 1diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme
 2index 3a0c58b89bdb01a8d665257662350c9c46c0322b..ee0c2afb899093a32cb499cccda18ae51ebdcce9 100644
 3--- a/themes/agnoster.zsh-theme
 4+++ b/themes/agnoster.zsh-theme
 5@@ -78,7 +78,7 @@ prompt_git() {
 6 
 7   if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
 8     dirty=$(parse_git_dirty)
 9-    ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git show-ref --head -s --abbrev |head -n1 2> /dev/null)"
10+    ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)"
11     if [[ -n $dirty ]]; then
12       prompt_segment yellow black
13     else