Merge branch 'rh/hide-prompt-in-ignored-directory'
authorJunio C Hamano <gitster@pobox.com>
Wed, 14 Jan 2015 20:34:01 +0000 (12:34 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Jan 2015 20:34:01 +0000 (12:34 -0800)
* rh/hide-prompt-in-ignored-directory:
git-prompt.sh: allow to hide prompt for ignored pwd
git-prompt.sh: if pc mode, immediately set PS1 to a plain prompt

1  2 
contrib/completion/git-prompt.sh
index 3c3fc6d5d94c5dc6a9ec291fc217b590a11c5be3,75c3f0f4eaa579403e6b2d376d8f4baebe3dd59c..c0f62b54d4e7702234b97f0da14e3194a65985f2
  # 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=
@@@ -288,7 -293,6 +293,7 @@@ __git_eread (
  # In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
  __git_ps1 ()
  {
 +      local exit=$?
        local pcmode=no
        local detached=no
        local ps1pc_start='\u@\h:\w '
                        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}"
                ;;
        rev_parse_exit_code="$?"
  
        if [ -z "$repo_info" ]; then
-               if [ $pcmode = yes ]; then
-                       #In PC mode PS1 always needs to be set
-                       PS1="$ps1pc_start$ps1pc_end"
-               fi
                return
        fi
  
        local inside_gitdir="${repo_info##*$'\n'}"
        local g="${repo_info%$'\n'*}"
  
+       if [ "true" = "$inside_worktree" ] &&
+          [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
+          [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
+          git check-ignore -q .
+       then
+               return
+       fi
        local r=""
        local b=""
        local step=""
                else
                        local head=""
                        if ! __git_eread "$g/HEAD" head; then
-                               if [ $pcmode = yes ]; then
-                                       PS1="$ps1pc_start$ps1pc_end"
-                               fi
                                return
                        fi
                        # is it a symbolic ref?
        else
                printf -- "$printf_format" "$gitstring"
        fi
 +
 +      # preserve exit status
 +      return $exit
  }