summaryrefslogtreecommitdiff
path: root/functions
diff options
context:
space:
mode:
Diffstat (limited to 'functions')
-rw-r--r--functions/vcs.zsh21
1 files changed, 17 insertions, 4 deletions
diff --git a/functions/vcs.zsh b/functions/vcs.zsh
index 9d3883ca..074d1e05 100644
--- a/functions/vcs.zsh
+++ b/functions/vcs.zsh
@@ -61,10 +61,23 @@ function +vi-git-remotebranch() {
}
function +vi-git-tagname() {
- local tag
-
- tag=$(git describe --tags --exact-match HEAD 2>/dev/null)
- [[ -n "${tag}" ]] && hook_com[branch]="$(print_icon 'VCS_TAG_ICON')${tag}"
+ # Only show the tag name if we are not in DETACHED_HEAD state,
+ # or if the current branch's HEAD is the same commit as a tag but
+ # doesn't have the same name
+ local tag
+ tag=$(git describe --tags --exact-match HEAD 2>/dev/null)
+
+ if [[ -z "$(git symbolic-ref HEAD 2>/dev/null)" || ! -z "${tag}" ]] ; then
+ head=$(git describe --all)
+ # Make sure that detached head or checked out name differs from tag name
+ if [[ "${head}" != "${tag}" ||
+ "$(git rev-parse --abbrev-ref HEAD)" != "${tag}" &&
+ "$(git rev-parse --abbrev-ref HEAD)" != "HEAD" &&
+ "$(git rev-list -n 1 HEAD)" == "$(git rev-list -n 1 ${tag})" ]]; then
+ # Append the tag segment to the branch one
+ [[ -n "${tag}" ]] && hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}"
+ fi
+ fi
}
# Show count of stashed changes