Rev 3644: Setup a log iterator that more closely matches what the code tries to do with repository operations. in http://people.ubuntu.com/~robertc/baz2.0/log
Robert Collins
robertc at robertcollins.net
Thu Aug 21 03:01:04 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/log
------------------------------------------------------------
revno: 3644
revision-id: robertc at robertcollins.net-20080821020100-hnqht1b4wt0ixqqp
parent: robertc at robertcollins.net-20080821014143-0gabznzvn10vv3sl
committer: Robert Collins <robertc at robertcollins.net>
branch nick: log
timestamp: Thu 2008-08-21 12:01:00 +1000
message:
Setup a log iterator that more closely matches what the code tries to do with repository operations.
modified:
bzrlib/log.py log.py-20050505065812-c40ce11702fe5fb1
=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py 2008-08-21 01:41:43 +0000
+++ b/bzrlib/log.py 2008-08-21 02:01:00 +0000
@@ -222,14 +222,15 @@
log_count = 0
revision_iterator = make_log_rev_iterator(branch,
view_revisions, generate_delta, search)
- for (rev_id, revno, merge_depth), rev, delta in revision_iterator:
- lr = LogRevision(rev, revno, merge_depth, delta,
- rev_tag_dict.get(rev_id))
- lf.log_revision(lr)
- if limit:
- log_count += 1
- if log_count >= limit:
- break
+ for revs in revision_iterator:
+ for (rev_id, revno, merge_depth), rev, delta in revs:
+ lr = LogRevision(rev, revno, merge_depth, delta,
+ rev_tag_dict.get(rev_id))
+ lf.log_revision(lr)
+ if limit:
+ log_count += 1
+ if log_count >= limit:
+ break
def calculate_view_revisions(branch, start_revision, end_revision, direction,
@@ -294,10 +295,12 @@
: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.
- :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
+ :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
+ delta).
"""
# core log logic
- log_rev_iterator = _iter_revisions(branch.repository, view_revisions, generate_delta)
+ log_rev_iterator = _iter_revisions(branch, view_revisions, generate_delta,
+ search)
# filter on log messages
log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
search, log_rev_iterator)
@@ -313,8 +316,9 @@
: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.
- :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
+ could be displayed, in lists.
+ :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
+ delta).
"""
if search is None:
return log_rev_iterator
@@ -324,12 +328,22 @@
def _filter_message_re(searchRE, log_rev_iterator):
- for (rev_id, revno, merge_depth), rev, delta in log_rev_iterator:
- if searchRE.search(rev.message):
- yield (rev_id, revno, merge_depth), rev, delta
-
-
-def _iter_revisions(repository, view_revisions, generate_delta):
+ for revs in log_rev_iterator:
+ for (rev_id, revno, merge_depth), rev, delta in revs:
+ if searchRE.search(rev.message):
+ yield (rev_id, revno, merge_depth), rev, delta
+
+
+def _iter_revisions(branch, view_revisions, generate_delta, search):
+ """Create an iterator over the revisions to log.
+
+ :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.
+ :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
+ """
+ repository = branch.repository
num = 9
view_revisions = iter(view_revisions)
while True:
@@ -342,10 +356,9 @@
revisions = repository.get_revisions(revision_ids)
if generate_delta:
deltas = repository.get_deltas_for_revisions(revisions)
- cur_deltas = dict(izip((r.revision_id for r in revisions),
- deltas))
- for view_data, revision in izip(cur_view_revisions, revisions):
- yield view_data, revision, cur_deltas.get(revision.revision_id)
+ else:
+ deltas = [None] * num
+ yield zip(cur_view_revisions, revisions, deltas)
num = min(int(num * 1.5), 200)
More information about the bazaar-commits
mailing list