diff options
author | Kentaro Wada <www.kentaro.wada@gmail.com> | 2015-08-17 18:22:27 +0900 |
---|---|---|
committer | Kentaro Wada <www.kentaro.wada@gmail.com> | 2015-08-17 18:22:27 +0900 |
commit | c4ba3065a1e9beb76f2f0ac64f3436b5448576b2 (patch) | |
tree | 3e1d802f35472bc0d456deaac612d32aeafc559d /plugins/git-prompt | |
parent | 3c698743fa4265ab2b70b880e12f957792669438 (diff) | |
download | zsh-c4ba3065a1e9beb76f2f0ac64f3436b5448576b2.tar.gz zsh-c4ba3065a1e9beb76f2f0ac64f3436b5448576b2.tar.bz2 zsh-c4ba3065a1e9beb76f2f0ac64f3436b5448576b2.zip |
Show tag name when detached status if possible
Diffstat (limited to 'plugins/git-prompt')
-rw-r--r-- | plugins/git-prompt/gitstatus.py | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py index 1beae541a..a8eb8284b 100644 --- a/plugins/git-prompt/gitstatus.py +++ b/plugins/git-prompt/gitstatus.py @@ -3,9 +3,31 @@ from __future__ import print_function import sys import re +import shlex from subprocess import Popen, PIPE, check_output +def get_tagname_or_hash(): + """return tagname if exists else hash""" + cmd = 'git log -1 --format="%h%d"' + output = check_output(shlex.split(cmd)).decode('utf-8').strip() + hash_, tagname = None, None + # get hash + m = re.search('\(.*\)$', output) + if m: + hash_ = output[:m.start()-1] + # get tagname + m = re.search('tag: .*[,\)]', output) + if m: + tagname = 'tags/' + output[m.start()+len('tag: '): m.end()-1] + + if tagname: + return tagname + elif hash_: + return hash_ + return None + + # `git status --porcelain --branch` can collect all information # branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind po = Popen(['git', 'status', '--porcelain', '--branch'], stdout=PIPE, stderr=PIPE) @@ -21,8 +43,8 @@ for st in status: if st[0] == '#' and st[1] == '#': if re.search('Initial commit on', st[2]): branch = st[2].split(' ')[-1] - elif re.search('no branch', st[2]): - branch = check_output(['git', 'rev-parse', '--short', 'HEAD']).decode('utf-8').strip() + elif re.search('no branch', st[2]): # detached status + branch = get_tagname_or_hash() elif len(st[2].strip().split('...')) == 1: branch = st[2].strip() else: |