95
87
If showing the status of a working tree, extra information is included
96
88
about unknown files, conflicts, and pending merges.
98
:param show_unchanged: Deprecated parameter. If set, includes unchanged
100
:param specific_files: If set, a list of filenames whose status should be
101
shown. It is an error to give a filename that is not in the working
91
If set, includes unchanged 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
102
96
tree, or in the working inventory or in the basis inventory.
103
:param show_ids: If set, includes each file's id.
104
:param to_file: If set, write to this file (default stdout.)
105
:param show_pending: If set, write pending merges.
106
:param revision: If None the compare latest revision with working tree
107
If not None it must be a RevisionSpec list.
99
If set, includes each file's id.
102
If set, write to this file (default stdout.)
105
If set, write pending merges.
108
If None the compare latest revision with working tree
108
109
If one revision show compared it with working tree.
109
110
If two revisions show status between first and second.
110
:param short: If True, gives short SVN-style status lines.
111
:param versioned: If True, only shows versioned files.
113
if show_unchanged is not None:
114
warn("show_status_trees with show_unchanged has been deprecated "
115
"since bzrlib 0.9", DeprecationWarning, stacklevel=2)
118
113
to_file = sys.stdout
122
117
new_is_working_tree = True
123
118
if revision is None:
124
if wt.last_revision() != wt.branch.last_revision():
125
warning("working tree is out of date, run 'bzr update'")
127
120
old = new.basis_tree()
128
121
elif len(revision) > 0:
130
123
rev_id = revision[0].in_history(wt.branch).rev_id
131
124
old = wt.branch.repository.revision_tree(rev_id)
132
except errors.NoSuchRevision, e:
133
raise errors.BzrCommandError(str(e))
125
except NoSuchRevision, e:
126
raise BzrCommandError(str(e))
134
127
if (len(revision) > 1) and (revision[1].spec is not None):
136
129
rev_id = revision[1].in_history(wt.branch).rev_id
137
130
new = wt.branch.repository.revision_tree(rev_id)
138
131
new_is_working_tree = False
139
except errors.NoSuchRevision, e:
140
raise errors.BzrCommandError(str(e))
132
except NoSuchRevision, e:
133
raise BzrCommandError(str(e))
146
_raise_if_nonexistent(specific_files, old, new)
147
want_unversioned = not versioned
149
changes = new._iter_changes(old, show_unchanged, specific_files,
150
require_versioned=False, want_unversioned=want_unversioned)
151
reporter = _mod_delta._ChangeReporter(output_file=to_file,
152
unversioned_filter=new.is_ignored)
153
_mod_delta.report_changes(changes, reporter)
155
delta = new.changes_from(old, want_unchanged=show_unchanged,
156
specific_files=specific_files,
157
want_unversioned=want_unversioned)
158
# filter out unknown files. We may want a tree method for
160
delta.unversioned = [unversioned for unversioned in
161
delta.unversioned if not new.is_ignored(unversioned[0])]
164
show_unchanged=show_unchanged,
136
_raise_if_nonexistent(specific_files, old, new)
137
delta = compare_trees(old, new, want_unchanged=show_unchanged,
138
specific_files=specific_files)
141
show_unchanged=show_unchanged)
143
if new_is_working_tree:
144
list_paths('unknown', new.unknowns(), specific_files, to_file)
166
145
conflict_title = False
167
# show the new conflicts only for now. XXX: get them from the delta.
168
for conflict in new.conflicts():
169
if not short and conflict_title is False:
146
for conflict in wt.conflicts():
147
if conflict_title is False:
170
148
print >> to_file, "conflicts:"
171
149
conflict_title = True
176
print >> to_file, "%s %s" % (prefix, conflict)
177
if new_is_working_tree and show_pending:
178
show_pending_merges(new, to_file, short)
150
print >> to_file, " %s" % conflict
151
if new_is_working_tree and show_pending:
152
show_pending_merges(new, to_file)
185
def show_pending_merges(new, to_file, short=False):
156
def show_pending_merges(new, to_file):
186
157
"""Write out a display of pending merges in a working tree."""
187
parents = new.get_parent_ids()
158
pending = new.pending_merges()
160
if len(pending) == 0:
190
pending = parents[1:]
192
last_revision = parents[0]
194
print >>to_file, 'pending merges:'
162
print >>to_file, 'pending merges:'
163
last_revision = branch.last_revision()
195
164
if last_revision is not None:
197
ignore = set(branch.repository.get_ancestry(last_revision,
199
except errors.NoSuchRevision:
200
# the last revision is a ghost : assume everything is new
202
ignore = set([None, last_revision])
165
ignore = set(branch.repository.get_ancestry(last_revision))
204
167
ignore = set([None])
205
# TODO: this could be improved using merge_sorted - we'd get the same
206
# output rather than one level of indent.
207
for merge in pending:
168
for merge in new.pending_merges():
208
169
ignore.add(merge)
210
from bzrlib.osutils import terminal_width
211
width = terminal_width()
212
171
m_revision = branch.repository.get_revision(merge)
217
print >> to_file, prefix, line_log(m_revision, width - 4)
172
print >> to_file, ' ', line_log(m_revision, 77)
218
173
inner_merges = branch.repository.get_ancestry(merge)
219
assert inner_merges[0] is None
174
assert inner_merges[0] == None
220
175
inner_merges.pop(0)
221
176
inner_merges.reverse()
222
177
for mmerge in inner_merges:
223
178
if mmerge in ignore:
225
180
mm_revision = branch.repository.get_revision(mmerge)
230
print >> to_file, prefix, line_log(mm_revision, width - 5)
181
print >> to_file, ' ', line_log(mm_revision, 75)
231
182
ignore.add(mmerge)
232
except errors.NoSuchRevision:
237
print >> to_file, prefix, merge
183
except NoSuchRevision:
184
print >> to_file, ' ', merge
186
def list_paths(header, paths, specific_files, to_file):
189
if specific_files and not is_inside_any(specific_files, path):
192
print >>to_file, '%s:' % header
194
print >>to_file, ' ', path