Rev 412: pass the pagesize down to History. in http://bazaar.launchpad.net/~jameinel/loggerhead/history_db

John Arbash Meinel john at arbash-meinel.com
Wed Apr 14 18:49:52 BST 2010


At http://bazaar.launchpad.net/~jameinel/loggerhead/history_db

------------------------------------------------------------
revno: 412
revision-id: john at arbash-meinel.com-20100414174934-h77s6iz1oxb92ix3
parent: john at arbash-meinel.com-20100414174859-ta7b9sta5j3shpyj
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: history_db
timestamp: Wed 2010-04-14 12:49:34 -0500
message:
  pass the pagesize down to History.
  
  That way we don't have to walk 5k mainline revisions, when we are only
  going to display 20.
-------------- next part --------------
=== modified file 'loggerhead/controllers/changelog_ui.py'
--- a/loggerhead/controllers/changelog_ui.py	2009-06-25 03:35:43 +0000
+++ b/loggerhead/controllers/changelog_ui.py	2010-04-14 17:49:34 +0000
@@ -50,7 +50,8 @@
 
         try:
             revid, start_revid, revid_list = history.get_view(
-                revid, start_revid, filter_file_id, query)
+                revid, start_revid, filter_file_id, query,
+                max_revs=pagesize)
             util.set_context(kwargs)
 
             if (query is not None) and (len(revid_list) == 0):

=== modified file 'loggerhead/history.py'
--- a/loggerhead/history.py	2010-04-14 17:07:57 +0000
+++ b/loggerhead/history.py	2010-04-14 17:49:34 +0000
@@ -348,13 +348,12 @@
             # TODO: This operation appears at the top of profiling currently
             #       when loading the 'changes' page. Especially unfortunate
             #       given that we only show ~20 revs...
-            if start_revid == self.last_revid:
-                history = reversed(self._branch.revision_history())
-            else:
-                history = self._branch.repository.iter_reverse_revision_history(
-                                start_revid)
-            for rev_id in history:
+            history = self._branch.repository.iter_reverse_revision_history(
+                            start_revid)
+            for ctr, rev_id in enumerate(history):
                 yield rev_id
+                if ctr > 100:
+                    break
             return
         revid_set = set(revid_list)
 
@@ -514,12 +513,18 @@
         if file_id is not None:
             revlist = list(
                 self.get_short_revision_history_by_fileid(file_id, revid))
-            revlist = list(self.get_revids_from(revlist, revid))
+            revlist = self.get_revids_from(revlist, revid)
         else:
-            revlist = list(self.get_revids_from(None, revid))
+            revlist = self.get_revids_from(None, revid)
         return revlist
 
-    def get_view(self, revid, start_revid, file_id, query=None):
+    def _expand_iterable(self, iterable, count=None):
+        if count is None:
+            return list(iterable)
+        iterator = iter(iterable)
+        return [iterator.next() for i in xrange(count)]
+
+    def get_view(self, revid, start_revid, file_id, query=None, max_revs=None):
         """
         use the URL parameters (revid, start_revid, file_id, and query) to
         determine the revision list we're viewing (start_revid, file_id, query)
@@ -547,13 +552,15 @@
             start_revid = self.last_revid
 
         if query is None:
-            revid_list = self.get_file_view(start_revid, file_id)
+            revid_list = self._expand_iterable(
+                self.get_file_view(start_revid, file_id), max_revs)
             if revid is None:
                 revid = start_revid
             if revid not in revid_list:
                 # if the given revid is not in the revlist, use a revlist that
                 # starts at the given revid.
-                revid_list = self.get_file_view(revid, file_id)
+                revid_list = self._expand_iterable(
+                    self.get_file_view(revid, file_id), max_revs)
                 start_revid = revid
             return revid, start_revid, revid_list
 



More information about the bazaar-commits mailing list