Merge pull request #4 from wkentaro/fix-git-prompt-plugin

Show tag name when detached status if possible
This commit is contained in:
Marc Cornellà 2015-08-17 12:43:23 +02:00
commit 9121f3e9d7

View File

@ -3,9 +3,31 @@ from __future__ import print_function
import sys import sys
import re import re
import shlex
from subprocess import Popen, PIPE, check_output 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 # `git status --porcelain --branch` can collect all information
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind # branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
po = Popen(['git', 'status', '--porcelain', '--branch'], stdout=PIPE, stderr=PIPE) 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 st[0] == '#' and st[1] == '#':
if re.search('Initial commit on', st[2]): if re.search('Initial commit on', st[2]):
branch = st[2].split(' ')[-1] branch = st[2].split(' ')[-1]
elif re.search('no branch', st[2]): elif re.search('no branch', st[2]): # detached status
branch = check_output(['git', 'rev-parse', '--short', 'HEAD']).decode('utf-8').strip() branch = get_tagname_or_hash()
elif len(st[2].strip().split('...')) == 1: elif len(st[2].strip().split('...')) == 1:
branch = st[2].strip() branch = st[2].strip()
else: else: