~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/status.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-05-19 06:14:38 UTC
  • mfrom: (1704.2.23 bzr.mbp.integration)
  • Revision ID: pqm@pqm.ubuntu.com-20060519061438-6300caf3926c3cff
(mbp) small fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import sys
18
18
 
 
19
from bzrlib.delta import compare_trees
19
20
from bzrlib.diff import _raise_if_nonexistent
20
 
import bzrlib.errors as errors
 
21
from bzrlib.errors import NoSuchRevision
21
22
from bzrlib.log import line_log
22
23
from bzrlib.osutils import is_inside_any
23
 
from bzrlib.symbol_versioning import (deprecated_function,
24
 
        zero_eight,
25
 
        )
 
24
from bzrlib.symbol_versioning import *
26
25
 
27
26
# TODO: when showing single-line logs, truncate to the width of the terminal
28
27
# if known, but only if really going to the terminal (not into a file)
29
28
 
30
29
 
31
30
@deprecated_function(zero_eight)
32
 
def show_status(branch, show_unchanged=None,
 
31
def show_status(branch, show_unchanged=False,
33
32
                specific_files=None,
34
33
                show_ids=False,
35
34
                to_file=None,
70
69
                     specific_files, show_ids, to_file, show_pending, revision)
71
70
 
72
71
 
73
 
def show_tree_status(wt, show_unchanged=None,
 
72
def show_tree_status(wt, show_unchanged=False,
74
73
                     specific_files=None,
75
74
                     show_ids=False,
76
75
                     to_file=None,
88
87
    If showing the status of a working tree, extra information is included
89
88
    about unknown files, conflicts, and pending merges.
90
89
 
91
 
    :param show_unchanged: Deprecated parameter. If set, includes unchanged 
92
 
        files.
93
 
    :param specific_files: If set, a list of filenames whose status should be
94
 
        shown.  It is an error to give a filename that is not in the working 
 
90
    show_unchanged
 
91
        If set, includes unchanged files.
 
92
 
 
93
    specific_files
 
94
        If set, a list of filenames whose status should be shown.
 
95
        It is an error to give a filename that is not in the working 
95
96
        tree, or in the working inventory or in the basis inventory.
96
 
    :param show_ids: If set, includes each file's id.
97
 
    :param to_file: If set, write to this file (default stdout.)
98
 
    :param show_pending: If set, write pending merges.
99
 
    :param revision: If None the compare latest revision with working tree
100
 
        If not None it must be a RevisionSpec list.
 
97
 
 
98
    show_ids
 
99
        If set, includes each file's id.
 
100
 
 
101
    to_file
 
102
        If set, write to this file (default stdout.)
 
103
 
 
104
    show_pending
 
105
        If set, write pending merges.
 
106
 
 
107
    revision
 
108
        If None the compare latest revision with working tree
101
109
        If one revision show compared it with working tree.
102
110
        If two revisions show status between first and second.
103
111
    """
104
 
    if show_unchanged is not None:
105
 
        warn("show_status_trees with show_unchanged has been deprecated "
106
 
             "since bzrlib 0.9", DeprecationWarning, stacklevel=2)
107
 
 
108
 
    if to_file is None:
 
112
    if to_file == None:
109
113
        to_file = sys.stdout
110
114
    
111
115
    wt.lock_read()
118
122
            try:
119
123
                rev_id = revision[0].in_history(wt.branch).rev_id
120
124
                old = wt.branch.repository.revision_tree(rev_id)
121
 
            except errors.NoSuchRevision, e:
122
 
                raise errors.BzrCommandError(str(e))
 
125
            except NoSuchRevision, e:
 
126
                raise BzrCommandError(str(e))
123
127
            if (len(revision) > 1) and (revision[1].spec is not None):
124
128
                try:
125
129
                    rev_id = revision[1].in_history(wt.branch).rev_id
126
130
                    new = wt.branch.repository.revision_tree(rev_id)
127
131
                    new_is_working_tree = False
128
 
                except errors.NoSuchRevision, e:
129
 
                    raise errors.BzrCommandError(str(e))
 
132
                except NoSuchRevision, e:
 
133
                    raise BzrCommandError(str(e))
130
134
            else:
131
135
                new = wt
132
136
        _raise_if_nonexistent(specific_files, old, new)
133
 
        delta = new.changes_from(old, want_unchanged=show_unchanged,
 
137
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
134
138
                              specific_files=specific_files)
135
139
        delta.show(to_file,
136
140
                   show_ids=show_ids,
137
141
                   show_unchanged=show_unchanged)
138
142
 
139
 
        list_paths('unknown', new.unknowns(), specific_files, to_file)
140
 
        conflict_title = False
141
 
        # show the new conflicts only for now. XXX: get them from the delta.
142
 
        for conflict in new.conflicts():
143
 
            if conflict_title is False:
144
 
                print >> to_file, "conflicts:"
145
 
                conflict_title = True
146
 
            print >> to_file, "  %s" % conflict
 
143
        if new_is_working_tree:
 
144
            list_paths('unknown', new.unknowns(), specific_files, to_file)
 
145
            conflict_title = False
 
146
            for conflict in wt.conflicts():
 
147
                if conflict_title is False:
 
148
                    print >> to_file, "conflicts:"
 
149
                    conflict_title = True
 
150
                print >> to_file, "  %s" % conflict
147
151
        if new_is_working_tree and show_pending:
148
152
            show_pending_merges(new, to_file)
149
153
    finally:
151
155
 
152
156
def show_pending_merges(new, to_file):
153
157
    """Write out a display of pending merges in a working tree."""
154
 
    parents = new.get_parent_ids()
155
 
    if len(parents) < 2:
 
158
    pending = new.pending_merges()
 
159
    branch = new.branch
 
160
    if len(pending) == 0:
156
161
        return
157
 
    pending = parents[1:]
158
 
    branch = new.branch
159
 
    last_revision = parents[0]
160
162
    print >>to_file, 'pending merges:'
 
163
    last_revision = branch.last_revision()
161
164
    if last_revision is not None:
162
 
        try:
163
 
            ignore = set(branch.repository.get_ancestry(last_revision))
164
 
        except errors.NoSuchRevision:
165
 
            # the last revision is a ghost : assume everything is new 
166
 
            # except for it
167
 
            ignore = set([None, last_revision])
 
165
        ignore = set(branch.repository.get_ancestry(last_revision))
168
166
    else:
169
167
        ignore = set([None])
170
 
    # TODO: this could be improved using merge_sorted - we'd get the same 
171
 
    # output rather than one level of indent.
172
 
    for merge in pending:
 
168
    for merge in new.pending_merges():
173
169
        ignore.add(merge)
174
170
        try:
175
 
            from bzrlib.osutils import terminal_width
176
 
            width = terminal_width()
177
171
            m_revision = branch.repository.get_revision(merge)
178
 
            print >> to_file, ' ', line_log(m_revision, width - 3)
 
172
            print >> to_file, ' ', line_log(m_revision, 77)
179
173
            inner_merges = branch.repository.get_ancestry(merge)
180
 
            assert inner_merges[0] is None
 
174
            assert inner_merges[0] == None
181
175
            inner_merges.pop(0)
182
176
            inner_merges.reverse()
183
177
            for mmerge in inner_merges:
184
178
                if mmerge in ignore:
185
179
                    continue
186
180
                mm_revision = branch.repository.get_revision(mmerge)
187
 
                print >> to_file, '   ', line_log(mm_revision, width - 5)
 
181
                print >> to_file, '   ', line_log(mm_revision, 75)
188
182
                ignore.add(mmerge)
189
 
        except errors.NoSuchRevision:
190
 
            print >> to_file, ' ', merge
 
183
        except NoSuchRevision:
 
184
            print >> to_file, ' ', merge 
191
185
        
192
186
def list_paths(header, paths, specific_files, to_file):
193
187
    done_header = False