gitview: Use git ls-remote to find the tag and branch details
From: Junio C Hamano <[email protected]>
This fix the below bug
Quoted 5 lines · Junio C Hamano
It does not work in my repository, since you do not seem to handle branch and tag names with slashes in them. All of my topic branches live in directories with two-letter names (e.g. ak/gitview).
Also use ${GIT_DIR} directly so that it works with below environment setup
GIT_DIR=/home/opensource/Test\ Output/git-devel/.git
Signed-off-by Aneesh Kumar K.V <[email protected]>
---
contrib/gitview/gitview | 54 ++++++++++++----------------------------------- 1 files changed, 14 insertions(+), 40 deletions(-)
ecd82bdd8399b84ada1f4fc0c720a88ae0735a94
contrib/gitview/gitview +14 -40
@@ -56,20 +56,6 @@ def show_date(epoch, tz): return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(secs)) -def get_sha1_from_tags(line): - fp = os.popen("git cat-file -t " + line) - entry = string.strip(fp.readline()) - fp.close() - if (entry == "commit"): - return line - elif (entry == "tag"): - fp = os.popen("git cat-file tag "+ line) - entry = string.strip(fp.readline()) - fp.close() - obj = re.split(" ", entry) - if (obj[0] == "object"): - return obj[1] - return None class CellRendererGraph(gtk.GenericCellRenderer): """Cell renderer for directed graph.
@@ -467,32 +453,20 @@ class GitView: respective sha1 details """ self.bt_sha1 = { } - git_dir = os.getenv("GIT_DIR") - if (git_dir == None): - git_dir = ".git" - - #FIXME the path seperator - ref_files = os.listdir(git_dir + "/refs/tags") - for file in ref_files: - fp = open(git_dir + "/refs/tags/"+file) - sha1 = get_sha1_from_tags(string.strip(fp.readline())) - try: - self.bt_sha1[sha1].append(file) - except KeyError: - self.bt_sha1[sha1] = [file] - fp.close() - - - #FIXME the path seperator - ref_files = os.listdir(git_dir + "/refs/heads") - for file in ref_files: - fp = open(git_dir + "/refs/heads/" + file) - sha1 = get_sha1_from_tags(string.strip(fp.readline())) - try: - self.bt_sha1[sha1].append(file) - except KeyError: - self.bt_sha1[sha1] = [file] - fp.close() + ls_remote = re.compile('^(.{40})\trefs/([^^]+)(?:\\^(..))?$'); + fp = os.popen('git ls-remote "${GIT_DIR:-.git}"') + while 1: + line = string.strip(fp.readline()) + if line == '': + break + m = ls_remote.match(line) + if not m: + continue + (sha1, name) = (m.group(1), m.group(2)) + if not self.bt_sha1.has_key(sha1): + self.bt_sha1[sha1] = [] + self.bt_sha1[sha1].append(name) + fp.close() def construct(self):
Signature · 1 line
1.2.0-dirty