Re: [PATCH] git-prompt.sh: Omit prompt for ignored directories
From: Richard Hansen <hidden>
Date: 2016-06-15 23:02:40
On 2014-10-08 15:04, Jess Austin wrote:
Introduce a new environmental variable, GIT_PS1_OMITIGNORED, which tells __git_ps1 to display nothing when the current directory is set (e.g. via .gitignore) to be ignored by git. In the absence of GIT_PS1_OMITIGNORED 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.
Interesting idea, though I would prefer this to be configurable on a per-repository basis. (I wouldn't want to hide the prompt in any repository besides my home repository.) I'm not a big fan of the name "OMITIGNORED" (it's not immediately obvious what this means), but I can't think of anything better off the top of my head... -Richard
quoted hunk ↗ jump to hunk
Signed-off-by: Jess Austin <redacted> --- contrib/completion/git-prompt.sh | 9 +++++++++ t/t9903-bash-prompt.sh | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+)diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index c5473dc..6a26cb4 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh@@ -84,6 +84,10 @@ # 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_OMITIGNORED +# to a nonempty value. # check whether printf supports -v __git_printf_supports_v=@@ -501,6 +505,11 @@ __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_OMITIGNORED}" ] + 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..55bcb6b 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,23 @@ test_expect_success 'prompt - zsh color pc mode' ' test_cmp expected "$actual" ' +test_expect_success 'prompt - prompt omitted in ignored directory' ' + printf "" >expected && + ( + cd ignored_dir && + GIT_PS1_OMITIGNORED=y && + __git_ps1 >"$actual" + ) && + test_cmp expected "$actual" +' + +test_expect_success 'prompt - prompt not omitted without GIT_PS1_OMITIGNORED' ' + printf " (master)" >expected && + ( + cd ignored_dir && + __git_ps1 >"$actual" + ) && + test_cmp expected "$actual" +' + test_done