Re: [PATCH] git-prompt.sh: Option to hide prompt for ignored pwd
- From
- Richard Hansen <rhansen@bbn.com>
- Date
- Oct 15, 2014, 20:28 UTC
- Message-ID
- <543ED906.403@bbn.com>
- In-Reply-To
- <1413345993-14393-1-git-send-email-jess.austin@gmail.com>
On 2014-10-15 00:06, Jess Austin wrote:
Show 14 quoted lines
> @@ -501,6 +506,13 @@ __git_ps1 ()
> local f="$w$i$s$u"
> local gitstring="$c$b${f:+$z$f}$r$p"
>
> + if [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED}" ] &&
> + [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
> + git check-ignore -q .
> + then
> + printf_format=""
> + fi
> +
> if [ $pcmode = yes ]; then
> if [ "${__git_printf_supports_v-}" != yes ]; then
> gitstring=$(printf -- "$printf_format" "$gitstring")This is broken in pcmode due to a Bash bug. The command:
printf -v foo "" asdf
is a no-op in Bash. The variable foo is never changed in any way --
it is neither unset nor set to the empty string.Also, I noticed that I get an error message if I cd into .git:
fatal: This operation must be run in a work treeI think the following change will fix the above issues, and it has the advantage of avoiding unnecessary work if the directory is ignored:
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index 6a4ce53..68ac82a 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@ -374,6 +374,17 @@ __git_ps1 () 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 + if [ $pcmode = yes ]; then + PS1="$ps1pc_start$ps1pc_end" + fi + return + fi + local r="" local b="" local step="" @@ -506,13 +517,6 @@ __git_ps1 () local f="$w$i$s$u" local gitstring="$c$b${f:+$z$f}$r$p" - if [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED}" ] && - [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] && - git check-ignore -q . - then - printf_format="" - fi - if [ $pcmode = yes ]; then if [ "${__git_printf_supports_v-}" != yes ]; then gitstring=$(printf -- "$printf_format" "$gitstring") It would be good to add additional test cases for pcmode (two or three arguments to __git_ps1) and 'cd .git' so that the above issues don't reappear. Thanks, Richard