~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff.py

  • Committer: Martin Pool
  • Date: 2005-05-11 10:14:09 UTC
  • Revision ID: mbp@sourcefrog.net-20050511101409-25634506a9caacfd
- move commit code into its own module
- remove some doctest tests in favour of black-box tests
- specific-file parameters for diff and status now cover all
  files inside a directory

Show diffs side-by-side

added added

removed removed

Lines of Context:
210
210
    This only considers versioned files.
211
211
 
212
212
    want_unchanged
213
 
        If true, also list files unchanged from one version to the next.
 
213
        If true, also list files unchanged from one version to
 
214
        the next.
214
215
 
215
216
    specific_files
216
 
        If true, only check for changes to specified files.
 
217
        If true, only check for changes to specified names or
 
218
        files within them.
217
219
    """
 
220
 
 
221
    from osutils import is_inside_any
 
222
    
218
223
    old_inv = old_tree.inventory
219
224
    new_inv = new_tree.inventory
220
225
    delta = TreeDelta()
221
226
    mutter('start compare_trees')
222
227
 
223
 
    if specific_files:
224
 
        specific_files = ImmutableSet(specific_files)
 
228
    # TODO: match for specific files can be rather smarter by finding
 
229
    # the IDs of those files up front and then considering only that.
225
230
 
226
231
    for file_id in old_tree:
227
232
        if file_id in new_tree:
238
243
            new_path = new_inv.id2path(file_id)
239
244
 
240
245
            if specific_files:
241
 
                if (old_path not in specific_files
242
 
                    and new_path not in specific_files):
 
246
                if (not is_inside_any(specific_files, old_path) 
 
247
                    and not is_inside_any(specific_files, new_path)):
243
248
                    continue
244
249
 
245
250
            if kind == 'file':
263
268
            elif want_unchanged:
264
269
                delta.unchanged.append((new_path, file_id, kind))
265
270
        else:
266
 
            delta.removed.append((old_inv.id2path(file_id), file_id, kind))
 
271
            old_path = old_inv.id2path(file_id)
 
272
            if specific_files:
 
273
                if not is_inside_any(specific_files, old_path):
 
274
                    continue
 
275
            delta.removed.append((old_path, file_id, kind))
267
276
 
268
277
    mutter('start looking for new files')
269
278
    for file_id in new_inv:
271
280
            continue
272
281
        new_path = new_inv.id2path(file_id)
273
282
        if specific_files:
274
 
            if new_path not in specific_files:
 
283
            if not is_inside_any(specific_files, new_path):
275
284
                continue
276
285
        kind = new_inv.get_file_kind(file_id)
277
286
        delta.added.append((new_path, file_id, kind))