15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
from bzrlib.osutils import is_inside_any
19
19
from bzrlib.delta import compare_trees
20
from bzrlib.errors import NoSuchRevision
20
21
from bzrlib.log import line_log
21
from bzrlib.errors import NoSuchRevision
22
from bzrlib.osutils import is_inside_any
24
# TODO: when showing single-line logs, truncate to the width of the terminal
25
# if known, but only if really going to the terminal (not into a file)
24
28
def show_status(branch, show_unchanged=False,
57
68
new_is_working_tree = True
58
69
if revision is None:
59
old = branch.basis_tree()
60
new = branch.working_tree()
70
new = branch.bzrdir.open_workingtree()
71
old = new.basis_tree()
61
72
elif len(revision) > 0:
63
74
rev_id = revision[0].in_history(branch).rev_id
64
old = branch.revision_tree(rev_id)
75
old = branch.repository.revision_tree(rev_id)
65
76
except NoSuchRevision, e:
66
77
raise BzrCommandError(str(e))
78
if (len(revision) > 1) and (revision[1].spec is not None):
69
80
rev_id = revision[1].in_history(branch).rev_id
70
new = branch.revision_tree(rev_id)
81
new = branch.repository.revision_tree(rev_id)
71
82
new_is_working_tree = False
72
83
except NoSuchRevision, e:
73
84
raise BzrCommandError(str(e))
75
new = branch.working_tree()
86
new = branch.bzrdir.open_workingtree()
78
88
delta = compare_trees(old, new, want_unchanged=show_unchanged,
79
89
specific_files=specific_files)
81
90
delta.show(to_file,
83
92
show_unchanged=show_unchanged)
85
94
if new_is_working_tree:
86
conflicts = new.iter_conflicts()
87
unknowns = new.unknowns()
88
list_paths('unknown', unknowns, specific_files, to_file)
89
list_paths('conflicts', conflicts, specific_files, to_file)
90
if show_pending and len(new.pending_merges()) > 0:
91
print >>to_file, 'pending merges:'
92
last_revision = branch.last_revision()
93
if last_revision is not None:
94
ignore = set(branch.get_ancestry(last_revision))
97
for merge in new.pending_merges():
100
m_revision = branch.get_revision(merge)
101
print >> to_file, ' ', line_log(m_revision, 77)
102
inner_merges = branch.get_ancestry(merge)
103
inner_merges.reverse()
104
for mmerge in inner_merges:
107
mm_revision = branch.get_revision(mmerge)
108
print >> to_file, ' ', line_log(mm_revision, 75)
111
except NoSuchRevision:
112
print >> to_file, ' ', merge
95
list_paths('unknown', new.unknowns(), specific_files, to_file)
96
list_paths('conflicts', new.iter_conflicts(), specific_files, to_file)
97
if new_is_working_tree and show_pending:
98
show_pending_merges(new, to_file)
102
def show_pending_merges(new, to_file):
103
"""Write out a display of pending merges in a working tree."""
104
pending = new.pending_merges()
106
if len(pending) == 0:
108
print >>to_file, 'pending merges:'
109
last_revision = branch.last_revision()
110
if last_revision is not None:
111
ignore = set(branch.repository.get_ancestry(last_revision))
114
for merge in new.pending_merges():
117
m_revision = branch.repository.get_revision(merge)
118
print >> to_file, ' ', line_log(m_revision, 77)
119
inner_merges = branch.repository.get_ancestry(merge)
120
inner_merges.reverse()
121
for mmerge in inner_merges:
124
mm_revision = branch.repository.get_revision(mmerge)
125
print >> to_file, ' ', line_log(mm_revision, 75)
127
except NoSuchRevision:
128
print >> to_file, ' ', merge
117
130
def list_paths(header, paths, specific_files, to_file):
118
131
done_header = False