##// END OF EJS Templates
merge: check created file dirs for path conflicts only once (issue5716)...
Mark Thomas -
r35182:a92b9f8e 4.4.2 stable
parent child Browse files
Show More
@@ -915,34 +915,21 def checkpathconflicts(repo, wctx, mctx,
915 # can't be updated to cleanly.
915 # can't be updated to cleanly.
916 invalidconflicts = set()
916 invalidconflicts = set()
917
917
918 # The set of directories that contain files that are being created.
919 createdfiledirs = set()
920
918 # The set of files deleted by all the actions.
921 # The set of files deleted by all the actions.
919 deletedfiles = set()
922 deletedfiles = set()
920
923
921 for f, (m, args, msg) in actions.items():
924 for f, (m, args, msg) in actions.items():
922 if m in ('c', 'dc', 'm', 'cm'):
925 if m in ('c', 'dc', 'm', 'cm'):
923 # This action may create a new local file.
926 # This action may create a new local file.
927 createdfiledirs.update(util.finddirs(f))
924 if mf.hasdir(f):
928 if mf.hasdir(f):
925 # The file aliases a local directory. This might be ok if all
929 # The file aliases a local directory. This might be ok if all
926 # the files in the local directory are being deleted. This
930 # the files in the local directory are being deleted. This
927 # will be checked once we know what all the deleted files are.
931 # will be checked once we know what all the deleted files are.
928 remoteconflicts.add(f)
932 remoteconflicts.add(f)
929 for p in util.finddirs(f):
930 if p in mf:
931 if p in mctx:
932 # The file is in a directory which aliases both a local
933 # and a remote file. This is an internal inconsistency
934 # within the remote manifest.
935 invalidconflicts.add(p)
936 else:
937 # The file is in a directory which aliases a local file.
938 # We will need to rename the local file.
939 localconflicts.add(p)
940 if p in actions and actions[p][0] in ('c', 'dc', 'm', 'cm'):
941 # The file is in a directory which aliases a remote file.
942 # This is an internal inconsistency within the remote
943 # manifest.
944 invalidconflicts.add(p)
945
946 # Track the names of all deleted files.
933 # Track the names of all deleted files.
947 if m == 'r':
934 if m == 'r':
948 deletedfiles.add(f)
935 deletedfiles.add(f)
@@ -954,6 +941,24 def checkpathconflicts(repo, wctx, mctx,
954 f2, flags = args
941 f2, flags = args
955 deletedfiles.add(f2)
942 deletedfiles.add(f2)
956
943
944 # Check all directories that contain created files for path conflicts.
945 for p in createdfiledirs:
946 if p in mf:
947 if p in mctx:
948 # A file is in a directory which aliases both a local
949 # and a remote file. This is an internal inconsistency
950 # within the remote manifest.
951 invalidconflicts.add(p)
952 else:
953 # A file is in a directory which aliases a local file.
954 # We will need to rename the local file.
955 localconflicts.add(p)
956 if p in actions and actions[p][0] in ('c', 'dc', 'm', 'cm'):
957 # The file is in a directory which aliases a remote file.
958 # This is an internal inconsistency within the remote
959 # manifest.
960 invalidconflicts.add(p)
961
957 # Rename all local conflicting files that have not been deleted.
962 # Rename all local conflicting files that have not been deleted.
958 for p in localconflicts:
963 for p in localconflicts:
959 if p not in deletedfiles:
964 if p not in deletedfiles:
General Comments 0
You need to be logged in to leave comments. Login now