From 51a1887a88c6d349b0d58850d86b476c0b415527 Mon Sep 17 00:00:00 2001 From: sonnym Date: Sun, 25 Mar 2012 16:10:32 -0400 Subject: [PATCH] make git_prompt_info aware of detached HEAD this commit also checks for tag names once the repository has been determined to be in a detached HEAD state --- lib/git.zsh | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/git.zsh b/lib/git.zsh index 95dd3dd43..3b0ad50dc 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -1,18 +1,31 @@ # get the name of the branch we are on function git_prompt_info() { - ref=$(git symbolic-ref HEAD 2> /dev/null) || \ - ref=$(git rev-parse --short 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 + tag_name=$(git name-rev --name-only $(git --no-pager show --stat 2> /dev/null | head -n 1 | awk '{ print $2 }') 2> /dev/null) + + # set ref to tag name if found, else set to short sha + if [ -n $tag_name ]; then + ref=$tag_name + else + ref=$(git rev-parse --short HEAD 2> /dev/null) + 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" @@ -39,6 +52,14 @@ git_remote_status() { 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() { if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then