211
211
generate_merge_revisions,
212
212
allow_single_merge_revision)
213
if search is not None:
214
searchRE = re.compile(search, re.IGNORECASE)
218
213
rev_tag_dict = {}
219
214
generate_tags = getattr(lf, 'supports_tags', False)
220
215
if generate_tags:
226
221
# now we just print all the revisions
228
for (rev_id, revno, merge_depth), rev, delta in _iter_revisions(
229
branch.repository, view_revisions, generate_delta):
231
if not searchRE.search(rev.message):
223
revision_iterator = make_log_rev_iterator(branch,
224
view_revisions, generate_delta, search)
225
for (rev_id, revno, merge_depth), rev, delta in revision_iterator:
234
226
lr = LogRevision(rev, revno, merge_depth, delta,
235
227
rev_tag_dict.get(rev_id))
236
228
lf.log_revision(lr)
295
287
yield revision_id, str(start_revno - num), 0
290
def make_log_rev_iterator(branch, view_revisions, generate_delta, search):
291
"""Create a revision iterator for log.
293
:param branch: The branch being logged.
294
:param view_revisions: The revisions being viewed.
295
:param generate_delta: Whether to generate a delta for each revision.
296
:param search: A user text search string.
297
:return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
300
log_rev_iterator = _iter_revisions(branch.repository, view_revisions, generate_delta)
301
# filter on log messages
302
log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
303
search, log_rev_iterator)
304
return log_rev_iterator
307
def make_search_filter(branch, view_revisions, generate_delta, search,
309
"""Create a filtered iterator of log_rev_iterator matching on a regex.
311
:param branch: The branch being logged.
312
:param view_revisions: The revisions being viewed.
313
:param generate_delta: Whether to generate a delta for each revision.
314
:param search: A user text search string.
315
:param log_rev_iterator: An input iterator containing all revisions that
317
:return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
320
return log_rev_iterator
321
# Compile the search now to get early errors.
322
searchRE = re.compile(search, re.IGNORECASE)
323
return _filter_message_re(searchRE, log_rev_iterator)
326
def _filter_message_re(searchRE, log_rev_iterator):
327
for (rev_id, revno, merge_depth), rev, delta in log_rev_iterator:
328
if searchRE.search(rev.message):
329
yield (rev_id, revno, merge_depth), rev, delta
298
332
def _iter_revisions(repository, view_revisions, generate_delta):
300
334
view_revisions = iter(view_revisions)