bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
2318.2.3
by Kent Gibson
 merged bzr.dev  | 
1  | 
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 | 
| 
1185.13.2
by Robert Collins
 Merge Aarons conflict plugin for 0.1rc1  | 
2  | 
#
 | 
| 
362
by Martin Pool
 - Import stat-cache code  | 
3  | 
# This program is free software; you can redistribute it and/or modify
 | 
4  | 
# it under the terms of the GNU General Public License as published by
 | 
|
5  | 
# the Free Software Foundation; either version 2 of the License, or
 | 
|
6  | 
# (at your option) any later version.
 | 
|
| 
1185.13.2
by Robert Collins
 Merge Aarons conflict plugin for 0.1rc1  | 
7  | 
#
 | 
| 
362
by Martin Pool
 - Import stat-cache code  | 
8  | 
# This program is distributed in the hope that it will be useful,
 | 
9  | 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|
10  | 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|
11  | 
# GNU General Public License for more details.
 | 
|
| 
1185.13.2
by Robert Collins
 Merge Aarons conflict plugin for 0.1rc1  | 
12  | 
#
 | 
| 
362
by Martin Pool
 - Import stat-cache code  | 
13  | 
# You should have received a copy of the GNU General Public License
 | 
14  | 
# along with this program; if not, write to the Free Software
 | 
|
15  | 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
|
16  | 
||
| 
1185.13.2
by Robert Collins
 Merge Aarons conflict plugin for 0.1rc1  | 
17  | 
import sys  | 
| 
1534.4.35
by Robert Collins
 Give branch its own basis tree and last_revision methods; deprecated branch.working_tree()  | 
18  | 
|
| 
1551.10.7
by Aaron Bentley
 Use new-style output for status  | 
19  | 
from bzrlib import (  | 
20  | 
delta as _mod_delta,  | 
|
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
21  | 
log,  | 
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
22  | 
osutils,  | 
| 
1551.10.7
by Aaron Bentley
 Use new-style output for status  | 
23  | 
tree,  | 
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
24  | 
tsort,  | 
25  | 
revision as _mod_revision,  | 
|
| 
1551.10.7
by Aaron Bentley
 Use new-style output for status  | 
26  | 
    )
 | 
| 
1662.1.9
by Martin Pool
 Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)  | 
27  | 
from bzrlib.diff import _raise_if_nonexistent  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
28  | 
import bzrlib.errors as errors  | 
| 
1534.4.35
by Robert Collins
 Give branch its own basis tree and last_revision methods; deprecated branch.working_tree()  | 
29  | 
from bzrlib.osutils import is_inside_any  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
30  | 
from bzrlib.symbol_versioning import (deprecated_function,  | 
31  | 
        )
 | 
|
| 
2091.4.1
by wang
 Pushing to a remote branch does not currently update the remote working  | 
32  | 
from bzrlib.trace import warning  | 
| 
362
by Martin Pool
 - Import stat-cache code  | 
33  | 
|
| 
1185.33.70
by Martin Pool
 Refactor status display code.  | 
34  | 
# TODO: when showing single-line logs, truncate to the width of the terminal
 | 
35  | 
# if known, but only if really going to the terminal (not into a file)
 | 
|
36  | 
||
| 
465
by Martin Pool
 - Move show_status() out of Branch into a new function in  | 
37  | 
|
| 
1773.1.2
by Robert Collins
 Remove --all option from status.  | 
38  | 
def show_tree_status(wt, show_unchanged=None,  | 
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
39  | 
specific_files=None,  | 
40  | 
show_ids=False,  | 
|
41  | 
to_file=None,  | 
|
42  | 
show_pending=True,  | 
|
| 
2147.2.1
by Keir Mierle
 Add a --short flag to status to get svn-style status  | 
43  | 
revision=None,  | 
| 
2318.2.1
by Kent Gibson
 Apply status versioned patch  | 
44  | 
short=False,  | 
45  | 
versioned=False):  | 
|
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
46  | 
"""Display summary of changes.  | 
47  | 
||
48  | 
    By default this compares the working tree to a previous revision. 
 | 
|
49  | 
    If the revision argument is given, summarizes changes between the 
 | 
|
50  | 
    working tree and another, or between two revisions.
 | 
|
51  | 
||
52  | 
    The result is written out as Unicode and to_file should be able 
 | 
|
53  | 
    to encode that.
 | 
|
54  | 
||
| 
1662.1.9
by Martin Pool
 Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)  | 
55  | 
    If showing the status of a working tree, extra information is included
 | 
56  | 
    about unknown files, conflicts, and pending merges.
 | 
|
57  | 
||
| 
1773.1.2
by Robert Collins
 Remove --all option from status.  | 
58  | 
    :param show_unchanged: Deprecated parameter. If set, includes unchanged 
 | 
59  | 
        files.
 | 
|
60  | 
    :param specific_files: If set, a list of filenames whose status should be
 | 
|
61  | 
        shown.  It is an error to give a filename that is not in the working 
 | 
|
| 
1662.1.9
by Martin Pool
 Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)  | 
62  | 
        tree, or in the working inventory or in the basis inventory.
 | 
| 
1773.1.2
by Robert Collins
 Remove --all option from status.  | 
63  | 
    :param show_ids: If set, includes each file's id.
 | 
64  | 
    :param to_file: If set, write to this file (default stdout.)
 | 
|
65  | 
    :param show_pending: If set, write pending merges.
 | 
|
| 
3394.2.2
by Ian Clatworthy
 show_tree_status docstring and deprecation cleanups  | 
66  | 
    :param revision: If None, compare latest revision with working tree
 | 
67  | 
        If not None, it must be a RevisionSpec list.
 | 
|
68  | 
        If one revision, compare with working tree.
 | 
|
69  | 
        If two revisions, show status between first and second.
 | 
|
| 
2318.2.1
by Kent Gibson
 Apply status versioned patch  | 
70  | 
    :param short: If True, gives short SVN-style status lines.
 | 
71  | 
    :param versioned: If True, only shows versioned files.
 | 
|
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
72  | 
    """
 | 
| 
1773.1.2
by Robert Collins
 Remove --all option from status.  | 
73  | 
if show_unchanged is not None:  | 
| 
3394.2.2
by Ian Clatworthy
 show_tree_status docstring and deprecation cleanups  | 
74  | 
warn("show_tree_status with show_unchanged has been deprecated "  | 
| 
1773.1.2
by Robert Collins
 Remove --all option from status.  | 
75  | 
"since bzrlib 0.9", DeprecationWarning, stacklevel=2)  | 
76  | 
||
77  | 
if to_file is None:  | 
|
| 
915
by Martin Pool
 - add simple test case for bzr status  | 
78  | 
to_file = sys.stdout  | 
| 
580
by Martin Pool
 - Use explicit lock methods on a branch, rather than doing it  | 
79  | 
|
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
80  | 
wt.lock_read()  | 
| 
580
by Martin Pool
 - Use explicit lock methods on a branch, rather than doing it  | 
81  | 
try:  | 
| 
1185.1.35
by Robert Collins
 Heikki Paajanen's status -r patch  | 
82  | 
new_is_working_tree = True  | 
83  | 
if revision is None:  | 
|
| 
2091.4.1
by wang
 Pushing to a remote branch does not currently update the remote working  | 
84  | 
if wt.last_revision() != wt.branch.last_revision():  | 
85  | 
warning("working tree is out of date, run 'bzr update'")  | 
|
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
86  | 
new = wt  | 
| 
1534.4.35
by Robert Collins
 Give branch its own basis tree and last_revision methods; deprecated branch.working_tree()  | 
87  | 
old = new.basis_tree()  | 
| 
1185.1.35
by Robert Collins
 Heikki Paajanen's status -r patch  | 
88  | 
elif len(revision) > 0:  | 
89  | 
try:  | 
|
| 
3298.2.8
by John Arbash Meinel
 Get rid of .in_branch(need_revno=False) in favor of simpler .as_revision_id()  | 
90  | 
rev_id = revision[0].as_revision_id(wt.branch)  | 
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
91  | 
old = wt.branch.repository.revision_tree(rev_id)  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
92  | 
except errors.NoSuchRevision, e:  | 
93  | 
raise errors.BzrCommandError(str(e))  | 
|
| 
1540.2.6
by Robey Pointer
 make 'log' and 'status' treat '-r N..' as implicitly '-r N..-1'  | 
94  | 
if (len(revision) > 1) and (revision[1].spec is not None):  | 
| 
1185.1.35
by Robert Collins
 Heikki Paajanen's status -r patch  | 
95  | 
try:  | 
| 
3298.2.8
by John Arbash Meinel
 Get rid of .in_branch(need_revno=False) in favor of simpler .as_revision_id()  | 
96  | 
rev_id = revision[1].as_revision_id(wt.branch)  | 
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
97  | 
new = wt.branch.repository.revision_tree(rev_id)  | 
| 
1185.1.35
by Robert Collins
 Heikki Paajanen's status -r patch  | 
98  | 
new_is_working_tree = False  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
99  | 
except errors.NoSuchRevision, e:  | 
100  | 
raise errors.BzrCommandError(str(e))  | 
|
| 
1185.1.35
by Robert Collins
 Heikki Paajanen's status -r patch  | 
101  | 
else:  | 
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
102  | 
new = wt  | 
| 
2255.2.80
by Robert Collins
 In status, read lock the old and new trees being used to let data caching occur.  | 
103  | 
old.lock_read()  | 
104  | 
new.lock_read()  | 
|
105  | 
try:  | 
|
106  | 
_raise_if_nonexistent(specific_files, old, new)  | 
|
| 
2318.2.3
by Kent Gibson
 merged bzr.dev  | 
107  | 
want_unversioned = not versioned  | 
| 
2168.1.3
by John Arbash Meinel
 The logic for when to display 'C' for conflicts was inverted.  | 
108  | 
if short:  | 
| 
3254.1.1
by Aaron Bentley
 Make Tree.iter_changes a public method  | 
109  | 
changes = new.iter_changes(old, show_unchanged, specific_files,  | 
| 
2318.2.3
by Kent Gibson
 merged bzr.dev  | 
110  | 
require_versioned=False, want_unversioned=want_unversioned)  | 
| 
1551.10.25
by Aaron Bentley
 Make ChangeReporter private  | 
111  | 
reporter = _mod_delta._ChangeReporter(output_file=to_file,  | 
| 
2255.7.97
by Robert Collins
 Teach delta.report_changes about unversioned files, removing all inventory access during status --short.  | 
112  | 
unversioned_filter=new.is_ignored)  | 
| 
2255.2.83
by John Arbash Meinel
 [merge] bzr.dev 2294  | 
113  | 
_mod_delta.report_changes(changes, reporter)  | 
| 
2147.2.1
by Keir Mierle
 Add a --short flag to status to get svn-style status  | 
114  | 
else:  | 
| 
2255.2.83
by John Arbash Meinel
 [merge] bzr.dev 2294  | 
115  | 
delta = new.changes_from(old, want_unchanged=show_unchanged,  | 
| 
2255.7.91
by Robert Collins
 Move unknown detection in long status into the delta creation, saving a tree-scan.  | 
116  | 
specific_files=specific_files,  | 
| 
2318.2.3
by Kent Gibson
 merged bzr.dev  | 
117  | 
want_unversioned=want_unversioned)  | 
| 
2255.7.91
by Robert Collins
 Move unknown detection in long status into the delta creation, saving a tree-scan.  | 
118  | 
                # filter out unknown files. We may want a tree method for
 | 
119  | 
                # this
 | 
|
120  | 
delta.unversioned = [unversioned for unversioned in  | 
|
121  | 
delta.unversioned if not new.is_ignored(unversioned[0])]  | 
|
| 
2255.2.83
by John Arbash Meinel
 [merge] bzr.dev 2294  | 
122  | 
delta.show(to_file,  | 
123  | 
show_ids=show_ids,  | 
|
124  | 
show_unchanged=show_unchanged,  | 
|
| 
2255.7.91
by Robert Collins
 Move unknown detection in long status into the delta creation, saving a tree-scan.  | 
125  | 
short_status=False)  | 
| 
1551.15.58
by Aaron Bentley
 Status honours selected paths for conflicts (#127606)  | 
126  | 
            # show the new conflicts only for now. XXX: get them from the
 | 
127  | 
            # delta.
 | 
|
128  | 
conflicts = new.conflicts()  | 
|
129  | 
if specific_files is not None:  | 
|
130  | 
conflicts = conflicts.select_conflicts(new, specific_files,  | 
|
131  | 
ignore_misses=True, recurse=True)[1]  | 
|
132  | 
if len(conflicts) > 0 and not short:  | 
|
| 
2911.6.1
by Blake Winton
 Change 'print >> f,'s to 'f.write('s.  | 
133  | 
to_file.write("conflicts:\n")  | 
| 
1551.15.58
by Aaron Bentley
 Status honours selected paths for conflicts (#127606)  | 
134  | 
for conflict in conflicts:  | 
| 
2255.2.80
by Robert Collins
 In status, read lock the old and new trees being used to let data caching occur.  | 
135  | 
if short:  | 
| 
2255.2.83
by John Arbash Meinel
 [merge] bzr.dev 2294  | 
136  | 
prefix = 'C '  | 
| 
2255.2.80
by Robert Collins
 In status, read lock the old and new trees being used to let data caching occur.  | 
137  | 
else:  | 
138  | 
prefix = ' '  | 
|
| 
2911.6.1
by Blake Winton
 Change 'print >> f,'s to 'f.write('s.  | 
139  | 
to_file.write("%s %s\n" % (prefix, conflict))  | 
| 
3636.1.1
by Robert Collins
 Stop passing specific_file lists to show_tree_status when the specific  | 
140  | 
if (new_is_working_tree and show_pending):  | 
| 
2255.2.80
by Robert Collins
 In status, read lock the old and new trees being used to let data caching occur.  | 
141  | 
show_pending_merges(new, to_file, short)  | 
142  | 
finally:  | 
|
143  | 
old.unlock()  | 
|
144  | 
new.unlock()  | 
|
| 
580
by Martin Pool
 - Use explicit lock methods on a branch, rather than doing it  | 
145  | 
finally:  | 
| 
1551.2.9
by Aaron Bentley
 Fix status to work with checkouts  | 
146  | 
wt.unlock()  | 
| 
1185.33.70
by Martin Pool
 Refactor status display code.  | 
147  | 
|
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
148  | 
|
149  | 
def _get_sorted_revisions(tip_revision, revision_ids, parent_map):  | 
|
150  | 
"""Get an iterator which will return the revisions in merge sorted order.  | 
|
151  | 
||
152  | 
    This will build up a list of all nodes, such that only nodes in the list
 | 
|
153  | 
    are referenced. It then uses MergeSorter to return them in 'merge-sorted'
 | 
|
154  | 
    order.
 | 
|
155  | 
||
156  | 
    :param revision_ids: A set of revision_ids
 | 
|
157  | 
    :param parent_map: The parent information for each node. Revisions which
 | 
|
158  | 
        are considered ghosts should not be present in the map.
 | 
|
| 
3377.3.43
by John Arbash Meinel
 Ian's review feedback  | 
159  | 
    :return: iterator from MergeSorter.iter_topo_order()
 | 
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
160  | 
    """
 | 
| 
3377.3.40
by John Arbash Meinel
 a little bit more cleanup, change how ghosts are handled  | 
161  | 
    # MergeSorter requires that all nodes be present in the graph, so get rid
 | 
162  | 
    # of any references pointing outside of this graph.
 | 
|
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
163  | 
parent_graph = {}  | 
164  | 
for revision_id in revision_ids:  | 
|
165  | 
if revision_id not in parent_map: # ghost  | 
|
166  | 
parent_graph[revision_id] = []  | 
|
167  | 
else:  | 
|
168  | 
            # Only include parents which are in this sub-graph
 | 
|
169  | 
parent_graph[revision_id] = [p for p in parent_map[revision_id]  | 
|
170  | 
if p in revision_ids]  | 
|
171  | 
sorter = tsort.MergeSorter(parent_graph, tip_revision)  | 
|
172  | 
return sorter.iter_topo_order()  | 
|
173  | 
||
174  | 
||
| 
2147.2.2
by Keir Mierle
 Fix spacing error and add tests for status --short command flag.  | 
175  | 
def show_pending_merges(new, to_file, short=False):  | 
| 
1185.33.70
by Martin Pool
 Refactor status display code.  | 
176  | 
"""Write out a display of pending merges in a working tree."""  | 
| 
3377.3.43
by John Arbash Meinel
 Ian's review feedback  | 
177  | 
parents = new.get_parent_ids()  | 
178  | 
if len(parents) < 2:  | 
|
179  | 
        return
 | 
|
180  | 
||
| 
3377.3.38
by John Arbash Meinel
 Pull out terminal width from the inner loop of show_pending_merges  | 
181  | 
    # we need one extra space for terminals that wrap on last char
 | 
182  | 
term_width = osutils.terminal_width() - 1  | 
|
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
183  | 
if short:  | 
| 
3377.3.42
by John Arbash Meinel
 Get the tests to actually work, and get the code to go along with.  | 
184  | 
first_prefix = 'P '  | 
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
185  | 
sub_prefix = 'P. '  | 
186  | 
else:  | 
|
187  | 
first_prefix = ' '  | 
|
188  | 
sub_prefix = ' '  | 
|
| 
3377.3.38
by John Arbash Meinel
 Pull out terminal width from the inner loop of show_pending_merges  | 
189  | 
|
| 
1908.6.9
by Robert Collins
 Fix status to not use pending_merges.  | 
190  | 
pending = parents[1:]  | 
| 
1185.33.70
by Martin Pool
 Refactor status display code.  | 
191  | 
branch = new.branch  | 
| 
1908.6.9
by Robert Collins
 Fix status to not use pending_merges.  | 
192  | 
last_revision = parents[0]  | 
| 
2147.2.2
by Keir Mierle
 Fix spacing error and add tests for status --short command flag.  | 
193  | 
if not short:  | 
| 
2911.6.1
by Blake Winton
 Change 'print >> f,'s to 'f.write('s.  | 
194  | 
to_file.write('pending merges:\n')  | 
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
195  | 
graph = branch.repository.get_graph()  | 
| 
3377.3.31
by John Arbash Meinel
 change the status code to use find_unique_ancestors()  | 
196  | 
other_revisions = [last_revision]  | 
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
197  | 
log_formatter = log.LineLogFormatter(to_file)  | 
| 
1908.6.9
by Robert Collins
 Fix status to not use pending_merges.  | 
198  | 
for merge in pending:  | 
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
199  | 
try:  | 
200  | 
rev = branch.repository.get_revisions([merge])[0]  | 
|
201  | 
except errors.NoSuchRevision:  | 
|
202  | 
            # If we are missing a revision, just print out the revision id
 | 
|
| 
3377.3.40
by John Arbash Meinel
 a little bit more cleanup, change how ghosts are handled  | 
203  | 
to_file.write(first_prefix + '(ghost) ' + merge + '\n')  | 
| 
3377.3.39
by John Arbash Meinel
 More tweaks for show_pending_merges  | 
204  | 
other_revisions.append(merge)  | 
205  | 
            continue
 | 
|
206  | 
||
207  | 
        # Log the merge, as it gets a slightly different formatting
 | 
|
208  | 
log_message = log_formatter.log_string(None, rev,  | 
|
209  | 
term_width - len(first_prefix))  | 
|
210  | 
to_file.write(first_prefix + log_message + '\n')  | 
|
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
211  | 
        # Find all of the revisions in the merge source, which are not in the
 | 
212  | 
        # last committed revision.
 | 
|
| 
3377.3.31
by John Arbash Meinel
 change the status code to use find_unique_ancestors()  | 
213  | 
merge_extra = graph.find_unique_ancestors(merge, other_revisions)  | 
214  | 
other_revisions.append(merge)  | 
|
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
215  | 
merge_extra.discard(_mod_revision.NULL_REVISION)  | 
| 
3377.3.38
by John Arbash Meinel
 Pull out terminal width from the inner loop of show_pending_merges  | 
216  | 
|
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
217  | 
        # Get a handle to all of the revisions we will need
 | 
| 
1185.33.70
by Martin Pool
 Refactor status display code.  | 
218  | 
try:  | 
| 
3074.3.1
by John Arbash Meinel
 Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.  | 
219  | 
revisions = dict((rev.revision_id, rev) for rev in  | 
220  | 
branch.repository.get_revisions(merge_extra))  | 
|
221  | 
except errors.NoSuchRevision:  | 
|
| 
3377.3.40
by John Arbash Meinel
 a little bit more cleanup, change how ghosts are handled  | 
222  | 
            # One of the sub nodes is a ghost, check each one
 | 
223  | 
revisions = {}  | 
|
224  | 
for revision_id in merge_extra:  | 
|
225  | 
try:  | 
|
| 
3377.3.42
by John Arbash Meinel
 Get the tests to actually work, and get the code to go along with.  | 
226  | 
rev = branch.repository.get_revisions([revision_id])[0]  | 
| 
3377.3.40
by John Arbash Meinel
 a little bit more cleanup, change how ghosts are handled  | 
227  | 
except errors.NoSuchRevision:  | 
228  | 
revisions[revision_id] = None  | 
|
229  | 
else:  | 
|
230  | 
revisions[revision_id] = rev  | 
|
231  | 
||
232  | 
        # Display the revisions brought in by this merge.
 | 
|
233  | 
rev_id_iterator = _get_sorted_revisions(merge, merge_extra,  | 
|
234  | 
branch.repository.get_parent_map(merge_extra))  | 
|
235  | 
        # Skip the first node
 | 
|
236  | 
num, first, depth, eom = rev_id_iterator.next()  | 
|
237  | 
if first != merge:  | 
|
238  | 
raise AssertionError('Somehow we misunderstood how'  | 
|
239  | 
' iter_topo_order works %s != %s' % (first, merge))  | 
|
240  | 
for num, sub_merge, depth, eom in rev_id_iterator:  | 
|
241  | 
rev = revisions[sub_merge]  | 
|
242  | 
if rev is None:  | 
|
243  | 
to_file.write(sub_prefix + '(ghost) ' + sub_merge + '\n')  | 
|
244  | 
                continue
 | 
|
245  | 
log_message = log_formatter.log_string(None,  | 
|
246  | 
revisions[sub_merge],  | 
|
247  | 
term_width - len(sub_prefix))  | 
|
248  | 
to_file.write(sub_prefix + log_message + '\n')  |