diff --git a/lib/git.zsh b/lib/git.zsh index fb4ad8ca6..b0d99bd2b 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -1,23 +1,41 @@ # get the name of the branch we are on function git_prompt_info() { - ref=$(git symbolic-ref HEAD 2> /dev/null) || return + ref=$(git symbolic-ref HEAD 2> /dev/null) + if [ -z $ref ]; then + # check if in detached HEAD mode + branch_name=$(git status -sb $(git_submodule_syntax) 2> /dev/null | head -n 1) + if [ "$branch_name" = "## HEAD (no branch)" ]; then + # set tag name if found + tag_name=$(git name-rev --name-only $(git --no-pager show --stat 2> /dev/null | head -n 1 | awk '{ print $2 }') 2> /dev/null) + if [ -z $tag_name ]; then + ref="detached HEAD" + else + ref=$tag_name + fi + else + return + fi + fi echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" } # Checks if working tree is dirty parse_git_dirty() { - local SUBMODULE_SYNTAX='' - if [[ $POST_1_7_2_GIT -gt 0 ]]; then - SUBMODULE_SYNTAX="--ignore-submodules=dirty" - fi - if [[ -n $(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null) ]]; then + if [[ -n $(git status -s $(git_submodule_syntax) 2> /dev/null) ]]; then echo "$ZSH_THEME_GIT_PROMPT_DIRTY" else echo "$ZSH_THEME_GIT_PROMPT_CLEAN" fi } +git_submodule_syntax() { + if [[ $POST_1_7_2_GIT -gt 0 ]]; then + echo "--ignore-submodules=dirty" + else + echo "" + fi +} # Checks if there are commits ahead from remote function git_prompt_ahead() {