comparison mercurial/merge.py @ 31257:11831d755b51

merge: remove uses of manifest.matches This gets rid of the manifest.matches calls in merge.py in favor of the new api. This is part of getting rid of manifest.matches since it is O(manifest).
author Durham Goode <durham@fb.com>
date Tue, 07 Mar 2017 18:38:20 -0800
parents 7433b3bc55ee
children 8908f985570c
comparison
equal deleted inserted replaced
31256:5a909a8098a1 31257:11831d755b51
25 ) 25 )
26 from . import ( 26 from . import (
27 copies, 27 copies,
28 error, 28 error,
29 filemerge, 29 filemerge,
30 match as matchmod,
30 obsolete, 31 obsolete,
31 pycompat, 32 pycompat,
32 scmutil, 33 scmutil,
33 subrepo, 34 subrepo,
34 util, 35 util,
816 if '.hgsubstate' in m1: 817 if '.hgsubstate' in m1:
817 # check whether sub state is modified 818 # check whether sub state is modified
818 if any(wctx.sub(s).dirty() for s in wctx.substate): 819 if any(wctx.sub(s).dirty() for s in wctx.substate):
819 m1['.hgsubstate'] = modifiednodeid 820 m1['.hgsubstate'] = modifiednodeid
820 821
821 # Compare manifests 822 diff = m1.diff(m2, match=matcher)
822 if matcher is not None: 823
823 m1 = m1.matches(matcher) 824 if matcher is None:
824 m2 = m2.matches(matcher) 825 matcher = matchmod.always('', '')
825 diff = m1.diff(m2)
826 826
827 actions = {} 827 actions = {}
828 for f, ((n1, fl1), (n2, fl2)) in diff.iteritems(): 828 for f, ((n1, fl1), (n2, fl2)) in diff.iteritems():
829 if n1 and n2: # file exists on both local and remote side 829 if n1 and n2: # file exists on both local and remote side
830 if f not in ma: 830 if f not in ma:
856 elif n1: # file exists only on local side 856 elif n1: # file exists only on local side
857 if f in copied: 857 if f in copied:
858 pass # we'll deal with it on m2 side 858 pass # we'll deal with it on m2 side
859 elif f in movewithdir: # directory rename, move local 859 elif f in movewithdir: # directory rename, move local
860 f2 = movewithdir[f] 860 f2 = movewithdir[f]
861 if f2 in m2: 861 if matcher(f2) and f2 in m2:
862 actions[f2] = ('m', (f, f2, None, True, pa.node()), 862 actions[f2] = ('m', (f, f2, None, True, pa.node()),
863 "remote directory rename, both created") 863 "remote directory rename, both created")
864 else: 864 else:
865 actions[f2] = ('dm', (f, fl1), 865 actions[f2] = ('dm', (f, fl1),
866 "remote directory rename - move from " + f) 866 "remote directory rename - move from " + f)
885 elif n2: # file exists only on remote side 885 elif n2: # file exists only on remote side
886 if f in copied: 886 if f in copied:
887 pass # we'll deal with it on m1 side 887 pass # we'll deal with it on m1 side
888 elif f in movewithdir: 888 elif f in movewithdir:
889 f2 = movewithdir[f] 889 f2 = movewithdir[f]
890 if f2 in m1: 890 if matcher(f2) and f2 in m1:
891 actions[f2] = ('m', (f2, f, None, False, pa.node()), 891 actions[f2] = ('m', (f2, f, None, False, pa.node()),
892 "local directory rename, both created") 892 "local directory rename, both created")
893 else: 893 else:
894 actions[f2] = ('dg', (f, fl2), 894 actions[f2] = ('dg', (f, fl2),
895 "local directory rename - get from " + f) 895 "local directory rename - get from " + f)
896 elif f in copy: 896 elif f in copy:
897 f2 = copy[f] 897 f2 = copy[f]
898 if f2 in m2: 898 if matcher(f2) and f2 in m2:
899 actions[f] = ('m', (f2, f, f2, False, pa.node()), 899 actions[f] = ('m', (f2, f, f2, False, pa.node()),
900 "remote copied from " + f2) 900 "remote copied from " + f2)
901 else: 901 else:
902 actions[f] = ('m', (f2, f, f2, True, pa.node()), 902 actions[f] = ('m', (f2, f, f2, True, pa.node()),
903 "remote moved from " + f2) 903 "remote moved from " + f2)
925 for d in dirmove: 925 for d in dirmove:
926 if f.startswith(d): 926 if f.startswith(d):
927 # new file added in a directory that was moved 927 # new file added in a directory that was moved
928 df = dirmove[d] + f[len(d):] 928 df = dirmove[d] + f[len(d):]
929 break 929 break
930 if df in m1: 930 if matcher(df) and df in m1:
931 actions[df] = ('m', (df, f, f, False, pa.node()), 931 actions[df] = ('m', (df, f, f, False, pa.node()),
932 "local directory rename - respect move from " + f) 932 "local directory rename - respect move from " + f)
933 elif acceptremote: 933 elif acceptremote:
934 actions[f] = ('c', (fl2,), "remote recreating") 934 actions[f] = ('c', (fl2,), "remote recreating")
935 else: 935 else: