~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/status.py

  • Committer: Martin Pool
  • Date: 2006-02-22 04:29:54 UTC
  • mfrom: (1566 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1569.
  • Revision ID: mbp@sourcefrog.net-20060222042954-60333f08dd56a646
[merge] from bzr.dev before integration
Fix undefined ordering in sign_my_revisions breaking tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# (C) 2005 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
17
17
import sys
18
18
 
19
19
from bzrlib.delta import compare_trees
20
 
from bzrlib.diff import _raise_if_nonexistent
21
 
import bzrlib.errors as errors
 
20
from bzrlib.errors import NoSuchRevision
22
21
from bzrlib.log import line_log
23
22
from bzrlib.osutils import is_inside_any
24
 
from bzrlib.symbol_versioning import (deprecated_function,
25
 
        zero_eight,
26
 
        )
27
23
 
28
24
# TODO: when showing single-line logs, truncate to the width of the terminal
29
25
# if known, but only if really going to the terminal (not into a file)
30
26
 
31
27
 
32
 
@deprecated_function(zero_eight)
33
 
def show_status(branch, show_unchanged=None,
 
28
def show_status(branch, show_unchanged=False,
34
29
                specific_files=None,
35
30
                show_ids=False,
36
31
                to_file=None,
38
33
                revision=None):
39
34
    """Display summary of changes.
40
35
 
41
 
    Please use show_tree_status instead.
42
 
 
43
36
    By default this compares the working tree to a previous revision. 
44
37
    If the revision argument is given, summarizes changes between the 
45
38
    working tree and another, or between two revisions.
67
60
        If one revision show compared it with working tree.
68
61
        If two revisions show status between first and second.
69
62
    """
70
 
    show_tree_status(branch.bzrdir.open_workingtree(), show_unchanged, 
71
 
                     specific_files, show_ids, to_file, show_pending, revision)
72
 
 
73
 
 
74
 
def show_tree_status(wt, show_unchanged=None,
75
 
                     specific_files=None,
76
 
                     show_ids=False,
77
 
                     to_file=None,
78
 
                     show_pending=True,
79
 
                     revision=None):
80
 
    """Display summary of changes.
81
 
 
82
 
    By default this compares the working tree to a previous revision. 
83
 
    If the revision argument is given, summarizes changes between the 
84
 
    working tree and another, or between two revisions.
85
 
 
86
 
    The result is written out as Unicode and to_file should be able 
87
 
    to encode that.
88
 
 
89
 
    If showing the status of a working tree, extra information is included
90
 
    about unknown files, conflicts, and pending merges.
91
 
 
92
 
    :param show_unchanged: Deprecated parameter. If set, includes unchanged 
93
 
        files.
94
 
    :param specific_files: If set, a list of filenames whose status should be
95
 
        shown.  It is an error to give a filename that is not in the working 
96
 
        tree, or in the working inventory or in the basis inventory.
97
 
    :param show_ids: If set, includes each file's id.
98
 
    :param to_file: If set, write to this file (default stdout.)
99
 
    :param show_pending: If set, write pending merges.
100
 
    :param revision: If None the compare latest revision with working tree
101
 
        If not None it must be a RevisionSpec list.
102
 
        If one revision show compared it with working tree.
103
 
        If two revisions show status between first and second.
104
 
    """
105
 
    if show_unchanged is not None:
106
 
        warn("show_status_trees with show_unchanged has been deprecated "
107
 
             "since bzrlib 0.9", DeprecationWarning, stacklevel=2)
108
 
 
109
 
    if to_file is None:
 
63
    if to_file == None:
110
64
        to_file = sys.stdout
111
65
    
112
 
    wt.lock_read()
 
66
    branch.lock_read()
113
67
    try:
114
68
        new_is_working_tree = True
115
69
        if revision is None:
116
 
            new = wt
 
70
            new = branch.bzrdir.open_workingtree()
117
71
            old = new.basis_tree()
118
72
        elif len(revision) > 0:
119
73
            try:
120
 
                rev_id = revision[0].in_history(wt.branch).rev_id
121
 
                old = wt.branch.repository.revision_tree(rev_id)
122
 
            except errors.NoSuchRevision, e:
123
 
                raise errors.BzrCommandError(str(e))
 
74
                rev_id = revision[0].in_history(branch).rev_id
 
75
                old = branch.repository.revision_tree(rev_id)
 
76
            except NoSuchRevision, e:
 
77
                raise BzrCommandError(str(e))
124
78
            if (len(revision) > 1) and (revision[1].spec is not None):
125
79
                try:
126
 
                    rev_id = revision[1].in_history(wt.branch).rev_id
127
 
                    new = wt.branch.repository.revision_tree(rev_id)
 
80
                    rev_id = revision[1].in_history(branch).rev_id
 
81
                    new = branch.repository.revision_tree(rev_id)
128
82
                    new_is_working_tree = False
129
 
                except errors.NoSuchRevision, e:
130
 
                    raise errors.BzrCommandError(str(e))
 
83
                except NoSuchRevision, e:
 
84
                    raise BzrCommandError(str(e))
131
85
            else:
132
 
                new = wt
133
 
        _raise_if_nonexistent(specific_files, old, new)
 
86
                new = branch.bzrdir.open_workingtree()
 
87
                
134
88
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
135
89
                              specific_files=specific_files)
136
90
        delta.show(to_file,
139
93
 
140
94
        if new_is_working_tree:
141
95
            list_paths('unknown', new.unknowns(), specific_files, to_file)
142
 
            conflict_title = False
143
 
            for conflict in wt.conflicts():
144
 
                if conflict_title is False:
145
 
                    print >> to_file, "conflicts:"
146
 
                    conflict_title = True
147
 
                print >> to_file, "  %s" % conflict
 
96
            list_paths('conflicts', new.iter_conflicts(), specific_files, to_file)
148
97
        if new_is_working_tree and show_pending:
149
98
            show_pending_merges(new, to_file)
150
99
    finally:
151
 
        wt.unlock()
 
100
        branch.unlock()
152
101
 
153
102
def show_pending_merges(new, to_file):
154
103
    """Write out a display of pending merges in a working tree."""
161
110
    if last_revision is not None:
162
111
        ignore = set(branch.repository.get_ancestry(last_revision))
163
112
    else:
164
 
        ignore = set([None])
 
113
        ignore = set()
165
114
    for merge in new.pending_merges():
166
115
        ignore.add(merge)
167
116
        try:
168
 
            from bzrlib.osutils import terminal_width
169
 
            width = terminal_width()
170
117
            m_revision = branch.repository.get_revision(merge)
171
 
            print >> to_file, ' ', line_log(m_revision, width - 3)
 
118
            print >> to_file, ' ', line_log(m_revision, 77)
172
119
            inner_merges = branch.repository.get_ancestry(merge)
173
 
            assert inner_merges[0] == None
174
 
            inner_merges.pop(0)
175
120
            inner_merges.reverse()
176
121
            for mmerge in inner_merges:
177
122
                if mmerge in ignore:
178
123
                    continue
179
124
                mm_revision = branch.repository.get_revision(mmerge)
180
 
                print >> to_file, '   ', line_log(mm_revision, width - 5)
 
125
                print >> to_file, '   ', line_log(mm_revision, 75)
181
126
                ignore.add(mmerge)
182
 
        except errors.NoSuchRevision:
183
 
            print >> to_file, ' ', merge
 
127
        except NoSuchRevision:
 
128
            print >> to_file, ' ', merge 
184
129
        
185
130
def list_paths(header, paths, specific_files, to_file):
186
131
    done_header = False