Set __git_ps1 to display nothing when present working directory is
ignored, triggered by either the new environmental variable
GIT_PS1_HIDE_ON_IGNORED_PWD or the new repository configuration
variable bash.hideOnIgnoredPwd (or both). In the absence of these
settings this change has no effect.

Many people manage e.g. dotfiles in their home directory with git.
This causes the prompt generated by __git_ps1 to refer to that "top
level" repo while working in any descendant directory. That can be
distracting, so this patch helps one shut off that noise.

Signed-off-by: Jess Austin <jess.aus...@gmail.com>
---
On Thu, Oct 9, 2014 at 5:09 PM, Richard Hansen <rhan...@bbn.com> wrote:
> On 2014-10-09 06:27, Jess Austin wrote:
>> Would you want this configured in each repo (i.e. via a line in 
>> ".git/config"),
>> or would you prefer something global so that it only need be set in one
>> place? I'm not sure how the latter technique would work, so if that seems
>> better please advise on how to go about that.
>
> A 'git config' variable is fine.  The bash.showDirtyState,
> bash.showUntrackedFiles, and bash.showUpstream config variables seem
> like good examples to follow.

I think this is what you meant. I changed the name of the envvar. Now the
variables are GIT_PS1_HIDE_ON_IGNORED_PWD and bash.hideOnIgnoredPwd. I
admit these are still kind of unwieldy, but maybe now they're more descriptive?

Please advise!

cheers,
Jess

 contrib/completion/git-prompt.sh | 12 ++++++++++++
 t/t9903-bash-prompt.sh           | 42 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+)

diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index c5473dc..d7559ff 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -84,6 +84,11 @@
 # 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_ON_IGNORED_PWD to a nonempty value, or set
+# bash.hideOnIgnoredPwd to true in the repository configuration.
 
 # check whether printf supports -v
 __git_printf_supports_v=
@@ -501,6 +506,13 @@ __git_ps1 ()
        local f="$w$i$s$u"
        local gitstring="$c$b${f:+$z$f}$r$p"
 
+       if [ -n "$(git check-ignore .)" ] &&
+          ( [ -n "${GIT_PS1_HIDE_ON_IGNORED_PWD}" ] ||
+            [ "$(git config --bool bash.hideOnIgnoredPwd)" = "true" ] )
+       then
+               printf_format=""
+       fi
+
        if [ $pcmode = yes ]; then
                if [ "${__git_printf_supports_v-}" != yes ]; then
                        gitstring=$(printf -- "$printf_format" "$gitstring")
diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
index 9150984..a8ef8a3 100755
--- a/t/t9903-bash-prompt.sh
+++ b/t/t9903-bash-prompt.sh
@@ -35,6 +35,8 @@ test_expect_success 'setup for prompt tests' '
        git commit -m "another b2" file &&
        echo 000 >file &&
        git commit -m "yet another b2" file &&
+       mkdir ignored_dir &&
+       echo "ignored_dir/" >> .gitignore &&
        git checkout master
 '
 
@@ -588,4 +590,44 @@ test_expect_success 'prompt - zsh color pc mode' '
        test_cmp expected "$actual"
 '
 
+test_expect_success 'prompt - hide on ignored pwd - shell variable unset with 
config disabled' '
+       printf " (master)" >expected &&
+       (
+               cd ignored_dir &&
+               __git_ps1 >"$actual"
+       ) &&
+       test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - hide on ignored pwd - shell variable unset with 
config enabled' '
+       printf "" >expected &&
+       test_config bash.hideOnIgnoredPwd true &&
+       (
+               cd ignored_dir &&
+               __git_ps1 >"$actual"
+       ) &&
+       test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - hide on ignored pwd - shell variable set with 
config disabled' '
+       printf "" >expected &&
+       (
+               cd ignored_dir &&
+               GIT_PS1_HIDE_ON_IGNORED_PWD=y &&
+               __git_ps1 >"$actual"
+       ) &&
+       test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - hide on ignored pwd - shell variable set with 
config enabled' '
+       printf "" >expected &&
+       test_config bash.hideOnIgnoredPwd true &&
+       (
+               cd ignored_dir &&
+               GIT_PS1_HIDE_ON_IGNORED_PWD=y &&
+               __git_ps1 >"$actual"
+       ) &&
+       test_cmp expected "$actual"
+'
+
 test_done
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to