~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.
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
41
    revision
42
        If None the compare latest revision with working tree
43
        If one revision show compared it with working tree.
44
        If two revisions show status between first and second.
465 by Martin Pool
- Move show_status() out of Branch into a new function in
45
    """
46
    import sys
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
47
    from bzrlib.delta import compare_trees
915 by Martin Pool
- add simple test case for bzr status
48
49
    if to_file == None:
50
        to_file = sys.stdout
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
51
    
610 by Martin Pool
- replace Branch.lock(mode) with separate lock_read and lock_write
52
    branch.lock_read()
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
53
    try:
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
54
        new_is_working_tree = True
55
        if revision is None:
56
            old = branch.basis_tree()
57
            new = branch.working_tree()
58
        elif len(revision) > 0:
59
            try:
60
                rev_id = revision[0].in_history(branch).rev_id
61
                old = branch.revision_tree(rev_id)
62
            except NoSuchRevision, e:
63
                raise BzrCommandError(str(e))
64
            if len(revision) > 1:
65
                try:
66
                    rev_id = revision[1].in_history(branch).rev_id
67
                    new = branch.revision_tree(rev_id)
68
                    new_is_working_tree = False
69
                except NoSuchRevision, e:
70
                    raise BzrCommandError(str(e))
71
            else:
72
                new = branch.working_tree()
73
                
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
74
75
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
76
                              specific_files=specific_files)
77
915 by Martin Pool
- add simple test case for bzr status
78
        delta.show(to_file,
79
                   show_ids=show_ids,
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
80
                   show_unchanged=show_unchanged)
81
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
82
        if new_is_working_tree:
83
            unknowns = new.unknowns()
84
            done_header = False
85
            for path in unknowns:
86
                # FIXME: Should also match if the unknown file is within a
87
                # specified directory.
88
                if specific_files:
89
                    if path not in specific_files:
90
                        continue
91
                if not done_header:
92
                    print >>to_file, 'unknown:'
93
                    done_header = True
94
                print >>to_file, ' ', path
95
            if show_pending and len(branch.pending_merges()) > 0:
96
                print >>to_file, 'pending merges:'
97
                for merge in branch.pending_merges():
98
                    print >> to_file, ' ', merge
580 by Martin Pool
- Use explicit lock methods on a branch, rather than doing it
99
    finally:
100
        branch.unlock()
101