~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
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
48
    from bzrlib.osutils import is_inside_any
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
49
    from bzrlib.delta import compare_trees
915 by Martin Pool
- add simple test case for bzr status
50
51
    if to_file == None:
52
        to_file = sys.stdout
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
53
    
610 by Martin Pool
- replace Branch.lock(mode) with separate lock_read and lock_write
54
    branch.lock_read()
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
55
    try:
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
56
        new_is_working_tree = True
57
        if revision is None:
58
            old = branch.basis_tree()
59
            new = branch.working_tree()
60
        elif len(revision) > 0:
61
            try:
62
                rev_id = revision[0].in_history(branch).rev_id
63
                old = branch.revision_tree(rev_id)
64
            except NoSuchRevision, e:
65
                raise BzrCommandError(str(e))
66
            if len(revision) > 1:
67
                try:
68
                    rev_id = revision[1].in_history(branch).rev_id
69
                    new = branch.revision_tree(rev_id)
70
                    new_is_working_tree = False
71
                except NoSuchRevision, e:
72
                    raise BzrCommandError(str(e))
73
            else:
74
                new = branch.working_tree()
75
                
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
76
77
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
78
                              specific_files=specific_files)
79
915 by Martin Pool
- add simple test case for bzr status
80
        delta.show(to_file,
81
                   show_ids=show_ids,
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
82
                   show_unchanged=show_unchanged)
83
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
84
        if new_is_working_tree:
85
            unknowns = new.unknowns()
86
            done_header = False
87
            for path in unknowns:
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
88
                if specific_files and not is_inside_any(specific_files, path):
89
                    continue
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
90
                if not done_header:
91
                    print >>to_file, 'unknown:'
92
                    done_header = True
93
                print >>to_file, ' ', path
94
            if show_pending and len(branch.pending_merges()) > 0:
95
                print >>to_file, 'pending merges:'
96
                for merge in branch.pending_merges():
97
                    print >> to_file, ' ', merge
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
98
    finally:
99
        branch.unlock()
100