Rev 5: make it possible to use the revision cache. in file:///data/jelmer/bzr-global-log/trunk/

Jelmer Vernooij jelmer at samba.org
Tue Nov 20 18:22:46 GMT 2007


At file:///data/jelmer/bzr-global-log/trunk/

------------------------------------------------------------
revno: 5
revision-id:jelmer at samba.org-20071105025326-lsj3pct1eepgmqng
parent: jelmer at samba.org-20071105024001-zjcixn8u3y3ify36
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2007-11-05 03:53:26 +0100
message:
  make it possible to use the revision cache.
modified:
  __init__.py                    __init__.py-20071029004222-avdgq0mc7n1q6q8f-1
  cache.py                       db.py-20071105012118-v51dlgcjf12dagnc-1
  log.py                         log.py-20071105015514-0bmng0zxrpw9xbfw-1
  stack.py                       stack.py-20071105021820-d024bz62abe2t3fv-1
=== modified file '__init__.py'
--- a/__init__.py	2007-11-05 02:40:01 +0000
+++ b/__init__.py	2007-11-05 02:53:26 +0000
@@ -17,7 +17,7 @@
 from bzrlib import ui
 from bzrlib.branch import Branch
 from bzrlib.commands import Command, register_command
-from bzrlib.option import ListOption
+from bzrlib.option import ListOption, Option
 from bzrlib.log import (log_formatter, log_formatter_registry, show_log, 
                         LineLogFormatter, LogRevision)
 
@@ -28,18 +28,23 @@
     takes_options = [
                      'log-format', 
                      ListOption('author', type=unicode, 
-                                help="Specified author only")
+                                help="Specified author only"),
+                     Option('cache', help="Use cache")
                     ]
     takes_args = ["location*"]
 
-    def run(self, location_list, log_format=None, author=None):
+    def run(self, location_list, log_format=None, author=None, cache=False):
+        from bzrlib.plugins.global_log.cache import RevisionCachingRepository
         from bzrlib.plugins.global_log.log import cmp_log_by_time
         from bzrlib.plugins.global_log.stack import SimpleStackingRepository
         pb = ui.ui_factory.nested_progress_bar()
         if location_list is None:
             location_list = ["."]
 
-        repository = SimpleStackingRepository()
+        if cache:
+            repository = RevisionCachingRepository()
+        else:
+            repository = SimpleStackingRepository()
 
         try:
             revids = set()

=== modified file 'cache.py'
--- a/cache.py	2007-11-05 02:40:01 +0000
+++ b/cache.py	2007-11-05 02:53:26 +0000
@@ -15,6 +15,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 import bzrlib
+from bzrlib.errors import NoSuchRevision
 from bzrlib.repository import Repository
 from bzrlib.trace import warning
 
@@ -60,13 +61,13 @@
         raise NotImplementedError(self.get_parents)
 
     def add_revision_location(self, revid, repository_location):
-        raise NotImplementedError(self.add_revision_location)
+        pass
 
     def add_revision(self, rev):
-        raise NotImplementedError(self.add_revision)
+        pass
 
-    def get_revision(self, rev):
-        raise NotImplementedError(self.get_revision)
+    def get_revision(self, revid):
+        raise NoSuchRevision(revid, self)
 
     def get_log_revision(self, rev):
         raise NotImplementedError(self.get_log_revision)
@@ -74,3 +75,17 @@
 
 class RevisionCachingRepository(SimpleStackingRepository):
     """Repository implementation that uses a revision cache if possible."""
+
+    def __init__(self):
+        super(RevisionCachingRepository, self).__init__()
+        self.cache = RevisionCache()
+
+    def _get_revisions(self, revids):
+        for revid in revids:
+            try:
+                rev = self.cache.get_revision(revid)
+            except NoSuchRevision:
+                rev, repo = self._get_stacked_revision(revid)
+                self.cache.add_revision(rev)
+                self.cache.add_revision_location(rev.revision_id, repo.base)
+            yield rev

=== modified file 'log.py'
--- a/log.py	2007-11-05 02:40:01 +0000
+++ b/log.py	2007-11-05 02:53:26 +0000
@@ -19,4 +19,3 @@
 def cmp_log_by_time(x, y):
     return cmp(y.rev.timestamp, x.rev.timestamp)
 
-

=== modified file 'stack.py'
--- a/stack.py	2007-11-05 02:40:01 +0000
+++ b/stack.py	2007-11-05 02:53:26 +0000
@@ -24,16 +24,18 @@
 
     def add_repository(self, repos):
         self._subrepositories.add(repos)
-    
+
+    def _get_stacked_revision(self, revid):
+        for repos in self._subrepositories:
+            try:
+                return repos.get_revision(revid), repos
+            except NoSuchRevision:
+                continue
+        raise NoSuchRevision(revid)
+
     def _get_revisions(self, revids):
         for revid in revids:
-            for repos in self._subrepositories:
-                try:
-                    rev = repos.get_revision(revid)
-                except NoSuchRevision:
-                    continue
-                yield rev
-                break
+            yield self._get_stacked_revision(revid)[0]
 
     def lock_read(self):
         pass




More information about the bazaar-commits mailing list