From: Shawn O. Pearce Date: Wed, 11 Feb 2009 16:26:12 GMT Subject: Re: [PATCH 3/3] completion: Prevents GIT_PS1_DIRTYSTATE from breaking when CWD is .git Message-ID: <20090211162612.GG30949@spearce.org> In-Reply-To: <1234366634-17900-4-git-send-email-ted@tedpavlic.com> Ted Pavlic wrote: > The GIT_PS1_DIRTYSTATE support uses a "git diff" to see if a "*" should > be placed after the branch name. The "git diff" fails with an ugly error > if the user has just changed directory into GIT_DIR. > > This patch uses "git rev-parse --is-inside-work-tree" to determine > whether a "--work-tree=.." should be added to the "git diff". I think it makes more sense to just drop the work tree stuff from the prompt if we aren't inside the work tree anymore. Meaning, we should behave as though bash.showDirtyState is false. > Signed-off-by: Ted Pavlic > --- > contrib/completion/git-completion.bash | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletions(-) > > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index 6772be7..ffde82a 100755 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -115,10 +115,14 @@ __git_ps1 () > > local w > local i > + local worktreestr > > if test -n "${GIT_PS1_SHOWDIRTYSTATE-}"; then > if test "$(git config --bool bash.showDirtyState)" != "false"; then > - git diff --no-ext-diff --ignore-submodules \ > + if test "false" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)"; then > + worktreestr="--work-tree=.." > + fi > + git ${worktreestr} diff --no-ext-diff --ignore-submodules \ > --quiet --exit-code || w="*" > if git rev-parse --quiet --verify HEAD >/dev/null; then > git diff-index --cached --quiet \ > -- > 1.6.1.2.390.gba743 > -- Shawn.