699
699
for (oldpath, newpath), (oldmode, newmode), (oldsha, newsha) in changes:
700
700
if newpath == b'' and not include_root:
702
if oldpath is not None:
703
oldpath_decoded = oldpath.decode('utf-8')
703
705
oldpath_decoded = None
706
if newpath is not None:
707
newpath_decoded = newpath.decode('utf-8')
705
oldpath_decoded = oldpath.decode('utf-8')
707
709
newpath_decoded = None
709
newpath_decoded = newpath.decode('utf-8')
710
710
if not (specific_files is None or
711
711
(oldpath is not None and
712
712
osutils.is_inside_or_parent_of_any(
715
715
osutils.is_inside_or_parent_of_any(
716
716
specific_files, newpath_decoded))):
719
if oldpath_decoded is None:
720
fileid = new_mapping.generate_file_id(newpath_decoded)
729
oldexe = mode_is_executable(oldmode)
730
oldkind = mode_kind(oldmode)
734
if oldpath_decoded == u'':
738
(oldparentpath, oldname) = osutils.split(oldpath_decoded)
739
oldparent = old_mapping.generate_file_id(oldparentpath)
740
fileid = old_mapping.generate_file_id(oldpath_decoded)
741
if newpath_decoded is None:
748
newversioned = (newpath_decoded not in target_extras)
750
newexe = mode_is_executable(newmode)
751
newkind = mode_kind(newmode)
755
if newpath_decoded == u'':
759
newparentpath, newname = osutils.split(newpath_decoded)
760
newparent = new_mapping.generate_file_id(newparentpath)
718
761
if old_mapping.is_special_file(oldpath):
720
763
if new_mapping.is_special_file(newpath):
722
765
if oldpath is None and newpath is None:
767
change = _mod_tree.TreeChange(
768
fileid, (oldpath_decoded, newpath_decoded), (oldsha != newsha),
769
(oldversioned, newversioned),
770
(oldparent, newparent), (oldname, newname),
771
(oldkind, newkind), (oldexe, newexe))
724
772
if oldpath is None:
725
added.append((newpath, mode_kind(newmode)))
773
added.append((newpath, newkind))
726
774
elif newpath is None or newmode == 0:
727
file_id = old_mapping.generate_file_id(oldpath_decoded)
728
ret.removed.append((oldpath_decoded, file_id, mode_kind(oldmode)))
775
ret.removed.append(change)
729
776
elif oldpath != newpath:
730
file_id = old_mapping.generate_file_id(oldpath_decoded)
732
(oldpath_decoded, newpath.decode('utf-8'), file_id,
733
mode_kind(newmode), (oldsha != newsha),
734
(oldmode != newmode)))
777
ret.renamed.append(change)
735
778
elif mode_kind(oldmode) != mode_kind(newmode):
736
file_id = new_mapping.generate_file_id(newpath_decoded)
737
ret.kind_changed.append(
738
(newpath_decoded, file_id, mode_kind(oldmode),
779
ret.kind_changed.append(change)
740
780
elif oldsha != newsha or oldmode != newmode:
741
781
if stat.S_ISDIR(oldmode) and stat.S_ISDIR(newmode):
743
file_id = new_mapping.generate_file_id(newpath_decoded)
745
(newpath_decoded, file_id, mode_kind(newmode),
746
(oldsha != newsha), (oldmode != newmode)))
783
ret.modified.append(change)
748
file_id = new_mapping.generate_file_id(newpath_decoded)
749
ret.unchanged.append(
750
(newpath_decoded, file_id, mode_kind(newmode)))
785
ret.unchanged.append(change)
752
787
implicit_dirs = {b''}
753
788
for path, kind in added:
759
794
if kind == 'directory' and path not in implicit_dirs:
761
796
path_decoded = osutils.normalized_filename(path)[0]
797
parent_path, basename = osutils.split(path_decoded)
798
parent_id = new_mapping.generate_file_id(parent_path)
762
799
if path in target_extras:
763
ret.unversioned.append((path_decoded, None, kind))
800
ret.unversioned.append(_mod_tree.TreeChange(
801
None, (None, path_decoded),
802
True, (False, False), (None, parent_id),
803
(None, basename), (None, kind), (None, False)))
765
805
file_id = new_mapping.generate_file_id(path_decoded)
766
ret.added.append((path_decoded, file_id, kind))
807
_mod_tree.TreeChange(
808
file_id, (None, path_decoded), True,
811
(None, basename), (None, kind), (None, False)))