~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/status.py

  • Committer: Martin Pool
  • Date: 2005-05-11 02:30:01 UTC
  • Revision ID: mbp@sourcefrog.net-20050511023000-5580a38e987bb915
- tests for bzr root

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
 
18
18
 
19
 
def show_status(branch, show_unchanged=False,
20
 
                specific_files=None,
21
 
                show_ids=False):
22
 
    """Display single-line status for non-ignored working files.
23
 
 
24
 
    show_all
25
 
        If true, show unmodified files too.
26
 
 
27
 
    specific_files
28
 
        If set, only show the status of files in this list.
 
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).
29
26
    """
30
 
    import sys
31
 
    import diff
32
 
    
33
 
    branch._need_readlock()
34
 
    
35
 
    old = branch.basis_tree()
36
 
    new = branch.working_tree()
37
 
 
38
 
    delta = diff.compare_trees(old, new, want_unchanged=show_unchanged,
39
 
                               specific_files=specific_files)
40
 
 
41
 
    delta.show(sys.stdout, show_ids=show_ids,
42
 
               show_unchanged=show_unchanged)
43
 
 
44
 
    unknowns = new.unknowns()
45
 
    done_header = False
46
 
    for path in unknowns:
47
 
        # FIXME: Should also match if the unknown file is within a
48
 
        # specified directory.
49
 
        if specific_files:
50
 
            if path not in specific_files:
51
 
                continue
52
 
        if not done_header:
53
 
            print 'unknown:'
54
 
            done_header = True
55
 
        print ' ', path
 
27
    import cache
 
28
 
 
29
    inv = branch.read_working_inventory()
 
30
    cc = cache.update_cache(branch, inv)
 
31
    basis_inv = branch.basis_tree().inventory
 
32
    
 
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
 
52