~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/status.py

and the tutorial patch came back, the very next day

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
 
18
18
 
19
 
def find_modified(branch):
20
 
    """Return a list of files that have been modified in the working copy.
21
 
 
22
 
    This does not consider renames and does not include files added or
23
 
    deleted.
24
 
 
25
 
    Each modified file is returned as (PATH, ENTRY).
 
19
def show_status(branch, show_unchanged=False,
 
20
                specific_files=None,
 
21
                show_ids=False,
 
22
                to_file=None,
 
23
                show_pending=True):
 
24
    """Display status for non-ignored working files.
 
25
 
 
26
    show_unchanged
 
27
        If set, includes unchanged files.
 
28
 
 
29
    specific_files
 
30
        If set, only show the status of files in this list.
 
31
 
 
32
    show_ids
 
33
        If set, includes each file's id.
 
34
 
 
35
    to_file
 
36
        If set, write to this file (default stdout.)
 
37
 
 
38
    show_pending
 
39
        If set, write pending merges.
26
40
    """
27
 
    import cache
 
41
    import sys
 
42
    from bzrlib.delta import compare_trees
28
43
 
29
 
    inv = branch.read_working_inventory()
30
 
    cc = cache.update_cache(branch, inv)
31
 
    basis_inv = branch.basis_tree().inventory
 
44
    if to_file == None:
 
45
        to_file = sys.stdout
32
46
    
33
 
    for path, entry in inv.iter_entries():
34
 
        if entry.kind != 'file':
35
 
            continue
36
 
        
37
 
        file_id = entry.file_id
38
 
        ce = cc.get(file_id)
39
 
        if not ce:
40
 
            continue                    # not in working dir
41
 
 
42
 
        if file_id not in basis_inv:
43
 
            continue                    # newly added
44
 
 
45
 
        old_entry = basis_inv[file_id]
46
 
 
47
 
        if (old_entry.text_size == ce[3]
48
 
            and old_entry.text_sha1 == ce[1]):
49
 
            continue
50
 
 
51
 
        yield path, entry
 
47
    branch.lock_read()
 
48
    try:
 
49
 
 
50
        old = branch.basis_tree()
 
51
        new = branch.working_tree()
 
52
 
 
53
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
 
54
                              specific_files=specific_files)
 
55
 
 
56
        delta.show(to_file,
 
57
                   show_ids=show_ids,
 
58
                   show_unchanged=show_unchanged)
 
59
 
 
60
        unknowns = new.unknowns()
 
61
        done_header = False
 
62
        for path in unknowns:
 
63
            # FIXME: Should also match if the unknown file is within a
 
64
            # specified directory.
 
65
            if specific_files:
 
66
                if path not in specific_files:
 
67
                    continue
 
68
            if not done_header:
 
69
                print >>to_file, 'unknown:'
 
70
                done_header = True
 
71
            print >>to_file, ' ', path
 
72
        if show_pending and len(branch.pending_merges()) > 0:
 
73
            print >>to_file, 'pending merges:'
 
74
            for merge in branch.pending_merges():
 
75
                print >> to_file, ' ', merge
 
76
    finally:
 
77
        branch.unlock()
52
78