Merge branch 'fc/show-branch-in-rebase-am'
authorJunio C Hamano <gitster@pobox.com>
Thu, 6 Jun 2013 19:18:41 +0000 (12:18 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Jun 2013 19:18:41 +0000 (12:18 -0700)
The bash prompt code (in contrib/) displayed the name of the branch
being rebased when "rebase -i/-m/-p" modes are in use, but not the
plain vanilla "rebase".

* fc/show-branch-in-rebase-am:
prompt: fix for simple rebase

1  2 
contrib/completion/git-prompt.sh
index 9f4e6a368cf590ccfc9e469ad8820e2af93c3568,bbf7657142d9aff8e2b0b7defea49234ce2a13d7..86a4f3fa49cf68e14a6b0de13cb7f63fe8a2624d
@@@ -20,8 -20,7 +20,8 @@@
  #        <post>, which are strings you would put in $PS1 before
  #        and after the status string generated by the git-prompt
  #        machinery.  e.g.
 -#           PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
 +#        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
 +#        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.
@@@ -125,7 -124,7 +125,7 @@@ __git_ps1_show_upstream (
                        fi
                        ;;
                svn-remote.*.url)
 -                      svn_remote[ $((${#svn_remote[@]} + 1)) ]="$value"
 +                      svn_remote[$((${#svn_remote[@]} + 1))]="$value"
                        svn_url_pattern+="\\|$value"
                        upstream=svn+git # default upstream is SVN if available, else git
                        ;;
        svn*)
                # get the upstream from the "git-svn-id: ..." in a commit message
                # (git-svn uses essentially the same procedure internally)
 -              local svn_upstream=($(git log --first-parent -1 \
 +              local -a svn_upstream
 +              svn_upstream=($(git log --first-parent -1 \
                                        --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
                if [[ 0 -ne ${#svn_upstream[@]} ]]; then
 -                      svn_upstream=${svn_upstream[ ${#svn_upstream[@]} - 2 ]}
 +                      svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
                        svn_upstream=${svn_upstream%@*}
                        local n_stop="${#svn_remote[@]}"
                        for ((n=1; n <= n_stop; n++)); do
  
  }
  
 +# Helper function that is meant to be called from __git_ps1.  It
 +# builds up a gitstring injecting color codes into the appropriate
 +# places.
 +__git_ps1_colorize_gitstring ()
 +{
 +      if [[ -n ${ZSH_VERSION-} ]]; then
 +              local c_red='%F{red}'
 +              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
 +      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/}"
 +
 +      if [ $detached = no ]; then
 +              branch_color="$ok_color"
 +      else
 +              branch_color="$bad_color"
 +      fi
 +
 +      # 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"
 +      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"
 +}
  
  # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
  # when called from PS1 using command substitution
@@@ -360,6 -279,7 +360,7 @@@ __git_ps1 (
                                step=$(cat "$g/rebase-apply/next")
                                total=$(cat "$g/rebase-apply/last")
                                if [ -f "$g/rebase-apply/rebasing" ]; then
+                                       b="$(cat "$g/rebase-apply/head-name")"
                                        r="|REBASE"
                                elif [ -f "$g/rebase-apply/applying" ]; then
                                        r="|AM"
                                r="|BISECTING"
                        fi
  
+                       test -n "$b" ||
                        b="$(git symbolic-ref HEAD 2>/dev/null)" || {
                                detached=yes
                                b="$(
                        fi
                fi
  
 +              local z="${GIT_PS1_STATESEPARATOR-" "}"
                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'
 -                              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/}"
 -
 -                              if [ $detached = no ]; then
 -                                      branch_color="$ok_color"
 -                              else
 -                                      branch_color="$bad_color"
 -                              fi
 -
 -                              # 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 "
 -                              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"
 +                              __git_ps1_colorize_gitstring
                        else
 -                              gitstring="$c${b##refs/heads/}${f:+ $f}$r$p"
 +                              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:+ $f}$r$p"
 +                      printf -- "$printf_format" "$c${b##refs/heads/}${f:+$z$f}$r$p"
                fi
        fi
  }