~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/delta.py

- refactor handling of short option names

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical
 
1
# -*- coding: UTF-8 -*-
2
2
 
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
114
114
            print >>to_file, 'added:'
115
115
            show_list(self.added)
116
116
 
117
 
        extra_modified = []
118
 
 
119
117
        if self.renamed:
120
118
            print >>to_file, 'renamed:'
121
119
            for (oldpath, newpath, fid, kind,
122
120
                 text_modified, meta_modified) in self.renamed:
123
 
                if text_modified or meta_modified:
124
 
                    extra_modified.append((newpath, fid, kind,
125
 
                                           text_modified, meta_modified))
126
121
                if meta_modified:
127
122
                    newpath += '*'
128
123
                if show_ids:
130
125
                else:
131
126
                    print >>to_file, '  %s => %s' % (oldpath, newpath)
132
127
                    
133
 
        if self.modified or extra_modified:
 
128
        if self.modified:
134
129
            print >>to_file, 'modified:'
135
130
            show_list(self.modified)
136
 
            show_list(extra_modified)
137
131
            
138
132
        if show_unchanged and self.unchanged:
139
133
            print >>to_file, 'unchanged:'
157
151
 
158
152
    specific_files
159
153
        If true, only check for changes to specified names or
160
 
        files within them.  Any unversioned files given have no effect
161
 
        (but this might change in the future).
 
154
        files within them.
162
155
    """
163
 
    # NB: show_status depends on being able to pass in non-versioned files and
164
 
    # report them as unknown
165
 
    old_tree.lock_read()
166
 
    try:
167
 
        new_tree.lock_read()
168
 
        try:
169
 
            return _compare_trees(old_tree, new_tree, want_unchanged,
170
 
                                  specific_files)
171
 
        finally:
172
 
            new_tree.unlock()
173
 
    finally:
174
 
        old_tree.unlock()
175
 
 
176
 
 
177
 
def _compare_trees(old_tree, new_tree, want_unchanged, specific_files):
178
156
 
179
157
    from osutils import is_inside_any
180
158
    
183
161
    delta = TreeDelta()
184
162
    mutter('start compare_trees')
185
163
 
186
 
    # TODO: Rather than iterating over the whole tree and then filtering, we
187
 
    # could diff just the specified files (if any) and their subtrees.  
188
 
    # Perhaps should take a list of file-ids instead?   Need to indicate any
189
 
    # ids or names which were not found in the trees.
 
164
    # TODO: match for specific files can be rather smarter by finding
 
165
    # the IDs of those files up front and then considering only that.
190
166
 
191
167
    for file_id in old_tree:
192
168
        if file_id in new_tree:
211
187
            # get them
212
188
            old_path = old_inv.id2path(file_id)
213
189
            new_path = new_inv.id2path(file_id)
214
 
            old_ie._read_tree_state(old_path, old_tree)
215
 
            new_ie._read_tree_state(new_path, new_tree)
 
190
            old_ie._read_tree_state(old_tree)
 
191
            new_ie._read_tree_state(new_tree)
216
192
            text_modified, meta_modified = new_ie.detect_changes(old_ie)
217
193
 
218
194
            # TODO: Can possibly avoid calculating path strings if the
243
219
 
244
220
    mutter('start looking for new files')
245
221
    for file_id in new_inv:
246
 
        if file_id in old_inv or file_id not in new_tree:
 
222
        if file_id in old_inv:
247
223
            continue
248
224
        kind = new_inv.get_file_kind(file_id)
249
225
        if kind == 'root_directory':