Rev 3643: Refactoring in log towards more pluggable revision selection. in http://people.ubuntu.com/~robertc/baz2.0/log
Robert Collins
robertc at robertcollins.net
Thu Aug 21 02:41:50 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/log
------------------------------------------------------------
revno: 3643
revision-id: robertc at robertcollins.net-20080821014143-0gabznzvn10vv3sl
parent: pqm at pqm.ubuntu.com-20080820164550-e4vt9gdxv8hlic7n
committer: Robert Collins <robertc at robertcollins.net>
branch nick: log
timestamp: Thu 2008-08-21 11:41:43 +1000
message:
Refactoring in log towards more pluggable revision selection.
modified:
bzrlib/log.py log.py-20050505065812-c40ce11702fe5fb1
=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py 2008-07-18 03:07:07 +0000
+++ b/bzrlib/log.py 2008-08-21 01:41:43 +0000
@@ -210,11 +210,6 @@
specific_fileid,
generate_merge_revisions,
allow_single_merge_revision)
- if search is not None:
- searchRE = re.compile(search, re.IGNORECASE)
- else:
- searchRE = None
-
rev_tag_dict = {}
generate_tags = getattr(lf, 'supports_tags', False)
if generate_tags:
@@ -225,12 +220,9 @@
# now we just print all the revisions
log_count = 0
- for (rev_id, revno, merge_depth), rev, delta in _iter_revisions(
- branch.repository, view_revisions, generate_delta):
- if searchRE:
- if not searchRE.search(rev.message):
- continue
-
+ 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)
@@ -295,6 +287,48 @@
yield revision_id, str(start_revno - num), 0
+def make_log_rev_iterator(branch, view_revisions, generate_delta, search):
+ """Create a revision iterator for 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).
+ """
+ # core log logic
+ log_rev_iterator = _iter_revisions(branch.repository, view_revisions, generate_delta)
+ # filter on log messages
+ log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
+ search, log_rev_iterator)
+ return log_rev_iterator
+
+
+def make_search_filter(branch, view_revisions, generate_delta, search,
+ log_rev_iterator):
+ """Create a filtered iterator of log_rev_iterator matching on a regex.
+
+ :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.
+ :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
+ """
+ if search is None:
+ return log_rev_iterator
+ # Compile the search now to get early errors.
+ searchRE = re.compile(search, re.IGNORECASE)
+ return _filter_message_re(searchRE, log_rev_iterator)
+
+
+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):
num = 9
view_revisions = iter(view_revisions)
More information about the bazaar-commits
mailing list