Skip to content

Commit

Permalink
Improve bash prompt to detect various states like an unfinished merge
Browse files Browse the repository at this point in the history
This patch makes the git prompt (when enabled) show if a merge or a
rebase is unfinished. It also detects if a bisect is being done as
well as detached checkouts.

An uncompleted git-am cannot be distinguised from a rebase (the
non-interactive version). Instead of having an even longer prompt
we simply ignore that and hope the power users that use git-am knows
the difference.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
Robin Rosenberg authored and Junio C Hamano committed Feb 7, 2008
1 parent b828fef commit e752019
Showing 1 changed file with 33 additions and 4 deletions.
37 changes: 33 additions & 4 deletions contrib/completion/git-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,41 @@ __gitdir ()

__git_ps1 ()
{
local b="$(git symbolic-ref HEAD 2>/dev/null)"
if [ -n "$b" ]; then
local g="$(git rev-parse --git-dir 2>/dev/null)"
if [ -n "$g" ]; then
local r
local b
if [ -d "$g/../.dotest" ]
then
r="|AM/REBASE"
b="$(git symbolic-ref HEAD 2>/dev/null)"
elif [ -f "$g/.dotest-merge/interactive" ]
then
r="|REBASE-i"
b="$(cat $g/.dotest-merge/head-name)"
elif [ -d "$g/.dotest-merge" ]
then
r="|REBASE-m"
b="$(cat $g/.dotest-merge/head-name)"
elif [ -f "$g/MERGE_HEAD" ]
then
r="|MERGING"
b="$(git symbolic-ref HEAD 2>/dev/null)"
else
if [ -f $g/BISECT_LOG ]
then
r="|BISECTING"
fi
if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
then
b="$(cut -c1-7 $g/HEAD)..."
fi
fi

if [ -n "$1" ]; then
printf "$1" "${b##refs/heads/}"
printf "$1" "${b##refs/heads/}$r"
else
printf " (%s)" "${b##refs/heads/}"
printf " (%s)" "${b##refs/heads/}$r"
fi
fi
}
Expand Down

0 comments on commit e752019

Please sign in to comment.