~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/status.py

  • Committer: Martin Pool
  • Date: 2005-09-05 08:00:35 UTC
  • Revision ID: mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9
- start splitting code for xml (de)serialization away from objects
  preparatory to supporting multiple formats by a single library

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 single-line status for non-ignored working files.
 
25
 
 
26
    show_all
 
27
        If true, show unmodified files too.
 
28
 
 
29
    specific_files
 
30
        If set, only show the status of files in this list.
 
31
 
 
32
    to_file
 
33
        If set, write to this file (default stdout.)
26
34
    """
27
 
    import cache
 
35
    import sys
 
36
    from bzrlib.delta import compare_trees
28
37
 
29
 
    inv = branch.read_working_inventory()
30
 
    cc = cache.update_cache(branch, inv)
31
 
    basis_inv = branch.basis_tree().inventory
 
38
    if to_file == None:
 
39
        to_file = sys.stdout
32
40
    
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
 
41
    branch.lock_read()
 
42
    try:
 
43
 
 
44
        old = branch.basis_tree()
 
45
        new = branch.working_tree()
 
46
 
 
47
        delta = compare_trees(old, new, want_unchanged=show_unchanged,
 
48
                              specific_files=specific_files)
 
49
 
 
50
        delta.show(to_file,
 
51
                   show_ids=show_ids,
 
52
                   show_unchanged=show_unchanged)
 
53
 
 
54
        unknowns = new.unknowns()
 
55
        done_header = False
 
56
        for path in unknowns:
 
57
            # FIXME: Should also match if the unknown file is within a
 
58
            # specified directory.
 
59
            if specific_files:
 
60
                if path not in specific_files:
 
61
                    continue
 
62
            if not done_header:
 
63
                print >>to_file, 'unknown:'
 
64
                done_header = True
 
65
            print >>to_file, ' ', path
 
66
        if show_pending and len(branch.pending_merges()) > 0:
 
67
            print >>to_file, 'pending merges:'
 
68
            for merge in branch.pending_merges():
 
69
                print >> to_file, ' ', merge
 
70
    finally:
 
71
        branch.unlock()
52
72