changeset 2198:9784a54a0f5b beta

display current heads of branches for git in changelog and shortlog
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 17 Apr 2012 21:44:26 +0200
parents b14d8bd96144
children 31ebf7010566
files rhodecode/lib/vcs/backends/git/changeset.py rhodecode/lib/vcs/backends/git/repository.py rhodecode/templates/changelog/changelog.html rhodecode/templates/shortlog/shortlog_data.html
diffstat 4 files changed, 20 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/vcs/backends/git/changeset.py	Tue Apr 17 21:41:46 2012 +0200
+++ b/rhodecode/lib/vcs/backends/git/changeset.py	Tue Apr 17 21:44:26 2012 +0200
@@ -66,26 +66,13 @@
 
     @LazyProperty
     def branch(self):
-        # TODO: Cache as we walk (id <-> branch name mapping)
-        refs = self.repository._repo.get_refs()
-        heads = {}
-        for key, val in refs.items():
-            for ref_key in ['refs/heads/', 'refs/remotes/origin/']:
-                if key.startswith(ref_key):
-                    n = key[len(ref_key):]
-                    if n not in ['HEAD']:
-                        heads[n] = val
+
+        heads = self.repository._heads(reverse=False)
 
-        for name, id in heads.iteritems():
-            walker = self.repository._repo.object_store.get_graph_walker([id])
-            while True:
-                id_ = walker.next()
-                if not id_:
-                    break
-                if id_ == self.id:
-                    return safe_unicode(name)
-        raise ChangesetError("This should not happen... Have you manually "
-                             "change id of the changeset?")
+        ref = heads.get(self.raw_id)
+        if ref:
+            return safe_unicode(ref)
+
 
     def _fix_path(self, path):
         """
--- a/rhodecode/lib/vcs/backends/git/repository.py	Tue Apr 17 21:41:46 2012 +0200
+++ b/rhodecode/lib/vcs/backends/git/repository.py	Tue Apr 17 21:44:26 2012 +0200
@@ -246,6 +246,19 @@
             if ref.startswith('refs/heads/') and not ref.endswith('/HEAD')]
         return OrderedDict(sorted(_branches, key=sortkey, reverse=False))
 
+    def _heads(self, reverse=False):
+        refs = self._repo.get_refs()
+        heads = {}
+
+        for key, val in refs.items():
+            for ref_key in ['refs/heads/', 'refs/remotes/origin/']:
+                if key.startswith(ref_key):
+                    n = key[len(ref_key):]
+                    if n not in ['HEAD']:
+                        heads[n] = val
+
+        return heads if reverse else dict((y,x) for x,y in heads.iteritems())
+
     def _get_tags(self):
         if not self.revisions:
             return {}
--- a/rhodecode/templates/changelog/changelog.html	Tue Apr 17 21:41:46 2012 +0200
+++ b/rhodecode/templates/changelog/changelog.html	Tue Apr 17 21:44:26 2012 +0200
@@ -91,7 +91,7 @@
 									%if len(cs.parents)>1:
 									<span class="merge">${_('merge')}</span>
 									%endif
-									%if h.is_hg(c.rhodecode_repo) and cs.branch:
+									%if cs.branch:
 									<span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
 									   ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
 									%endif
--- a/rhodecode/templates/shortlog/shortlog_data.html	Tue Apr 17 21:41:46 2012 +0200
+++ b/rhodecode/templates/shortlog/shortlog_data.html	Tue Apr 17 21:44:26 2012 +0200
@@ -26,9 +26,7 @@
 		<td>
 			<span class="logtags">
 				<span class="branchtag">
-                %if h.is_hg(c.rhodecode_repo):
                     ${cs.branch}
-                %endif
                 </span>
 			</span>
 		</td>