git-prompt: cleaning and improvement
v2 cover git-prompt: cleaning and improvement
Changes since the first version [1]:
- During refactorization in 2/5, mention what the lack of \[...\] can affect.
- New patch 3/5 that removes redundant tests (noticed by SZEDER Gábor [2])
- Rephrasing in 5/5:
- rephrasing suggested by SZEDER Gábor [3]
- rephrase some parts that mention only the "current branch name" being displayed in the prompt by stating that the "repository status" is displayed.
- explain the color codes in the ZSH precmd example (there was an explanation that applied only for the Bash example, but it was not clear that it did not apply to ZSH).
Following Gábor's example, I merged his patches series [4] to mine and published at:
https://github.com/erdavila/git.git bash-prompt-speedup-and-color-refactorization
Both Gábor's and my series were rebased/applied on top of the current master 9832cb9d4d.
Thanks,
Eduardo
[1] http://thread.gmane.org/gmane.comp.version-control.git/228566
[2] http://article.gmane.org/gmane.comp.version-control.git/228705
[3] http://article.gmane.org/gmane.comp.version-control.git/228707
[4] http://thread.gmane.org/gmane.comp.version-control.git/228851
Eduardo R. D'Avila (5):
t9903: add tests for git-prompt pcmode git-prompt.sh: refactor colored prompt code
t9903: remove redundant tests
git-prompt.sh: do not print duplicate clean color code git-prompt.sh: add missing information in comments
contrib/completion/git-prompt.sh | 111 ++++++++++++------------------ t/t9903-bash-prompt.sh | 141 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 70 deletions(-)
Signature · 1 line
1.8.3.1.590.g42a98dd
PATCH v2 1/5 t9903: add tests for git-prompt pcmode
git-prompt.sh lacks tests for PROMPT_COMMAND mode.
Add tests for:
* pcmode prompt without colors
* pcmode prompt with colors for bash
* pcmode prompt with colors for zsh
Having these tests enables an upcoming refactor in a safe way.
---
254 0 t/t9903-bash-prompt.sh
t/t9903-bash-prompt.sh | 254 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 254 insertions(+)
t/t9903-bash-prompt.sh +254 -0
@@ -10,6 +10,10 @@ test_description='test git-specific bash prompt functions' . "$GIT_BUILD_DIR/contrib/completion/git-prompt.sh" actual="$TRASH_DIRECTORY/actual" +c_red='\\[\\e[31m\\]' +c_green='\\[\\e[32m\\]' +c_lblue='\\[\\e[1;34m\\]' +c_clear='\\[\\e[0m\\]' test_expect_success 'setup for prompt tests' ' mkdir -p subdir/subsubdir &&
@@ -535,4 +539,254 @@ test_expect_success 'prompt - format string starting with dash' ' test_cmp expected "$actual" ' +test_expect_success 'prompt - pc mode' ' + printf "BEFORE: (master):AFTER" >expected && + printf "" >expected_output && + ( + __git_ps1 "BEFORE:" ":AFTER" >"$actual" && + test_cmp expected_output "$actual" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - branch name' ' + printf "BEFORE: (${c_green}master${c_clear}${c_clear}):AFTER" >expected && + ( + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" >"$actual" + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - detached head' ' + printf "BEFORE: (${c_red}(%s...)${c_clear}${c_clear}):AFTER" $(git log -1 --format="%h" b1^) >expected && + git checkout b1^ && + test_when_finished "git checkout master" && + ( + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty worktree' ' + printf "BEFORE: (${c_green}master${c_clear} ${c_red}*${c_clear}):AFTER" >expected && + echo "dirty" >file && + test_when_finished "git reset --hard" && + ( + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty index' ' + printf "BEFORE: (${c_green}master${c_clear} ${c_green}+${c_clear}):AFTER" >expected && + echo "dirty" >file && + test_when_finished "git reset --hard" && + git add -u && + ( + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty index and worktree' ' + printf "BEFORE: (${c_green}master${c_clear} ${c_red}*${c_green}+${c_clear}):AFTER" >expected && + echo "dirty index" >file && + test_when_finished "git reset --hard" && + git add -u && + echo "dirty worktree" >file && + ( + GIT_PS1_SHOWCOLORHINTS=y && + GIT_PS1_SHOWDIRTYSTATE=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - dirty status indicator - before root commit' ' + printf "BEFORE: (${c_green}master${c_clear} ${c_green}#${c_clear}):AFTER" >expected && + ( + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + cd otherrepo && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - inside .git directory' ' + printf "BEFORE: (${c_green}GIT_DIR!${c_clear}${c_clear}):AFTER" >expected && + echo "dirty" >file && + test_when_finished "git reset --hard" && + ( + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + cd .git && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - stash status indicator' ' + printf "BEFORE: (${c_green}master${c_clear} ${c_lblue}\$${c_clear}):AFTER" >expected && + echo 2 >file && + git stash && + test_when_finished "git stash drop" && + ( + GIT_PS1_SHOWSTASHSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - bash color pc mode - untracked files status indicator' ' + printf "BEFORE: (${c_green}master${c_clear} ${c_red}%%${c_clear}):AFTER" >expected && + ( + GIT_PS1_SHOWUNTRACKEDFILES=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - branch name' ' + printf "BEFORE: (%%F{green}master%%f%%f):AFTER" >expected && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" >"$actual" + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - detached head' ' + printf "BEFORE: (%%F{red}(%s...)%%f%%f):AFTER" $(git log -1 --format="%h" b1^) >expected && + git checkout b1^ && + test_when_finished "git checkout master" && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty worktree' ' + printf "BEFORE: (%%F{green}master%%f %%F{red}*%%f):AFTER" >expected && + echo "dirty" >file && + test_when_finished "git reset --hard" && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty index' ' + printf "BEFORE: (%%F{green}master%%f %%F{green}+%%f):AFTER" >expected && + echo "dirty" >file && + test_when_finished "git reset --hard" && + git add -u && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty index and worktree' ' + printf "BEFORE: (%%F{green}master%%f %%F{red}*%%F{green}+%%f):AFTER" >expected && + echo "dirty index" >file && + test_when_finished "git reset --hard" && + git add -u && + echo "dirty worktree" >file && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWCOLORHINTS=y && + GIT_PS1_SHOWDIRTYSTATE=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - before root commit' ' + printf "BEFORE: (%%F{green}master%%f %%F{green}#%%f):AFTER" >expected && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + cd otherrepo && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - inside .git directory' ' + printf "BEFORE: (%%F{green}GIT_DIR!%%f%%f):AFTER" >expected && + echo "dirty" >file && + test_when_finished "git reset --hard" && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWDIRTYSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + cd .git && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - stash status indicator' ' + printf "BEFORE: (%%F{green}master%%f %%F{blue}$%%f):AFTER" >expected && + echo 2 >file && + git stash && + test_when_finished "git stash drop" && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWSTASHSTATE=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - zsh color pc mode - untracked files status indicator' ' + printf "BEFORE: (%%F{green}master%%f %%F{red}%%%%%%f):AFTER" >expected && + ( + ZSH_VERSION=5.0.0 && + GIT_PS1_SHOWUNTRACKEDFILES=y && + GIT_PS1_SHOWCOLORHINTS=y && + __git_ps1 "BEFORE:" ":AFTER" && + printf "%s" "$PS1" >"$actual" + ) && + test_cmp expected "$actual" +' + test_done
Signature · 1 line
1.8.3.1.590.g42a98dd
PATCH v2 2/5 git-prompt.sh: refactor colored prompt code
In reply to Eduardo R. D'Avila__git_ps1_colorize_gitstring() sets color codes and builds the prompt gitstring. It has duplicated code to handle color codes for bash and zsh shells. __git_ps1() also has duplicated logic to build the prompt gitstring.
Remove duplication of logic to build gitstring in__git_ps1_colorize_gitstring() and __git_ps1().
Leave in __git_ps1_colorize_gitstring() only logic to set color codes.
---
26 59 contrib/completion/git-prompt.sh
contrib/completion/git-prompt.sh | 85 ++++++++++++---------------------------- 1 file changed, 26 insertions(+), 59 deletions(-)
contrib/completion/git-prompt.sh +26 -59
@@ -225,8 +225,8 @@ __git_ps1_show_upstream () } # Helper function that is meant to be called from __git_ps1. It -# builds up a gitstring injecting color codes into the appropriate -# places. +# injects color codes into the appropriate gitstring variables used +# to build a gitstring. __git_ps1_colorize_gitstring () { if [[ -n ${ZSH_VERSION-} ]]; then
@@ -234,74 +234,40 @@ __git_ps1_colorize_gitstring () local c_green='%F{green}' local c_lblue='%F{blue}' local c_clear='%f' - local bad_color=$c_red - local ok_color=$c_green - local branch_color="$c_clear" - local flags_color="$c_lblue" - local branchstring="$c${b##refs/heads/}" - - if [ $detached = no ]; then - branch_color="$ok_color" - else - branch_color="$bad_color" - fi - - gitstring="$branch_color$branchstring$c_clear" - - if [ -n "$w$i$s$u$r$p" ]; then - gitstring="$gitstring$z" - fi - if [ "$w" = "*" ]; then - gitstring="$gitstring$bad_color$w" - fi - if [ -n "$i" ]; then - gitstring="$gitstring$ok_color$i" - fi - if [ -n "$s" ]; then - gitstring="$gitstring$flags_color$s" - fi - if [ -n "$u" ]; then - gitstring="$gitstring$bad_color$u" - fi - gitstring="$gitstring$c_clear$r$p" - return + else + # Using \[ and \] around colors is necessary to prevent + # issues with command line editing/browsing/completion! + local c_red='\[\e[31m\]' + local c_green='\[\e[32m\]' + local c_lblue='\[\e[1;34m\]' + local c_clear='\[\e[0m\]' fi - local c_red='\e[31m' - local c_green='\e[32m' - local c_lblue='\e[1;34m' - local c_clear='\e[0m' local bad_color=$c_red local ok_color=$c_green - local branch_color="$c_clear" local flags_color="$c_lblue" - local branchstring="$c${b##refs/heads/}" + local branch_color="" if [ $detached = no ]; then branch_color="$ok_color" else branch_color="$bad_color" fi + c="$branch_color$c" + b="$b$c_clear" - # Setting gitstring directly with \[ and \] around colors - # is necessary to prevent wrapping issues! - gitstring="\[$branch_color\]$branchstring\[$c_clear\]" - - if [ -n "$w$i$s$u$r$p" ]; then - gitstring="$gitstring$z" - fi if [ "$w" = "*" ]; then - gitstring="$gitstring\[$bad_color\]$w" + w="$bad_color$w" fi if [ -n "$i" ]; then - gitstring="$gitstring\[$ok_color\]$i" + i="$ok_color$i" fi if [ -n "$s" ]; then - gitstring="$gitstring\[$flags_color\]$s" + s="$flags_color$s" fi if [ -n "$u" ]; then - gitstring="$gitstring\[$bad_color\]$u" + u="$bad_color$u" fi - gitstring="$gitstring\[$c_clear\]$r$p" + r="$c_clear$r" } # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
@@ -443,19 +409,20 @@ __git_ps1 () fi local z="${GIT_PS1_STATESEPARATOR-" "}" + + # NO color option unless in PROMPT_COMMAND mode + if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then + __git_ps1_colorize_gitstring + fi + local f="$w$i$s$u" + local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p" + if [ $pcmode = yes ]; then - local gitstring= - if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then - __git_ps1_colorize_gitstring - else - gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p" - fi gitstring=$(printf -- "$printf_format" "$gitstring") PS1="$ps1pc_start$gitstring$ps1pc_end" else - # NO color option unless in PROMPT_COMMAND mode - printf -- "$printf_format" "$c${b##refs/heads/}${f:+$z$f}$r$p" + printf -- "$printf_format" "$gitstring" fi fi }
Signature · 1 line
1.8.3.1.590.g42a98dd
PATCH v2 3/5 t9903: remove redundant tests
In reply to Eduardo R. D'AvilaAfter refactoring __git_ps1_colorize_gitstring, codepaths for bash and zsh became mostly common and tests for bash and zsh became redundant.
Remove tests for zsh. Keep one minimal test that stress the difference in codepaths for bash and zsh.
---
1 114 t/t9903-bash-prompt.sh
t/t9903-bash-prompt.sh | 115 +------------------------------------------------ 1 file changed, 1 insertion(+), 114 deletions(-)
t/t9903-bash-prompt.sh +1 -114
@@ -665,7 +665,7 @@ test_expect_success 'prompt - bash color pc mode - untracked files status indica test_cmp expected "$actual" ' -test_expect_success 'prompt - zsh color pc mode - branch name' ' +test_expect_success 'prompt - zsh color pc mode' ' printf "BEFORE: (%%F{green}master%%f%%f):AFTER" >expected && ( ZSH_VERSION=5.0.0 &&
@@ -676,117 +676,4 @@ test_expect_success 'prompt - zsh color pc mode - branch name' ' test_cmp expected "$actual" ' -test_expect_success 'prompt - zsh color pc mode - detached head' ' - printf "BEFORE: (%%F{red}(%s...)%%f%%f):AFTER" $(git log -1 --format="%h" b1^) >expected && - git checkout b1^ && - test_when_finished "git checkout master" && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWCOLORHINTS=y && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty worktree' ' - printf "BEFORE: (%%F{green}master%%f %%F{red}*%%f):AFTER" >expected && - echo "dirty" >file && - test_when_finished "git reset --hard" && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWDIRTYSTATE=y && - GIT_PS1_SHOWCOLORHINTS=y && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty index' ' - printf "BEFORE: (%%F{green}master%%f %%F{green}+%%f):AFTER" >expected && - echo "dirty" >file && - test_when_finished "git reset --hard" && - git add -u && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWDIRTYSTATE=y && - GIT_PS1_SHOWCOLORHINTS=y && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty index and worktree' ' - printf "BEFORE: (%%F{green}master%%f %%F{red}*%%F{green}+%%f):AFTER" >expected && - echo "dirty index" >file && - test_when_finished "git reset --hard" && - git add -u && - echo "dirty worktree" >file && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWCOLORHINTS=y && - GIT_PS1_SHOWDIRTYSTATE=y && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - dirty status indicator - before root commit' ' - printf "BEFORE: (%%F{green}master%%f %%F{green}#%%f):AFTER" >expected && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWDIRTYSTATE=y && - GIT_PS1_SHOWCOLORHINTS=y && - cd otherrepo && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - inside .git directory' ' - printf "BEFORE: (%%F{green}GIT_DIR!%%f%%f):AFTER" >expected && - echo "dirty" >file && - test_when_finished "git reset --hard" && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWDIRTYSTATE=y && - GIT_PS1_SHOWCOLORHINTS=y && - cd .git && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - stash status indicator' ' - printf "BEFORE: (%%F{green}master%%f %%F{blue}$%%f):AFTER" >expected && - echo 2 >file && - git stash && - test_when_finished "git stash drop" && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWSTASHSTATE=y && - GIT_PS1_SHOWCOLORHINTS=y && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - -test_expect_success 'prompt - zsh color pc mode - untracked files status indicator' ' - printf "BEFORE: (%%F{green}master%%f %%F{red}%%%%%%f):AFTER" >expected && - ( - ZSH_VERSION=5.0.0 && - GIT_PS1_SHOWUNTRACKEDFILES=y && - GIT_PS1_SHOWCOLORHINTS=y && - __git_ps1 "BEFORE:" ":AFTER" && - printf "%s" "$PS1" >"$actual" - ) && - test_cmp expected "$actual" -' - test_done
Signature · 1 line
1.8.3.1.590.g42a98dd
PATCH v2 4/5 git-prompt.sh: do not print duplicate clean color code
In reply to Eduardo R. D'AvilaDo not print a duplicate clean color code when there is no other indicators other than the current branch in colored prompt.
---
1 1 contrib/completion/git-prompt.sh
4 4 t/t9903-bash-prompt.sh
contrib/completion/git-prompt.sh | 2 +- t/t9903-bash-prompt.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-)
contrib/completion/git-prompt.sh +1 -1
@@ -253,8 +253,8 @@ __git_ps1_colorize_gitstring () branch_color="$bad_color" fi c="$branch_color$c" - b="$b$c_clear" + z="$c_clear$z" if [ "$w" = "*" ]; then w="$bad_color$w" fi
t/t9903-bash-prompt.sh +4 -4
@@ -551,7 +551,7 @@ test_expect_success 'prompt - pc mode' ' ' test_expect_success 'prompt - bash color pc mode - branch name' ' - printf "BEFORE: (${c_green}master${c_clear}${c_clear}):AFTER" >expected && + printf "BEFORE: (${c_green}master${c_clear}):AFTER" >expected && ( GIT_PS1_SHOWCOLORHINTS=y && __git_ps1 "BEFORE:" ":AFTER" >"$actual"
@@ -561,7 +561,7 @@ test_expect_success 'prompt - bash color pc mode - branch name' ' ' test_expect_success 'prompt - bash color pc mode - detached head' ' - printf "BEFORE: (${c_red}(%s...)${c_clear}${c_clear}):AFTER" $(git log -1 --format="%h" b1^) >expected && + printf "BEFORE: (${c_red}(%s...)${c_clear}):AFTER" $(git log -1 --format="%h" b1^) >expected && git checkout b1^ && test_when_finished "git checkout master" && (
@@ -627,7 +627,7 @@ test_expect_success 'prompt - bash color pc mode - dirty status indicator - befo ' test_expect_success 'prompt - bash color pc mode - inside .git directory' ' - printf "BEFORE: (${c_green}GIT_DIR!${c_clear}${c_clear}):AFTER" >expected && + printf "BEFORE: (${c_green}GIT_DIR!${c_clear}):AFTER" >expected && echo "dirty" >file && test_when_finished "git reset --hard" && (
@@ -666,7 +666,7 @@ test_expect_success 'prompt - bash color pc mode - untracked files status indica ' test_expect_success 'prompt - zsh color pc mode' ' - printf "BEFORE: (%%F{green}master%%f%%f):AFTER" >expected && + printf "BEFORE: (%%F{green}master%%f):AFTER" >expected && ( ZSH_VERSION=5.0.0 && GIT_PS1_SHOWCOLORHINTS=y &&
Signature · 1 line
1.8.3.1.590.g42a98dd
PATCH v2 5/5 git-prompt.sh: add missing information in comments
In reply to Eduardo R. D'AvilaMention that the command below is needed for prompt in ZSH with PS1:
setopt PROMPT_SUBST
Rephrase some parts that mention only the "current branch name" being displayed in the prompt. Replace it by stating that the "repository status" is displayed.
Make it clear that colored prompt is only available in PROMPT_COMMAND/precmd mode.
---
15 11 contrib/completion/git-prompt.sh
contrib/completion/git-prompt.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)
contrib/completion/git-prompt.sh +15 -11
@@ -3,7 +3,7 @@ # Copyright (C) 2006,2007 Shawn O. Pearce <[email protected]> # Distributed under the GNU General Public License, version 2.0. # -# This script allows you to see the current branch in your prompt. +# This script allows you to see repository status in your prompt. # # To enable: #
@@ -13,24 +13,27 @@ # 3a) Change your PS1 to call __git_ps1 as # command-substitution: # Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' -# ZSH: PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' +# ZSH: setopt PROMPT_SUBST ; 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 +# 3b) Alternatively, __git_ps1 can be used for PROMPT_COMMAND in +# Bash or for precmd() in ZSH 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" "\\\$ "' +# will show username, at-sign, host, colon, cwd, then +# various status string, followed by dollar and SP, as +# your prompt. # ZSH: precmd () { __git_ps1 "%n" ":%~$ " "|%s" } -# will show username, at-sign, host, colon, cwd, then -# various status string, followed by dollar and SP, as -# your prompt. +# will show username, pipe, then various status string, +# followed by colon, cwd, dollar and SP, as your prompt. # Optionally, you can supply a third argument with a printf # format string to finetune the output of the branch status # -# The argument to __git_ps1 will be displayed only if you are currently -# in a git repository. The %s token will be the name of the current -# branch. +# The repository status will be displayed only if you are currently in a +# git repository. The %s token is the placeholder for the shown status. +# +# The prompt status always includes the current branch name. # # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value, # unstaged (*) and staged (+) changes will be shown next to the branch
@@ -78,7 +81,8 @@ # # If you would like a colored hint about the current dirty state, set # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on -# the colored output of "git status -sb". +# the colored output of "git status -sb" and are available only when +# using __git_ps1 for PROMPT_COMMAND or precmd. # __gitdir accepts 0 or 1 arguments (i.e., location) # returns location of .git repo
Signature · 1 line
1.8.3.1.590.g42a98dd
Junio C Hamano
AppliedQueued, and merged to 'pu' without the previous merge with the older iteration. If you two can double check the merged result, it would be very much appreciated.
Thanks.
Hi Junio,
The merged result is ok!
Thanks,
Eduardo
Hi,
Quoted 1 line · Eduardo R. D'Avila
The merged result is ok!
Yeah, it look good, thanks.
Gábor
Quoted 4 lines · SZEDER Gábor
Quoted 1 line · Eduardo R. D'Avila
The merged result is ok!
Yeah, it look good, thanks.
Thanks, both, for double checking (and thank you for preparing the pre-merged results).