浏览代码

Rewrite gitstatus collection to be more robust (#7322)

Fix the finicky parsing logic and just ask git the necessary information
directly.
lieryan 4 年之前
父节点
当前提交
e204c596ef
共有 1 个文件被更改,包括 7 次插入12 次删除
  1. 7 12
      plugins/git-prompt/gitstatus.py

+ 7 - 12
plugins/git-prompt/gitstatus.py

@@ -4,26 +4,21 @@ from __future__ import print_function
 import os
 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]
+    hash_cmd = ['git', 'rev-parse', '--short', 'HEAD']
+    hash_ = check_output(hash_cmd).strip()
+
     # get tagname
-    m = re.search('tag: .*[,\)]', output)
-    if m:
-        tagname = 'tags/' + output[m.start()+len('tag: '): m.end()-1]
+    tags_cmd = ['git', 'for-each-ref', '--points-at=HEAD', '--count=2', '--sort=-version:refname', '--format=%(refname:short)', 'refs/tags']
+    tags = check_output(tags_cmd).split()
 
-    if tagname:
-        return tagname.replace(' ', '')
+    if tags:
+        return tags[0] + ('+' if len(tags) > 1 else '')
     elif hash_:
         return hash_
     return None