~bzr-pqm/bzr/bzr.dev

362 by Martin Pool
- Import stat-cache code
1
# (C) 2005 Canonical Ltd
2
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.
7
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.
12
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
17
465 by Martin Pool
- Move show_status() out of Branch into a new function in
18
19
def show_status(branch, show_unchanged=False,
483 by Martin Pool
- change 'file_list' to more explanatory 'specific_files'
20
                specific_files=None,
915 by Martin Pool
- add simple test case for bzr status
21
                show_ids=False,
974.1.48 by Aaron Bentley
Status command shows pending merges
22
                to_file=None,
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
23
                show_pending=True,
24
                revision=None):
1185.3.1 by Martin Pool
- docstring fix from Magnus Therning
25
    """Display status for non-ignored working files.
465 by Martin Pool
- Move show_status() out of Branch into a new function in
26
1185.3.1 by Martin Pool
- docstring fix from Magnus Therning
27
    show_unchanged
28
        If set, includes unchanged files.
465 by Martin Pool
- Move show_status() out of Branch into a new function in
29
483 by Martin Pool
- change 'file_list' to more explanatory 'specific_files'
30
    specific_files
465 by Martin Pool
- Move show_status() out of Branch into a new function in
31
        If set, only show the status of files in this list.
915 by Martin Pool
- add simple test case for bzr status
32
1185.3.1 by Martin Pool
- docstring fix from Magnus Therning
33
    show_ids
34
        If set, includes each file's id.
35
915 by Martin Pool
- add simple test case for bzr status
36
    to_file
37
        If set, write to this file (default stdout.)
1185.3.1 by Martin Pool
- docstring fix from Magnus Therning
38
39
    show_pending
40
        If set, write pending merges.
1092.3.4 by Robert Collins
update symlink branch to integration
41
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
42
    revision
43
        If None the compare latest revision with working tree
44
        If one revision show compared it with working tree.
45
        If two revisions show status between first and second.
465 by Martin Pool
- Move show_status() out of Branch into a new function in
46
    """
47
    import sys
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
48
    from bzrlib.delta import compare_trees
915 by Martin Pool
- add simple test case for bzr status
49
50
    if to_file == None:
51
        to_file = sys.stdout
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
52
    
610 by Martin Pool
- replace Branch.lock(mode) with separate lock_read and lock_write
53
    branch.lock_read()
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
54
    try:
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
55
        new_is_working_tree = True
56
        if revision is None:
57
            old = branch.basis_tree()
58
            new = branch.working_tree()
59
        elif len(revision) > 0:
60
            try:
61
                rev_id = revision[0].in_history(branch).rev_id
62
                old = branch.revision_tree(rev_id)
63
            except NoSuchRevision, e:
64
                raise BzrCommandError(str(e))
65
            if len(revision) > 1:
66
                try:
67
                    rev_id = revision[1].in_history(branch).rev_id
68
                    new = branch.revision_tree(rev_id)
69
                    new_is_working_tree = False
70
                except NoSuchRevision, e:
71
                    raise BzrCommandError(str(e))
72
            else:
73
                new = branch.working_tree()
74
                
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
75
76
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
77
                              specific_files=specific_files)
78
915 by Martin Pool
- add simple test case for bzr status
79
        delta.show(to_file,
80
                   show_ids=show_ids,
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
81
                   show_unchanged=show_unchanged)
82
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
83
        if new_is_working_tree:
84
            unknowns = new.unknowns()
85
            done_header = False
86
            for path in unknowns:
87
                # FIXME: Should also match if the unknown file is within a
88
                # specified directory.
89
                if specific_files:
90
                    if path not in specific_files:
91
                        continue
92
                if not done_header:
93
                    print >>to_file, 'unknown:'
94
                    done_header = True
95
                print >>to_file, ' ', path
96
            if show_pending and len(branch.pending_merges()) > 0:
97
                print >>to_file, 'pending merges:'
98
                for merge in branch.pending_merges():
99
                    print >> to_file, ' ', merge
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
100
    finally:
101
        branch.unlock()
102