Rev 1665: Cache tags. in http://people.samba.org/bzr/jelmer/bzr-svn/trunk
Jelmer Vernooij
jelmer at samba.org
Tue Aug 26 05:29:45 BST 2008
At http://people.samba.org/bzr/jelmer/bzr-svn/trunk
------------------------------------------------------------
revno: 1665
revision-id: jelmer at samba.org-20080826042943-z23vhmva3wfnxjrm
parent: jelmer at samba.org-20080826040939-burapuad97m3eyv4
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Tue 2008-08-26 06:29:43 +0200
message:
Cache tags.
modified:
repository.py repository.py-20060306123302-1f8c5069b3fe0265
tags.py tags.py-20080822211316-scblu3akdvu0b64c-1
=== modified file 'repository.py'
--- a/repository.py 2008-08-26 04:09:39 +0000
+++ b/repository.py 2008-08-26 04:29:43 +0000
@@ -194,6 +194,7 @@
self._default_mapping = None
self._hinted_branch_path = branch_path
self._real_parents_provider = self
+ self._cached_tags = {}
cache = self.get_config().get_use_cache()
@@ -239,6 +240,7 @@
self._clear_cached_state()
def _clear_cached_state(self):
+ self._cached_tags = {}
self._cached_revnum = None
self._parents_provider = CachingParentsProvider(self._real_parents_provider)
@@ -877,7 +879,7 @@
return dict([(layout.get_tag_name(p, project), revid) for (p, revid) in tags.items() if revid is not None])
@needs_read_lock
- def find_tags(self, project, layout=None, from_revnum=0, to_revnum=None):
+ def find_tags(self, project, layout=None, mapping=None, revnum=None):
"""Find tags underneath this repository for the specified project.
:param layout: Repository layout to use
@@ -885,40 +887,19 @@
:param project: Name of the project to find tags for. None for all.
:return: Dictionary mapping tag names to revision ids.
"""
+ if revnum is None:
+ revnum = self.get_latest_revnum()
+
if layout is None:
layout = self.get_layout()
- if to_revnum is None:
- to_revnum = self.get_latest_revnum()
-
- mapping = self.get_mapping()
-
- tags = {}
- pb = ui.ui_factory.nested_progress_bar()
- try:
- tag_paths = list(layout.get_tags(to_revnum, project=project, pb=pb))
- for i, (project, bp, nick) in enumerate(tag_paths):
- pb.update("finding tags", i, len(tag_paths))
- npb = ui.ui_factory.nested_progress_bar()
- try:
- it = self.iter_changes(bp, from_revnum=to_revnum,
- to_revnum=0, mapping=mapping,
- pb=npb, limit=2)
- (bp, paths, rev, _) = it.next()
- if paths.has_key(bp):
- del paths[bp]
- if not changes.changes_path(paths, bp, False):
- try:
- (bp, _, rev, _) = it.next()
- except StopIteration:
- pass
- finally:
- npb.finished()
-
- tags[nick] = self.generate_revision_id(rev, bp, mapping)
- finally:
- pb.finished()
- return tags
+ if mapping is None:
+ mapping = self.get_mapping()
+
+ if not (layout, mapping) in self._cached_tags:
+ self._cached_tags[layout,mapping] = self.find_tags_between(project=project,
+ layout=layout, mapping=mapping, from_revnum=0, to_revnum=revnum)
+ return self._cached_tags[layout,mapping]
def find_branchpaths(self, check_path, check_parent_path,
from_revnum=0, to_revnum=None,
=== modified file 'tags.py'
--- a/tags.py 2008-08-26 03:32:23 +0000
+++ b/tags.py 2008-08-26 04:29:43 +0000
@@ -96,12 +96,10 @@
except KeyError:
raise NoSuchTag(tag_name)
- def get_tag_dict(self, _from_revnum=0):
- return self.repository.find_tags_between(project=self.branch.project,
+ def get_tag_dict(self):
+ return self.repository.find_tags(project=self.branch.project,
layout=self.branch.layout,
- mapping=self.branch.mapping,
- from_revnum=_from_revnum,
- to_revnum=self.repository.get_latest_revnum())
+ mapping=self.branch.mapping)
def get_reverse_tag_dict(self):
"""Returns a dict with revisions as keys
More information about the bazaar-commits
mailing list