Rev 3646: Factor out revision object extraction from revision batching. in http://people.ubuntu.com/~robertc/baz2.0/log

Robert Collins robertc at robertcollins.net
Thu Aug 21 03:43:42 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/log

------------------------------------------------------------
revno: 3646
revision-id: robertc at robertcollins.net-20080821024338-palsst8qcdzzdob0
parent: robertc at robertcollins.net-20080821023225-4vhy9yq7884myw3c
committer: Robert Collins <robertc at robertcollins.net>
branch nick: log
timestamp: Thu 2008-08-21 12:43:38 +1000
message:
  Factor out revision object extraction from revision batching.
modified:
  bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py	2008-08-21 02:32:25 +0000
+++ b/bzrlib/log.py	2008-08-21 02:43:38 +0000
@@ -301,6 +301,9 @@
     # core log logic
     log_rev_iterator = _iter_revisions(branch, view_revisions, generate_delta,
         search)
+    # read revision objects
+    log_rev_iterator = make_revision_objects(branch, view_revisions, generate_delta,
+        search, log_rev_iterator)
     # filter on log messages
     log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
         search, log_rev_iterator)
@@ -365,6 +368,32 @@
         yield revs
 
 
+def make_revision_objects(branch, view_revisions, generate_delta, search,
+    log_rev_iterator):
+    """Extract revision objects from the repository
+
+    :param branch: The branch being logged.
+    :param view_revisions: The revisions being viewed.
+    :param generate_delta: Whether to generate a delta for each revision.
+    :param search: A user text search string.
+    :param log_rev_iterator: An input iterator containing all revisions that
+        could be displayed, in lists.
+    :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
+        delta).
+    """
+    return _extract_revisions(branch.repository, log_rev_iterator)
+
+
+def _extract_revisions(repository, log_rev_iterator):
+    for revs in log_rev_iterator:
+        # r = revision_id, n = revno, d = merge depth
+        revision_ids = [view[0] for view, _, _ in revs]
+        revisions = repository.get_revisions(revision_ids)
+        revs = [(rev[0], revision, rev[2]) for rev, revision in
+            izip(revs, revisions)]
+        yield revs
+
+
 def _iter_revisions(branch, view_revisions, generate_delta, search):
     """Create an iterator over the revisions to log.
 
@@ -380,11 +409,9 @@
     while True:
         cur_view_revisions = [d for x, d in zip(range(num), view_revisions)]
         if len(cur_view_revisions) == 0:
-            break
-        # r = revision, n = revno, d = merge depth
-        revision_ids = [r for (r, n, d) in cur_view_revisions]
-        revisions = repository.get_revisions(revision_ids)
-        yield zip(cur_view_revisions, revisions, [None] * num)
+            return
+        nones = [None] * num
+        yield zip(cur_view_revisions, nones, nones)
         num = min(int(num * 1.5), 200)
 
 




More information about the bazaar-commits mailing list