/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Robert Collins
  • Date: 2008-08-21 02:32:25 UTC
  • mto: This revision was merged to the branch mainline in revision 3652.
  • Revision ID: robertc@robertcollins.net-20080821023225-4vhy9yq7884myw3c
Split out delta generation from revision content reading, and structure it after message evaluation, increasing performance of log -v -m.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
308
311
 
309
312
 
329
332
 
330
333
def _filter_message_re(searchRE, log_rev_iterator):
331
334
    for revs in log_rev_iterator:
 
335
        new_revs = []
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))
 
339
        yield new_revs
 
340
 
 
341
 
 
342
def make_delta_filter(branch, view_revisions, generate_delta, search,
 
343
    log_rev_iterator):
 
344
    """Add revision deltas to a log iterator if needed.
 
345
 
 
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,
 
353
        delta).
 
354
    """
 
355
    if not generate_delta:
 
356
        return log_rev_iterator
 
357
    return _generate_deltas(branch.repository, log_rev_iterator)
 
358
 
 
359
 
 
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)]
 
365
        yield revs
335
366
 
336
367
 
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:
352
383
            break
353
 
        cur_deltas = {}
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)
357
 
        if generate_delta:
358
 
            deltas = repository.get_deltas_for_revisions(revisions)
359
 
        else:
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)
363
389
 
364
390