mercurial/merge.py
changeset 31257 11831d755b51
parent 31175 7433b3bc55ee
child 31309 8908f985570c
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: