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
from bzrlib.symbol_versioning import *
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)
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,
70
69
specific_files, show_ids, to_file, show_pending, revision)
73
def show_tree_status(wt, show_unchanged=None,
72
def show_tree_status(wt, show_unchanged=False,
74
73
specific_files=None,
88
87
If showing the status of a working tree, extra information is included
89
88
about unknown files, conflicts, and pending merges.
91
:param show_unchanged: Deprecated parameter. If set, includes unchanged
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
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
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.
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
101
109
If one revision show compared it with working tree.
102
110
If two revisions show status between first and second.
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)
109
113
to_file = sys.stdout
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):
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))
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)
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)
164
168
for merge in new.pending_merges():
165
169
ignore.add(merge)
167
from bzrlib.osutils import terminal_width
168
width = terminal_width()
169
171
m_revision = branch.repository.get_revision(merge)
170
print >> to_file, ' ', line_log(m_revision, width - 3)
172
print >> to_file, ' ', line_log(m_revision, 77)
171
173
inner_merges = branch.repository.get_ancestry(merge)
172
174
assert inner_merges[0] == None
173
175
inner_merges.pop(0)
176
178
if mmerge in ignore:
178
180
mm_revision = branch.repository.get_revision(mmerge)
179
print >> to_file, ' ', line_log(mm_revision, width - 5)
181
print >> to_file, ' ', line_log(mm_revision, 75)
180
182
ignore.add(mmerge)
181
except errors.NoSuchRevision:
182
print >> to_file, ' ', merge
183
except NoSuchRevision:
184
print >> to_file, ' ', merge
184
186
def list_paths(header, paths, specific_files, to_file):
185
187
done_header = False