changeset 2539:da18c423b100 beta

Invalidate gits parsed_refs cache after commit, tagging or tag remove
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 03 Jul 2012 00:53:41 +0200
parents 827d4252d81f
children b1975bb589c5
files rhodecode/lib/vcs/backends/git/inmemory.py rhodecode/lib/vcs/backends/git/repository.py
diffstat 2 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/vcs/backends/git/inmemory.py	Tue Jul 03 00:20:12 2012 +0200
+++ b/rhodecode/lib/vcs/backends/git/inmemory.py	Tue Jul 03 00:53:41 2012 +0200
@@ -149,6 +149,8 @@
         # Update vcs repository object & recreate dulwich repo
         self.repository.revisions.append(commit.id)
         self.repository._repo = Repo(self.repository.path)
+        # invalidate parsed refs after commit
+        self.repository._parsed_refs = self.repository._get_parsed_refs()
         tip = self.repository.get_changeset()
         self.reset()
         return tip
--- a/rhodecode/lib/vcs/backends/git/repository.py	Tue Jul 03 00:20:12 2012 +0200
+++ b/rhodecode/lib/vcs/backends/git/repository.py	Tue Jul 03 00:53:41 2012 +0200
@@ -312,6 +312,7 @@
             changeset.raw_id)
         self._repo.refs["refs/tags/%s" % name] = changeset._commit.id
 
+        self._parsed_refs = self._get_parsed_refs()
         self.tags = self._get_tags()
         return changeset
 
@@ -331,12 +332,16 @@
         tagpath = posixpath.join(self._repo.refs.path, 'refs', 'tags', name)
         try:
             os.remove(tagpath)
+            self._parsed_refs = self._get_parsed_refs()
             self.tags = self._get_tags()
         except OSError, e:
             raise RepositoryError(e.strerror)
 
     @LazyProperty
     def _parsed_refs(self):
+        return self._get_parsed_refs()
+
+    def _get_parsed_refs(self):
         refs = self._repo.get_refs()
         keys = [('refs/heads/', 'H'),
                 ('refs/remotes/origin/', 'RH'),