Rev 414: page_loading in http://bazaar.launchpad.net/~jameinel/loggerhead/all

John Arbash Meinel john at arbash-meinel.com
Mon Apr 26 22:29:55 BST 2010


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

------------------------------------------------------------
revno: 414 [merge]
revision-id: john at arbash-meinel.com-20100426212917-e438apefo5fxm8dj
parent: john at arbash-meinel.com-20100426212902-nb76zvp1h8qcee90
parent: john at arbash-meinel.com-20100426190237-ba4x3pw3nq039psy
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: all
timestamp: Mon 2010-04-26 16:29:17 -0500
message:
  page_loading
modified:
  loggerhead/controllers/changelog_ui.py changelog_ui.py-20061211064342-102iqirsciyvgtcf-19
  loggerhead/history.py          history.py-20061211064342-102iqirsciyvgtcf-5
-------------- next part --------------
=== modified file 'loggerhead/controllers/changelog_ui.py'
--- a/loggerhead/controllers/changelog_ui.py	2010-04-22 08:52:59 +0000
+++ b/loggerhead/controllers/changelog_ui.py	2010-04-26 19:02:37 +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,
+                extra_rev_count=pagesize+1)
             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-26 18:17:26 +0000
+++ b/loggerhead/history.py	2010-04-26 21:29:17 +0000
@@ -454,15 +454,40 @@
         if revid is None:
             revid = self.last_revid
         if file_id is not None:
-            # since revid is 'start_revid', possibly should start the path
-            # tracing from revid... FIXME
-            revlist = list(self.get_short_revision_history_by_fileid(file_id))
-            revlist = list(self.get_revids_from(revlist, revid))
+            revlist = list(
+                self.get_short_revision_history_by_fileid(file_id, 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 _iterate_sufficiently(self, iterable, stop_at, extra_rev_count):
+        """Return a list of iterable.
+
+        If extra_rev_count is None, fully consume iterable.
+        Otherwise, stop at 'stop_at' + extra_rev_count.
+
+        Example:
+          iterate until you find stop_at, then iterate 10 more times.
+        """
+        if extra_rev_count is None:
+            return list(iterable)
+        result = []
+        found = False
+        for n in iterable:
+            result.append(n)
+            if n == stop_at:
+                found = True
+                break
+        if found:
+            for count, n in enumerate(iterable):
+                result.append(n)
+                if count >= extra_rev_count:
+                    break
+        return result
+
+    def get_view(self, revid, start_revid, file_id, query=None,
+                 extra_rev_count=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)
@@ -473,6 +498,10 @@
               file.
             - if a start_revid is given, we're viewing the branch from a
               specific revision up the tree.
+            - if extra_rev_count is given, find the view from start_revid =>
+              revid, and continue an additional 'extra_rev_count'. If not
+              given, then revid_list will contain the full history of
+              start_revid
 
         these may be combined to view revisions for a specific file, from
         a specific revision, with a specific search query.
@@ -491,12 +520,16 @@
 
         if query is None:
             revid_list = self.get_file_view(start_revid, file_id)
+            revid_list = self._iterate_sufficiently(revid_list, revid,
+                                                    extra_rev_count)
             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._iterate_sufficiently(revid_list, revid,
+                                                        extra_rev_count)
                 start_revid = revid
             return revid, start_revid, revid_list
 



More information about the bazaar-commits mailing list