/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/status.py

  • Committer: Martin Pool
  • Date: 2006-10-06 02:04:17 UTC
  • mfrom: (1908.10.1 bench_usecases.merge2)
  • mto: This revision was merged to the branch mainline in revision 2068.
  • Revision ID: mbp@sourcefrog.net-20061006020417-4949ca86f4417a4d
merge additional fix from cfbolz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
16
16
 
17
17
import sys
18
18
 
19
 
from bzrlib.delta import compare_trees
20
 
from bzrlib.errors import NoSuchRevision
 
19
from bzrlib.diff import _raise_if_nonexistent
 
20
import bzrlib.errors as errors
21
21
from bzrlib.log import line_log
22
22
from bzrlib.osutils import is_inside_any
23
 
from bzrlib.symbol_versioning import *
 
23
from bzrlib.symbol_versioning import (deprecated_function,
 
24
        zero_eight,
 
25
        )
24
26
 
25
27
# TODO: when showing single-line logs, truncate to the width of the terminal
26
28
# if known, but only if really going to the terminal (not into a file)
27
29
 
28
30
 
29
31
@deprecated_function(zero_eight)
30
 
def show_status(branch, show_unchanged=False,
 
32
def show_status(branch, show_unchanged=None,
31
33
                specific_files=None,
32
34
                show_ids=False,
33
35
                to_file=None,
68
70
                     specific_files, show_ids, to_file, show_pending, revision)
69
71
 
70
72
 
71
 
def show_tree_status(wt, show_unchanged=False,
 
73
def show_tree_status(wt, show_unchanged=None,
72
74
                     specific_files=None,
73
75
                     show_ids=False,
74
76
                     to_file=None,
83
85
    The result is written out as Unicode and to_file should be able 
84
86
    to encode that.
85
87
 
86
 
    show_unchanged
87
 
        If set, includes unchanged files.
88
 
 
89
 
    specific_files
90
 
        If set, only show the status of files in this list.
91
 
 
92
 
    show_ids
93
 
        If set, includes each file's id.
94
 
 
95
 
    to_file
96
 
        If set, write to this file (default stdout.)
97
 
 
98
 
    show_pending
99
 
        If set, write pending merges.
100
 
 
101
 
    revision
102
 
        If None the compare latest revision with working tree
 
88
    If showing the status of a working tree, extra information is included
 
89
    about unknown files, conflicts, and pending merges.
 
90
 
 
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 
 
95
        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.
103
101
        If one revision show compared it with working tree.
104
102
        If two revisions show status between first and second.
105
103
    """
106
 
    if to_file == None:
 
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:
107
109
        to_file = sys.stdout
108
110
    
109
111
    wt.lock_read()
116
118
            try:
117
119
                rev_id = revision[0].in_history(wt.branch).rev_id
118
120
                old = wt.branch.repository.revision_tree(rev_id)
119
 
            except NoSuchRevision, e:
120
 
                raise BzrCommandError(str(e))
 
121
            except errors.NoSuchRevision, e:
 
122
                raise errors.BzrCommandError(str(e))
121
123
            if (len(revision) > 1) and (revision[1].spec is not None):
122
124
                try:
123
125
                    rev_id = revision[1].in_history(wt.branch).rev_id
124
126
                    new = wt.branch.repository.revision_tree(rev_id)
125
127
                    new_is_working_tree = False
126
 
                except NoSuchRevision, e:
127
 
                    raise BzrCommandError(str(e))
 
128
                except errors.NoSuchRevision, e:
 
129
                    raise errors.BzrCommandError(str(e))
128
130
            else:
129
131
                new = wt
130
 
                
131
 
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
 
132
        _raise_if_nonexistent(specific_files, old, new)
 
133
        delta = new.changes_from(old, want_unchanged=show_unchanged,
132
134
                              specific_files=specific_files)
133
135
        delta.show(to_file,
134
136
                   show_ids=show_ids,
135
137
                   show_unchanged=show_unchanged)
136
138
 
137
 
        if new_is_working_tree:
138
 
            list_paths('unknown', new.unknowns(), specific_files, to_file)
139
 
            conflict_title = False
140
 
            for conflict in wt.conflicts():
141
 
                if conflict_title is False:
142
 
                    print >> to_file, "conflicts:"
143
 
                    conflict_title = True
144
 
                print >> to_file, "  %s" % conflict
 
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
145
147
        if new_is_working_tree and show_pending:
146
148
            show_pending_merges(new, to_file)
147
149
    finally:
149
151
 
150
152
def show_pending_merges(new, to_file):
151
153
    """Write out a display of pending merges in a working tree."""
152
 
    pending = new.pending_merges()
 
154
    parents = new.get_parent_ids()
 
155
    if len(parents) < 2:
 
156
        return
 
157
    pending = parents[1:]
153
158
    branch = new.branch
154
 
    if len(pending) == 0:
155
 
        return
 
159
    last_revision = parents[0]
156
160
    print >>to_file, 'pending merges:'
157
 
    last_revision = branch.last_revision()
158
161
    if last_revision is not None:
159
 
        ignore = set(branch.repository.get_ancestry(last_revision))
 
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])
160
168
    else:
161
 
        ignore = set()
162
 
    for merge in new.pending_merges():
 
169
        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:
163
173
        ignore.add(merge)
164
174
        try:
 
175
            from bzrlib.osutils import terminal_width
 
176
            width = terminal_width()
165
177
            m_revision = branch.repository.get_revision(merge)
166
 
            print >> to_file, ' ', line_log(m_revision, 77)
 
178
            print >> to_file, ' ', line_log(m_revision, width - 3)
167
179
            inner_merges = branch.repository.get_ancestry(merge)
 
180
            assert inner_merges[0] is None
 
181
            inner_merges.pop(0)
168
182
            inner_merges.reverse()
169
183
            for mmerge in inner_merges:
170
184
                if mmerge in ignore:
171
185
                    continue
172
186
                mm_revision = branch.repository.get_revision(mmerge)
173
 
                print >> to_file, '   ', line_log(mm_revision, 75)
 
187
                print >> to_file, '   ', line_log(mm_revision, width - 5)
174
188
                ignore.add(mmerge)
175
 
        except NoSuchRevision:
176
 
            print >> to_file, ' ', merge 
 
189
        except errors.NoSuchRevision:
 
190
            print >> to_file, ' ', merge
177
191
        
178
192
def list_paths(header, paths, specific_files, to_file):
179
193
    done_header = False