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