Merge branch 'fc/prompt-zsh-read-from-file'
authorJunio C Hamano <gitster@pobox.com>
Tue, 13 May 2014 18:53:14 +0000 (11:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 May 2014 18:53:14 +0000 (11:53 -0700)
* fc/prompt-zsh-read-from-file:
contrib: completion: fix 'eread()' namespace

1  2 
contrib/completion/git-prompt.sh
index 96b8087385ee77dfb7e39fbc91d82af1c2e73714,dc7d9b1794622de47becbacad9a1b5184cf6d57a..853425d005cc7eec5e931b9d1db4a738ba772c74
@@@ -207,18 -207,7 +207,18 @@@ __git_ps1_show_upstream (
                        p=" u+${count#* }-${count%      *}" ;;
                esac
                if [[ -n "$count" && -n "$name" ]]; then
 -                      p="$p $(git rev-parse --abbrev-ref "$upstream" 2>/dev/null)"
 +                      __git_ps1_upstream_name=$(git rev-parse \
 +                              --abbrev-ref "$upstream" 2>/dev/null)
 +                      if [ $pcmode = yes ]; then
 +                              # see the comments around the
 +                              # __git_ps1_branch_name variable below
 +                              p="$p \${__git_ps1_upstream_name}"
 +                      else
 +                              p="$p ${__git_ps1_upstream_name}"
 +                              # not needed anymore; keep user's
 +                              # environment clean
 +                              unset __git_ps1_upstream_name
 +                      fi
                fi
        fi
  
@@@ -270,7 -259,7 +270,7 @@@ __git_ps1_colorize_gitstring (
        r="$c_clear$r"
  }
  
- eread ()
__git_eread ()
  {
        f="$1"
        shift
@@@ -339,9 -328,9 +339,9 @@@ __git_ps1 (
        local step=""
        local total=""
        if [ -d "$g/rebase-merge" ]; then
-               eread "$g/rebase-merge/head-name" b
-               eread "$g/rebase-merge/msgnum" step
-               eread "$g/rebase-merge/end" total
+               __git_eread "$g/rebase-merge/head-name" b
+               __git_eread "$g/rebase-merge/msgnum" step
+               __git_eread "$g/rebase-merge/end" total
                if [ -f "$g/rebase-merge/interactive" ]; then
                        r="|REBASE-i"
                else
                fi
        else
                if [ -d "$g/rebase-apply" ]; then
-                       eread "$g/rebase-apply/next" step
-                       eread "$g/rebase-apply/last" total
+                       __git_eread "$g/rebase-apply/next" step
+                       __git_eread "$g/rebase-apply/last" total
                        if [ -f "$g/rebase-apply/rebasing" ]; then
-                               eread "$g/rebase-apply/head-name" b
+                               __git_eread "$g/rebase-apply/head-name" b
                                r="|REBASE"
                        elif [ -f "$g/rebase-apply/applying" ]; then
                                r="|AM"
                        b="$(git symbolic-ref HEAD 2>/dev/null)"
                else
                        local head=""
-                       if ! eread "$g/HEAD" head; then
+                       if ! __git_eread "$g/HEAD" head; then
                                if [ $pcmode = yes ]; then
                                        PS1="$ps1pc_start$ps1pc_end"
                                fi
                __git_ps1_colorize_gitstring
        fi
  
 +      b=${b##refs/heads/}
 +      if [ $pcmode = yes ]; then
 +              # In pcmode (and only pcmode) the contents of
 +              # $gitstring are subject to expansion by the shell.
 +              # Avoid putting the raw ref name in the prompt to
 +              # protect the user from arbitrary code execution via
 +              # specially crafted ref names (e.g., a ref named
 +              # '$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' would execute
 +              # 'sudo rm -rf /' when the prompt is drawn).  Instead,
 +              # put the ref name in a new global variable (in the
 +              # __git_ps1_* namespace to avoid colliding with the
 +              # user's environment) and reference that variable from
 +              # PS1.
 +              __git_ps1_branch_name=$b
 +              # note that the $ is escaped -- the variable will be
 +              # expanded later (when it's time to draw the prompt)
 +              b="\${__git_ps1_branch_name}"
 +      fi
 +
        local f="$w$i$s$u"
 -      local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
 +      local gitstring="$c$b${f:+$z$f}$r$p"
  
        if [ $pcmode = yes ]; then
                if [ "${__git_printf_supports_v-}" != yes ]; then