~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Jelmer Vernooij
  • Date: 2012-01-06 22:44:57 UTC
  • mfrom: (6436 +trunk)
  • mto: (6437.3.11 2.5)
  • mto: This revision was merged to the branch mainline in revision 6444.
  • Revision ID: jelmer@samba.org-20120106224457-re0pcy0fz31xob77
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
 
18
 
 
19
17
"""Code to show logs of changes.
20
18
 
21
19
Various flavors of log can be produced:
49
47
all the changes since the previous revision that touched hello.c.
50
48
"""
51
49
 
 
50
from __future__ import absolute_import
 
51
 
52
52
import codecs
53
53
from cStringIO import StringIO
54
54
from itertools import (
580
580
        and (not generate_merge_revisions
581
581
             or not _has_merges(branch, end_rev_id))):
582
582
        # If a single revision is requested, check we can handle it
583
 
        iter_revs = _generate_one_revision(branch, end_rev_id, br_rev_id,
584
 
                                           br_revno)
585
 
    elif not generate_merge_revisions:
586
 
        # If we only want to see linear revisions, we can iterate ...
587
 
        iter_revs = _generate_flat_revisions(branch, start_rev_id, end_rev_id,
588
 
                                             direction, exclude_common_ancestry)
589
 
        if direction == 'forward':
590
 
            iter_revs = reversed(iter_revs)
591
 
    else:
592
 
        iter_revs = _generate_all_revisions(branch, start_rev_id, end_rev_id,
593
 
                                            direction, delayed_graph_generation,
594
 
                                            exclude_common_ancestry)
595
 
        if direction == 'forward':
596
 
            iter_revs = _rebase_merge_depth(reverse_by_depth(list(iter_revs)))
 
583
        return  _generate_one_revision(branch, end_rev_id, br_rev_id,
 
584
                                       br_revno)
 
585
    if not generate_merge_revisions:
 
586
        try:
 
587
            # If we only want to see linear revisions, we can iterate ...
 
588
            iter_revs = _linear_view_revisions(
 
589
                branch, start_rev_id, end_rev_id,
 
590
                exclude_common_ancestry=exclude_common_ancestry)
 
591
            # If a start limit was given and it's not obviously an
 
592
            # ancestor of the end limit, check it before outputting anything
 
593
            if (direction == 'forward'
 
594
                or (start_rev_id and not _is_obvious_ancestor(
 
595
                        branch, start_rev_id, end_rev_id))):
 
596
                    iter_revs = list(iter_revs)
 
597
            if direction == 'forward':
 
598
                iter_revs = reversed(iter_revs)
 
599
            return iter_revs
 
600
        except _StartNotLinearAncestor:
 
601
            # Switch to the slower implementation that may be able to find a
 
602
            # non-obvious ancestor out of the left-hand history.
 
603
            pass
 
604
    iter_revs = _generate_all_revisions(branch, start_rev_id, end_rev_id,
 
605
                                        direction, delayed_graph_generation,
 
606
                                        exclude_common_ancestry)
 
607
    if direction == 'forward':
 
608
        iter_revs = _rebase_merge_depth(reverse_by_depth(list(iter_revs)))
597
609
    return iter_revs
598
610
 
599
611
 
606
618
        return [(rev_id, revno_str, 0)]
607
619
 
608
620
 
609
 
def _generate_flat_revisions(branch, start_rev_id, end_rev_id, direction,
610
 
                             exclude_common_ancestry=False):
611
 
    result = _linear_view_revisions(
612
 
        branch, start_rev_id, end_rev_id,
613
 
        exclude_common_ancestry=exclude_common_ancestry)
614
 
    # If a start limit was given and it's not obviously an
615
 
    # ancestor of the end limit, check it before outputting anything
616
 
    if direction == 'forward' or (start_rev_id
617
 
        and not _is_obvious_ancestor(branch, start_rev_id, end_rev_id)):
618
 
        try:
619
 
            result = list(result)
620
 
        except _StartNotLinearAncestor:
621
 
            raise errors.BzrCommandError(gettext('Start revision not found in'
622
 
                ' left-hand history of end revision.'))
623
 
    return result
624
 
 
625
 
 
626
621
def _generate_all_revisions(branch, start_rev_id, end_rev_id, direction,
627
622
                            delayed_graph_generation,
628
623
                            exclude_common_ancestry=False):
2028
2023
      kind is one of values 'directory', 'file', 'symlink', 'tree-reference'.
2029
2024
      branch will be read-locked.
2030
2025
    """
2031
 
    from builtins import _get_revision_range
 
2026
    from bzrlib.builtins import _get_revision_range
2032
2027
    tree, b, path = controldir.ControlDir.open_containing_tree_or_branch(
2033
2028
        file_list[0])
2034
2029
    add_cleanup(b.lock_read().unlock)