From: Junio C Hamano Date: Fri, 28 Dec 2012 00:00:07 +0000 (-0800) Subject: Merge branch 'so/prompt-command' X-Git-Tag: v1.8.1~1 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/3b73c7d1c8a3e76c6e15a294bd5c3e2a04efa7ea?ds=inline;hp=-c Merge branch 'so/prompt-command' Finishing touches... * so/prompt-command: make __git_ps1 accept a third parameter in pcmode --- 3b73c7d1c8a3e76c6e15a294bd5c3e2a04efa7ea diff --combined contrib/completion/git-prompt.sh index 9b074e148d,0086bf1864..9bef0531c5 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@@ -24,6 -24,8 +24,8 @@@ # will show username, at-sign, host, colon, cwd, then # various status string, followed by 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 @@@ -61,19 -63,10 +63,19 @@@ # GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by # setting the bash.showUpstream config variable. # +# If you would like to see more information about the identity of +# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE +# to one of these values: +# +# contains relative to newer annotated tag (v1.6.3.2~35) +# branch relative to newer tag or branch (master~4) +# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f) +# default exactly matching tag +# # 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". -# + # __gitdir accepts 0 or 1 arguments (i.e., location) # returns location of .git repo __gitdir () @@@ -222,10 -215,12 +224,12 @@@ __git_ps1_show_upstream ( # when called from PS1 using command substitution # in this mode it prints text to add to bash PS1 prompt (includes branch name) # - # __git_ps1 requires 2 arguments when called from PROMPT_COMMAND (pc) + # __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc) # in that case it _sets_ PS1. The arguments are parts of a PS1 string. - # when both arguments are given, the first is prepended and the second appended + # when two arguments are given, the first is prepended and the second appended # to the state string when assigned to PS1. + # The optional third parameter will be used as printf format string to further + # customize the output of the git-status string. # In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true __git_ps1 () { @@@ -236,9 -231,10 +240,10 @@@ local printf_format=' (%s)' case "$#" in - 2) pcmode=yes + 2|3) pcmode=yes ps1pc_start="$1" ps1pc_end="$2" + printf_format="${3:-$printf_format}" ;; 0|1) printf_format="${1:-$printf_format}" ;; @@@ -339,6 -335,7 +344,7 @@@ local f="$w$i$s$u" if [ $pcmode = yes ]; then + local gitstring= if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then local c_red='\e[31m' local c_green='\e[32m' @@@ -356,29 -353,31 +362,31 @@@ branch_color="$bad_color" fi - # Setting PS1 directly with \[ and \] around colors + # Setting gitstring directly with \[ and \] around colors # is necessary to prevent wrapping issues! - PS1="$ps1pc_start (\[$branch_color\]$branchstring\[$c_clear\]" + gitstring="\[$branch_color\]$branchstring\[$c_clear\]" if [ -n "$w$i$s$u$r$p" ]; then - PS1="$PS1 " + gitstring="$gitstring " fi if [ "$w" = "*" ]; then - PS1="$PS1\[$bad_color\]$w" + gitstring="$gitstring\[$bad_color\]$w" fi if [ -n "$i" ]; then - PS1="$PS1\[$ok_color\]$i" + gitstring="$gitstring\[$ok_color\]$i" fi if [ -n "$s" ]; then - PS1="$PS1\[$flags_color\]$s" + gitstring="$gitstring\[$flags_color\]$s" fi if [ -n "$u" ]; then - PS1="$PS1\[$bad_color\]$u" + gitstring="$gitstring\[$bad_color\]$u" fi - PS1="$PS1\[$c_clear\]$r$p)$ps1pc_end" + gitstring="$gitstring\[$c_clear\]$r$p" else - PS1="$ps1pc_start ($c${b##refs/heads/}${f:+ $f}$r$p)$ps1pc_end" + gitstring="$c${b##refs/heads/}${f:+ $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:+ $f}$r$p"