bash prompt: run 'git rev-parse --git-dir' directly instead of __gitdir()

__git_ps1() finds out the path to the repository by using the __gitdir() helper function. __gitdir() is basically just a wrapper around 'git rev-parse --git-dir', extended with support for recognizing a remote repository given as argument, to use the path given on the command line, and with a few shortcuts to recognize a git repository in cwd or at $GIT_DIR quickly without actually running 'git rev-parse'. However, the former two is only necessary for the completion script but makes no sense for the bash prompt, while the latter shortcuts are performance optimizations __git_ps1() can do without (they just avoid the overhead of fork()+exec()ing a git process). Run 'git rev-parse --git-dir' directly in __git_ps1(), because it will allow this patch series to combine several $(git rev-parse ...) command substitutions in the main code path, and the overall performance benefit will far outweigh the loss of those few shortcuts in __gitdir(). Furthermore, since __gitdir() is not needed anymore for the prompt, remove it from the prompt script finally eliminating its duplication between the prompt and completion scripts. Also remove the comment from the completion script warning about this code duplication. Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>

SZEDER Gábor committed Jun 17, 2013 at 23:55 UTC 511ad159049fc64a13ef3e9565cc9634acb6404b
2 files changed +1 -27
contrib/completion/git-completion.bash
-2
@@ -33,8 +33,6 @@ esac
33 # returns location of .git repo
34 __gitdir ()
35 {
36 - # Note: this function is duplicated in git-prompt.sh
37 - # When updating it, make sure you update the other one to match.
36 if [ -z "${1-}" ]; then
37 if [ -n "${__git_dir-}" ]; then
38 echo "$__git_dir"
contrib/completion/git-prompt.sh
+1 -25
@@ -80,30 +80,6 @@
80 # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
81 # the colored output of "git status -sb".
82
83 -# __gitdir accepts 0 or 1 arguments (i.e., location)
84 -# returns location of .git repo
85 -__gitdir ()
86 -{
87 - # Note: this function is duplicated in git-completion.bash
88 - # When updating it, make sure you update the other one to match.
89 - if [ -z "${1-}" ]; then
90 - if [ -n "${__git_dir-}" ]; then
91 - echo "$__git_dir"
92 - elif [ -n "${GIT_DIR-}" ]; then
93 - test -d "${GIT_DIR-}" || return 1
94 - echo "$GIT_DIR"
95 - elif [ -d .git ]; then
96 - echo .git
97 - else
98 - git rev-parse --git-dir 2>/dev/null
99 - fi
100 - elif [ -d "$1/.git" ]; then
101 - echo "$1/.git"
102 - else
103 - echo "$1"
104 - fi
105 -}
106 -
83 # stores the divergence from upstream in $p
84 # used by GIT_PS1_SHOWUPSTREAM
85 __git_ps1_show_upstream ()
@@ -335,7 +311,7 @@ __git_ps1 ()
311 ;;
312 esac
313
338 - local g="$(__gitdir)"
314 + local g="$(git rev-parse --git-dir 2>/dev/null)"
315 if [ -z "$g" ]; then
316 if [ $pcmode = yes ]; then
317 #In PC mode PS1 always needs to be set