/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 04:12:02 UTC
  • mto: This revision was merged to the branch mainline in revision 3652.
  • Revision ID: robertc@robertcollins.net-20080821041202-typ3c7u8e67xlgst
Separate out batching of revisions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
220
220
 
221
221
    # now we just print all the revisions
222
222
    log_count = 0
223
 
    revision_iterator = make_log_rev_iterator(branch,
224
 
        view_revisions, generate_delta, search)
 
223
    revision_iterator = make_log_rev_iterator(branch, view_revisions,
 
224
        generate_delta, search)
225
225
    for revs in revision_iterator:
226
226
        for (rev_id, revno, merge_depth), rev, delta in revs:
227
227
            lr = LogRevision(rev, revno, merge_depth, delta,
295
295
    :param view_revisions: The revisions being viewed.
296
296
    :param generate_delta: Whether to generate a delta for each revision.
297
297
    :param search: A user text search string.
298
 
    :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
 
298
    :return: An iterator over iterators of ((rev_id, revno, merge_depth), rev,
299
299
        delta).
300
300
    """
 
301
    # Convert view_revisions into (view, None, None) groups to fit with
 
302
    # the standard interface here.
 
303
    if type(view_revisions) == list:
 
304
        nones = [None] * len(view_revisions)
 
305
        log_rev_iterator = iter([zip(view_revisions, nones, nones)])
 
306
    else:
 
307
        def _convert():
 
308
            for view in view_revisions:
 
309
                yield (view, None, None)
 
310
        log_rev_iterator = iter([_convert()])
301
311
    # core log logic
302
 
    log_rev_iterator = _iter_revisions(branch, view_revisions, generate_delta,
303
 
        search)
 
312
    log_rev_iterator = make_batch_filter(branch, generate_delta, search,
 
313
        log_rev_iterator)
304
314
    # read revision objects
305
 
    log_rev_iterator = make_revision_objects(branch, view_revisions, generate_delta,
306
 
        search, log_rev_iterator)
 
315
    log_rev_iterator = make_revision_objects(branch, generate_delta, search,
 
316
        log_rev_iterator)
307
317
    # filter on log messages
308
 
    log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
309
 
        search, log_rev_iterator)
 
318
    log_rev_iterator = make_search_filter(branch, generate_delta, search,
 
319
        log_rev_iterator)
310
320
    # generate deltas for things we will show
311
 
    log_rev_iterator = make_delta_filter(branch, view_revisions, generate_delta,
312
 
        search, log_rev_iterator)
 
321
    log_rev_iterator = make_delta_filter(branch, generate_delta, search,
 
322
        log_rev_iterator)
313
323
    return log_rev_iterator
314
324
 
315
325
 
316
 
def make_search_filter(branch, view_revisions, generate_delta, search,
317
 
    log_rev_iterator):
 
326
def make_search_filter(branch, generate_delta, search, log_rev_iterator):
318
327
    """Create a filtered iterator of log_rev_iterator matching on a regex.
319
328
 
320
329
    :param branch: The branch being logged.
321
 
    :param view_revisions: The revisions being viewed.
322
330
    :param generate_delta: Whether to generate a delta for each revision.
323
331
    :param search: A user text search string.
324
332
    :param log_rev_iterator: An input iterator containing all revisions that
325
333
        could be displayed, in lists.
326
 
    :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
 
334
    :return: An iterator over iterators of ((rev_id, revno, merge_depth), rev,
327
335
        delta).
328
336
    """
329
337
    if search is None:
342
350
        yield new_revs
343
351
 
344
352
 
345
 
def make_delta_filter(branch, view_revisions, generate_delta, search,
346
 
    log_rev_iterator):
 
353
def make_delta_filter(branch, generate_delta, search, log_rev_iterator):
347
354
    """Add revision deltas to a log iterator if needed.
348
355
 
349
356
    :param branch: The branch being logged.
350
 
    :param view_revisions: The revisions being viewed.
351
357
    :param generate_delta: Whether to generate a delta for each revision.
352
358
    :param search: A user text search string.
353
359
    :param log_rev_iterator: An input iterator containing all revisions that
354
360
        could be displayed, in lists.
355
 
    :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
 
361
    :return: An iterator over iterators of ((rev_id, revno, merge_depth), rev,
356
362
        delta).
357
363
    """
358
364
    if not generate_delta:
368
374
        yield revs
369
375
 
370
376
 
371
 
def make_revision_objects(branch, view_revisions, generate_delta, search,
372
 
    log_rev_iterator):
 
377
def make_revision_objects(branch, generate_delta, search, log_rev_iterator):
373
378
    """Extract revision objects from the repository
374
379
 
375
380
    :param branch: The branch being logged.
376
 
    :param view_revisions: The revisions being viewed.
377
381
    :param generate_delta: Whether to generate a delta for each revision.
378
382
    :param search: A user text search string.
379
383
    :param log_rev_iterator: An input iterator containing all revisions that
380
384
        could be displayed, in lists.
381
 
    :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
 
385
    :return: An iterator over iterators of ((rev_id, revno, merge_depth), rev,
382
386
        delta).
383
387
    """
384
 
    return _extract_revisions(branch.repository, log_rev_iterator)
385
 
 
386
 
 
387
 
def _extract_revisions(repository, log_rev_iterator):
 
388
    repository = branch.repository
388
389
    for revs in log_rev_iterator:
389
390
        # r = revision_id, n = revno, d = merge depth
390
391
        revision_ids = [view[0] for view, _, _ in revs]
394
395
        yield revs
395
396
 
396
397
 
397
 
def _iter_revisions(branch, view_revisions, generate_delta, search):
398
 
    """Create an iterator over the revisions to log.
 
398
def make_batch_filter(branch, generate_delta, search, log_rev_iterator):
 
399
    """Group up a single large batch into smaller ones.
399
400
 
400
401
    :param branch: The branch being logged.
401
 
    :param view_revisions: The revisions being viewed.
402
402
    :param generate_delta: Whether to generate a delta for each revision.
403
403
    :param search: A user text search string.
 
404
    :param log_rev_iterator: An input iterator containing all revisions that
 
405
        could be displayed, in lists.
404
406
    :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
405
407
    """
406
408
    repository = branch.repository
407
409
    num = 9
408
 
    view_revisions = iter(view_revisions)
409
 
    while True:
410
 
        cur_view_revisions = [d for x, d in zip(range(num), view_revisions)]
411
 
        if len(cur_view_revisions) == 0:
412
 
            return
413
 
        nones = [None] * num
414
 
        yield zip(cur_view_revisions, nones, nones)
415
 
        num = min(int(num * 1.5), 200)
 
410
    for batch in log_rev_iterator:
 
411
        batch = iter(batch)
 
412
        while True:
 
413
            step = [detail for _, detail in zip(range(num), batch)]
 
414
            if len(step) == 0:
 
415
                break
 
416
            yield step
 
417
            num = min(int(num * 1.5), 200)
416
418
 
417
419
 
418
420
def _get_mainline_revs(branch, start_revision, end_revision):