Mercurial > public > mercurial-scm > hg
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: |