~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tree.py

  • Committer: Aaron Bentley
  • Date: 2006-09-19 13:58:08 UTC
  • mto: This revision was merged to the branch mainline in revision 2162.
  • Revision ID: abentley@panoramicfeedback.com-20060919135808-4187174fc93b3d10
Always generate tuples (because kind is always used, even when not different)

Show diffs side-by-side

added added

removed removed

Lines of Context:
420
420
        (file_id, path, changed_content, versioned, parent, name, kind,
421
421
         executable)
422
422
 
423
 
        file_id and path are always returned.  Path is relative to the to_tree.
424
 
        changed_content is True if the file's content has changed.  This
425
 
        includes changes to its kind.
 
423
        Path is relative to the to_tree.  changed_content is True if the file's
 
424
        content has changed.  This includes changes to its kind, and to
 
425
        a symlink's target.
426
426
 
427
 
        versioned, parent, name, kind, executable are None if unchanged, or
428
 
        tuples of (from, to) if changed.  If a file is missing in a tree, its
429
 
        kind is None.
 
427
        versioned, parent, name, kind, executable are tuples of (from, to) if
 
428
        changed.  If a file is missing in a tree, its kind is None.
430
429
 
431
430
        Iteration is done in parent-to-child order, relative to the to_tree.
432
431
        """
436
435
            except errors.NoSuchFile:
437
436
                return None
438
437
 
439
 
        def compared(from_value, to_value):
440
 
            if from_value != to_value:
441
 
                return (from_value, to_value)
442
 
            else:
443
 
                return None
444
 
 
445
438
        to_paths = {}
446
439
        for path, to_entry in to_tree.iter_entries_by_dir():
447
440
            file_id = to_entry.file_id
448
441
            to_paths[file_id] = path
449
442
            changed_content = False
450
443
            from_versioned = (file_id in from_tree)
451
 
            versioned = compared(from_versioned, True)
 
444
            versioned = (from_versioned, True)
452
445
            if from_versioned:
453
446
                from_kind = get_versioned_kind(from_tree, file_id)
454
447
                if from_kind is not None:
465
458
                from_name = None
466
459
                from_executable = None
467
460
            to_kind = get_versioned_kind(to_tree, file_id)
468
 
            kind = compared(from_kind, to_kind)
469
 
            if kind is not None:
 
461
            kind = (from_kind, to_kind)
 
462
            if kind[0] != kind[1]:
470
463
                changed_content = True
471
464
            elif from_kind == 'file':
472
465
                if (from_tree.get_file_sha1(file_id) !=
476
469
                if (from_tree.get_symlink_target(file_id) != 
477
470
                    to_tree.get_symlink_target(file_id)):
478
471
                    changed_content = True
479
 
            parent = compared(from_parent, to_entry.parent_id)
480
 
            name = compared(from_name, to_entry.name)
 
472
            parent = (from_parent, to_entry.parent_id)
 
473
            name = (from_name, to_entry.name)
481
474
            if to_kind is not None:
482
475
                to_executable = (to_tree.is_executable(file_id) not in 
483
476
                                 (False, None))
484
477
            else:
485
478
                to_executable = None
486
 
            executable = compared(from_executable, to_executable)
487
 
            if (changed_content is not False or versioned is not None or
488
 
                parent is not None or name is not None or executable is not
489
 
                None or include_unchanged):
 
479
            executable = (from_executable, to_executable)
 
480
            if (changed_content is not False or versioned[0] != versioned[1] 
 
481
                or parent[0] != parent[1] or name[0] != name[1] or 
 
482
                executable[0] != executable[1] or include_unchanged):
490
483
                yield (file_id, path, changed_content, versioned, parent,
491
484
                       name, kind, executable)
492
485