Merge branch 'tf/prompt-preserve-exit-status'
authorJunio C Hamano <gitster@pobox.com>
Wed, 14 Jan 2015 20:35:48 +0000 (12:35 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Jan 2015 20:35:49 +0000 (12:35 -0800)
Using the exit status of the last command in the prompt, e.g.
PS1='$(__git_ps1) $? ', did not work well because the helper
function stomped on the exit status.

* tf/prompt-preserve-exit-status:
git-prompt: preserve value of $? in all cases

1  2 
contrib/completion/git-prompt.sh
index c0f62b54d4e7702234b97f0da14e3194a65985f2,3a11f4e97d7a3329bf0e5c37c603f8768cd2acd2..214e859f99e7d896a6fa45a737b5b3e2a629176f
  # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
  # the colored output of "git status -sb" and are available only when
  # using __git_ps1 for PROMPT_COMMAND or precmd.
 +#
 +# If you would like __git_ps1 to do nothing in the case when the current
 +# directory is set up to be ignored by git, then set
 +# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
 +# repository level by setting bash.hideIfPwdIgnored to "false".
  
  # check whether printf supports -v
  __git_printf_supports_v=
@@@ -275,7 -270,7 +275,7 @@@ __git_ps1_colorize_gitstring (
  
  __git_eread ()
  {
 -      f="$1"
 +      local f="$1"
        shift
        test -r "$f" && read "$@" <"$f"
  }
  # In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
  __git_ps1 ()
  {
+       # preserve exit status
        local exit=$?
        local pcmode=no
        local detached=no
                        ps1pc_start="$1"
                        ps1pc_end="$2"
                        printf_format="${3:-$printf_format}"
 +                      # set PS1 to a plain prompt so that we can
 +                      # simply return early if the prompt should not
 +                      # be decorated
 +                      PS1="$ps1pc_start$ps1pc_end"
                ;;
                0|1)    printf_format="${1:-$printf_format}"
                ;;
-               *)      return
+               *)      return $exit
                ;;
        esac
  
        rev_parse_exit_code="$?"
  
        if [ -z "$repo_info" ]; then
-               return
 -              if [ $pcmode = yes ]; then
 -                      #In PC mode PS1 always needs to be set
 -                      PS1="$ps1pc_start$ps1pc_end"
 -              fi
+               return $exit
        fi
  
        local short_sha
        local inside_gitdir="${repo_info##*$'\n'}"
        local g="${repo_info%$'\n'*}"
  
-               return
 +      if [ "true" = "$inside_worktree" ] &&
 +         [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
 +         [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
 +         git check-ignore -q .
 +      then
++              return $exit
 +      fi
 +
        local r=""
        local b=""
        local step=""
                else
                        local head=""
                        if ! __git_eread "$g/HEAD" head; then
-                               return
 -                              if [ $pcmode = yes ]; then
 -                                      PS1="$ps1pc_start$ps1pc_end"
 -                              fi
+                               return $exit
                        fi
                        # is it a symbolic ref?
                        b="${head#ref: }"
                printf -- "$printf_format" "$gitstring"
        fi
  
-       # preserve exit status
        return $exit
  }