304
304
# filter on log messages
305
305
log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
306
306
search, log_rev_iterator)
307
# generate deltas for things we will show
308
log_rev_iterator = make_delta_filter(branch, view_revisions, generate_delta,
309
search, log_rev_iterator)
307
310
return log_rev_iterator
330
333
def _filter_message_re(searchRE, log_rev_iterator):
331
334
for revs in log_rev_iterator:
332
336
for (rev_id, revno, merge_depth), rev, delta in revs:
333
337
if searchRE.search(rev.message):
334
yield (rev_id, revno, merge_depth), rev, delta
338
new_revs.append(((rev_id, revno, merge_depth), rev, delta))
342
def make_delta_filter(branch, view_revisions, generate_delta, search,
344
"""Add revision deltas to a log iterator if needed.
346
:param branch: The branch being logged.
347
:param view_revisions: The revisions being viewed.
348
:param generate_delta: Whether to generate a delta for each revision.
349
:param search: A user text search string.
350
:param log_rev_iterator: An input iterator containing all revisions that
351
could be displayed, in lists.
352
:return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
355
if not generate_delta:
356
return log_rev_iterator
357
return _generate_deltas(branch.repository, log_rev_iterator)
360
def _generate_deltas(repository, log_rev_iterator):
361
for revs in log_rev_iterator:
362
revisions = [rev[1] for rev in revs]
363
deltas = repository.get_deltas_for_revisions(revisions)
364
revs = [(rev[0], rev[1], delta) for rev, delta in izip(revs, deltas)]
337
368
def _iter_revisions(branch, view_revisions, generate_delta, search):
350
381
cur_view_revisions = [d for x, d in zip(range(num), view_revisions)]
351
382
if len(cur_view_revisions) == 0:
354
384
# r = revision, n = revno, d = merge depth
355
385
revision_ids = [r for (r, n, d) in cur_view_revisions]
356
386
revisions = repository.get_revisions(revision_ids)
358
deltas = repository.get_deltas_for_revisions(revisions)
360
deltas = [None] * num
361
yield zip(cur_view_revisions, revisions, deltas)
387
yield zip(cur_view_revisions, revisions, [None] * num)
362
388
num = min(int(num * 1.5), 200)