mercurial/merge.py
changeset 18818 a0bff3d4f67b
parent 18780 0705ad73e878
child 18822 381c0ef72a56
equal deleted inserted replaced
18817:c760acc6f69d 18818:a0bff3d4f67b
   236                 m1['.hgsubstate'] += "+"
   236                 m1['.hgsubstate'] += "+"
   237                 break
   237                 break
   238 
   238 
   239     aborts, prompts = [], []
   239     aborts, prompts = [], []
   240     # Compare manifests
   240     # Compare manifests
   241     for f, n in m1.iteritems():
   241     for f, n1 in m1.iteritems():
   242         if partial and not partial(f):
   242         if partial and not partial(f):
   243             continue
   243             continue
   244         if f in m2:
   244         if f in m2:
   245             n2 = m2[f]
   245             n2 = m2[f]
   246             fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f)
   246             fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f)
   247             nol = 'l' not in fl1 + fl2 + fla
   247             nol = 'l' not in fl1 + fl2 + fla
   248             a = ma.get(f, nullid)
   248             a = ma.get(f, nullid)
   249             if n == n2 and fl1 == fl2:
   249             if n1 == n2 and fl1 == fl2:
   250                 pass # same - keep local
   250                 pass # same - keep local
   251             elif n2 == a and fl2 == fla:
   251             elif n2 == a and fl2 == fla:
   252                 pass # remote unchanged - keep local
   252                 pass # remote unchanged - keep local
   253             elif n == a and fl1 == fla: # local unchanged - use remote
   253             elif n1 == a and fl1 == fla: # local unchanged - use remote
   254                 if n == n2: # optimization: keep local content
   254                 if n1 == n2: # optimization: keep local content
   255                     actions.append((f, "e", (fl2,), "update permissions"))
   255                     actions.append((f, "e", (fl2,), "update permissions"))
   256                 else:
   256                 else:
   257                     actions.append((f, "g", (fl2,), "remote is newer"))
   257                     actions.append((f, "g", (fl2,), "remote is newer"))
   258             elif nol and n2 == a: # remote only changed 'x'
   258             elif nol and n2 == a: # remote only changed 'x'
   259                 actions.append((f, "e", (fl2,), "update permissions"))
   259                 actions.append((f, "e", (fl2,), "update permissions"))
   260             elif nol and n == a: # local only changed 'x'
   260             elif nol and n1 == a: # local only changed 'x'
   261                 actions.append((f, "g", (fl1,), "remote is newer"))
   261                 actions.append((f, "g", (fl1,), "remote is newer"))
   262             else: # both changed something
   262             else: # both changed something
   263                 actions.append((f, "m", (f, f, False), "versions differ"))
   263                 actions.append((f, "m", (f, f, False), "versions differ"))
   264         elif f in copied: # files we'll deal with on m2 side
   264         elif f in copied: # files we'll deal with on m2 side
   265             pass
   265             pass
   270         elif f in copy:
   270         elif f in copy:
   271             f2 = copy[f]
   271             f2 = copy[f]
   272             actions.append((f, "m", (f2, f, False),
   272             actions.append((f, "m", (f2, f, False),
   273                             "local copied/moved to " + f2))
   273                             "local copied/moved to " + f2))
   274         elif f in ma: # clean, a different, no remote
   274         elif f in ma: # clean, a different, no remote
   275             if n != ma[f]:
   275             if n1 != ma[f]:
   276                 prompts.append((f, "cd")) # prompt changed/deleted
   276                 prompts.append((f, "cd")) # prompt changed/deleted
   277             elif n[20:] == "a": # added, no remote
   277             elif n1[20:] == "a": # added, no remote
   278                 actions.append((f, "f", None, "remote deleted"))
   278                 actions.append((f, "f", None, "remote deleted"))
   279             else:
   279             else:
   280                 actions.append((f, "r", None, "other deleted"))
   280                 actions.append((f, "r", None, "other deleted"))
   281 
   281 
   282     for f, n in m2.iteritems():
   282     for f, n2 in m2.iteritems():
   283         if partial and not partial(f):
   283         if partial and not partial(f):
   284             continue
   284             continue
   285         if f in m1 or f in copied: # files already visited
   285         if f in m1 or f in copied: # files already visited
   286             continue
   286             continue
   287         if f in movewithdir:
   287         if f in movewithdir:
   318                                     "remote differs from untracked local"))
   318                                     "remote differs from untracked local"))
   319                 elif not force and different:
   319                 elif not force and different:
   320                     aborts.append((f, "ud"))
   320                     aborts.append((f, "ud"))
   321                 else:
   321                 else:
   322                     actions.append((f, "g", (m2.flags(f),), "remote created"))
   322                     actions.append((f, "g", (m2.flags(f),), "remote created"))
   323         elif n != ma[f]:
   323         elif n2 != ma[f]:
   324             prompts.append((f, "dc")) # prompt deleted/changed
   324             prompts.append((f, "dc")) # prompt deleted/changed
   325 
   325 
   326     for f, m in sorted(aborts):
   326     for f, m in sorted(aborts):
   327         if m == "ud":
   327         if m == "ud":
   328             repo.ui.warn(_("%s: untracked file differs\n") % f)
   328             repo.ui.warn(_("%s: untracked file differs\n") % f)