/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 breezy/log.py

  • Committer: Jelmer Vernooij
  • Date: 2020-06-22 02:18:45 UTC
  • mto: (7490.40.35 work)
  • mto: This revision was merged to the branch mainline in revision 7519.
  • Revision ID: jelmer@jelmer.uk-20200622021845-cpy2oc29eqlwhot0
Refactor.

Show diffs side-by-side

added added

removed removed

Lines of Context:
411
411
 
412
412
        Subclasses may wish to override this.
413
413
        """
414
 
        return _DefaultLogGenerator(branch, rqst)
 
414
        return _DefaultLogGenerator(branch, **rqst)
 
415
 
 
416
 
 
417
def _log_revision_iterator_using_per_file_graph(
 
418
        branch, delta_type, match, levels, file_id, start_rev_id, end_rev_id,
 
419
        direction, exclude_common_ancestry):
 
420
    # Get the base revisions, filtering by the revision range.
 
421
    # Note that we always generate the merge revisions because
 
422
    # filter_revisions_touching_file_id() requires them ...
 
423
    view_revisions = _calc_view_revisions(
 
424
        branch, start_rev_id, end_rev_id,
 
425
        direction, generate_merge_revisions=True,
 
426
        exclude_common_ancestry=exclude_common_ancestry)
 
427
    if not isinstance(view_revisions, list):
 
428
        view_revisions = list(view_revisions)
 
429
    view_revisions = _filter_revisions_touching_file_id(
 
430
        branch, file_id, view_revisions,
 
431
        include_merges=levels != 1)
 
432
    return make_log_rev_iterator(
 
433
        branch, view_revisions, delta_type, match)
 
434
 
 
435
 
 
436
def _log_revision_iterator_using_delta_matching(
 
437
        branch, delta_type, match, levels, specific_fileids, start_rev_id, end_rev_id,
 
438
        direction, exclude_common_ancestry, limit):
 
439
    # Get the base revisions, filtering by the revision range
 
440
    generate_merge_revisions = levels != 1
 
441
    delayed_graph_generation = not specific_fileids and (
 
442
        limit or start_rev_id or end_rev_id)
 
443
    view_revisions = _calc_view_revisions(
 
444
        branch, start_rev_id, end_rev_id,
 
445
        direction,
 
446
        generate_merge_revisions=generate_merge_revisions,
 
447
        delayed_graph_generation=delayed_graph_generation,
 
448
        exclude_common_ancestry=exclude_common_ancestry)
 
449
 
 
450
    # Apply the other filters
 
451
    return make_log_rev_iterator(branch, view_revisions,
 
452
                                 delta_type, match,
 
453
                                 file_ids=specific_fileids,
 
454
                                 direction=direction)
415
455
 
416
456
 
417
457
class _StartNotLinearAncestor(Exception):
421
461
class _DefaultLogGenerator(LogGenerator):
422
462
    """The default generator of log revisions."""
423
463
 
424
 
    def __init__(self, branch, rqst):
 
464
    def __init__(
 
465
            self, branch, levels=None, limit=None, diff_type=None,
 
466
            delta_type=None, show_signature=None, omit_merges=None,
 
467
            generate_tags=None, specific_fileids=None, match=None,
 
468
            start_revision=None, end_revision=None, direction=None,
 
469
            exclude_common_ancestry=None, _match_using_deltas=None,
 
470
            signature=None):
425
471
        self.branch = branch
426
 
        self.levels = rqst.get('levels')
427
 
        self.limit = rqst.get('limit')
428
 
        self.diff_type = rqst.get('diff_type')
429
 
        self.delta_type = rqst.get('delta_type')
430
 
        self.show_signature = rqst.get('signature')
431
 
        self.omit_merges = rqst.get('omit_merges')
432
 
        self.generate_tags = rqst.get('generate_tags')
433
 
        self.specific_fileids = rqst.get('specific_fileids')
434
 
        self.match = rqst.get('match')
435
 
        self.start_revision = rqst.get('start_revision')
436
 
        self.end_revision = rqst.get('end_revision')
437
 
        self.direction = rqst.get('direction')
438
 
        self.exclude_common_ancestry = rqst.get('exclude_common_ancestry')
439
 
        self._match_using_deltas = rqst.get('_match_using_deltas')
440
 
        if self.generate_tags and branch.supports_tags():
 
472
        self.levels = levels
 
473
        self.limit = limit
 
474
        self.diff_type = diff_type
 
475
        self.delta_type = delta_type
 
476
        self.show_signature = signature
 
477
        self.omit_merges = omit_merges
 
478
        self.specific_fileids = specific_fileids
 
479
        self.match = match
 
480
        self.start_revision = start_revision
 
481
        self.end_revision = end_revision
 
482
        self.direction = direction
 
483
        self.exclude_common_ancestry = exclude_common_ancestry
 
484
        self._match_using_deltas = _match_using_deltas
 
485
        if generate_tags and branch.supports_tags():
441
486
            self.rev_tag_dict = branch.tags.get_reverse_tag_dict()
442
487
        else:
443
488
            self.rev_tag_dict = {}
500
545
        :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
501
546
            delta).
502
547
        """
503
 
        self.start_rev_id, self.end_rev_id = _get_revision_limits(
 
548
        start_rev_id, end_rev_id = _get_revision_limits(
504
549
            self.branch, self.start_revision, self.end_revision)
505
550
        if self._match_using_deltas:
506
 
            return self._log_revision_iterator_using_delta_matching()
 
551
            return _log_revision_iterator_using_delta_matching(
 
552
                self.branch,
 
553
                delta_type=self.delta_type,
 
554
                match=self.match,
 
555
                levels=self.levels,
 
556
                specific_fileids=self.specific_fileids,
 
557
                start_rev_id=start_rev_id, end_rev_id=end_rev_id,
 
558
                direction=self.direction,
 
559
                exclude_common_ancestry=self.exclude_common_ancestry,
 
560
                limit=self.limit)
507
561
        else:
508
562
            # We're using the per-file-graph algorithm. This scales really
509
563
            # well but only makes sense if there is a single file and it's
513
567
                raise errors.BzrError(
514
568
                    "illegal LogRequest: must match-using-deltas "
515
569
                    "when logging %d files" % file_count)
516
 
            return self._log_revision_iterator_using_per_file_graph()
517
 
 
518
 
    def _log_revision_iterator_using_delta_matching(self):
519
 
        # Get the base revisions, filtering by the revision range
520
 
        generate_merge_revisions = self.levels != 1
521
 
        delayed_graph_generation = not self.specific_fileids and (
522
 
            self.limit or self.start_rev_id or self.end_rev_id)
523
 
        view_revisions = _calc_view_revisions(
524
 
            self.branch, self.start_rev_id, self.end_rev_id,
525
 
            self.direction,
526
 
            generate_merge_revisions=generate_merge_revisions,
527
 
            delayed_graph_generation=delayed_graph_generation,
528
 
            exclude_common_ancestry=self.exclude_common_ancestry)
529
 
 
530
 
        # Apply the other filters
531
 
        return make_log_rev_iterator(self.branch, view_revisions,
532
 
                                     self.delta_type, self.match,
533
 
                                     file_ids=self.specific_fileids,
534
 
                                     direction=self.direction)
535
 
 
536
 
    def _log_revision_iterator_using_per_file_graph(self):
537
 
        # Get the base revisions, filtering by the revision range.
538
 
        # Note that we always generate the merge revisions because
539
 
        # filter_revisions_touching_file_id() requires them ...
540
 
        view_revisions = _calc_view_revisions(
541
 
            self.branch, self.start_rev_id, self.end_rev_id,
542
 
            self.direction, generate_merge_revisions=True,
543
 
            exclude_common_ancestry=self.exclude_common_ancestry)
544
 
        if not isinstance(view_revisions, list):
545
 
            view_revisions = list(view_revisions)
546
 
        view_revisions = _filter_revisions_touching_file_id(
547
 
            self.branch, self.specific_fileids[0], view_revisions,
548
 
            include_merges=self.levels != 1)
549
 
        return make_log_rev_iterator(
550
 
            self.branch, view_revisions, self.delta_type, self.match)
 
570
            return _log_revision_iterator_using_per_file_graph(
 
571
                self.branch,
 
572
                delta_type=self.delta_type,
 
573
                match=self.match,
 
574
                levels=self.levels,
 
575
                file_id=self.specific_fileids[0],
 
576
                start_rev_id=start_rev_id, end_rev_id=end_rev_id,
 
577
                direction=self.direction,
 
578
                exclude_common_ancestry=self.exclude_common_ancestry
 
579
                )
551
580
 
552
581
 
553
582
def _calc_view_revisions(branch, start_rev_id, end_rev_id, direction,