mercurial/merge.py
changeset 3003 cbb90f4bafb0
parent 3002 a31557193f3c
child 3004 31011730f9bd
equal deleted inserted replaced
3002:a31557193f3c 3003:cbb90f4bafb0
   118     # construct a working dir manifest
   118     # construct a working dir manifest
   119     mw = m1.copy()
   119     mw = m1.copy()
   120     umap = dict.fromkeys(unknown)
   120     umap = dict.fromkeys(unknown)
   121 
   121 
   122     for f in added + modified + unknown:
   122     for f in added + modified + unknown:
   123         mw[f] = ""
   123         mw[f] = nullid + "+"
   124         mw.set(f, util.is_exec(repo.wjoin(f), mw.execf(f)))
   124         mw.set(f, util.is_exec(repo.wjoin(f), mw.execf(f)))
       
   125         if f in m1:
       
   126             mw[f] = m1[f] + "+"
   125 
   127 
   126     for f in deleted + removed:
   128     for f in deleted + removed:
   127         if f in mw:
   129         if f in mw:
   128             del mw[f]
   130             del mw[f]
   129 
   131 
   150             if n != m2[f]:
   152             if n != m2[f]:
   151                 a = ma.get(f, nullid)
   153                 a = ma.get(f, nullid)
   152                 # are both different from the ancestor?
   154                 # are both different from the ancestor?
   153                 if not overwrite and n != a and m2[f] != a:
   155                 if not overwrite and n != a and m2[f] != a:
   154                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   156                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   155                     merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f])
   157                     merge[f] = (fmerge(f, mw, m2, ma), n[:20], m2[f])
   156                     queued = 1
   158                     queued = 1
   157                 # are we clobbering?
   159                 # are we clobbering?
   158                 # is remote's version newer?
   160                 # is remote's version newer?
   159                 # or are we going back in time and clean?
   161                 # or are we going back in time and clean?
   160                 elif overwrite or m2[f] != a or (backwards and mw[f] == m1[f]):
   162                 elif overwrite or m2[f] != a or (backwards and not n[20:]):
   161                     repo.ui.debug(_(" remote %s is newer, get\n") % f)
   163                     repo.ui.debug(_(" remote %s is newer, get\n") % f)
   162                     get[f] = (m2.execf(f), m2[f])
   164                     get[f] = (m2.execf(f), m2[f])
   163                     queued = 1
   165                     queued = 1
   164             elif f in umap or f in added:
   166             elif f in umap or f in added:
   165                 # this unknown file is the same as the checkout
   167                 # this unknown file is the same as the checkout
   192         else:
   194         else:
   193             # file is created on branch or in working directory
   195             # file is created on branch or in working directory
   194             if overwrite and f not in umap:
   196             if overwrite and f not in umap:
   195                 repo.ui.debug(_("remote deleted %s, clobbering\n") % f)
   197                 repo.ui.debug(_("remote deleted %s, clobbering\n") % f)
   196                 remove.append(f)
   198                 remove.append(f)
   197             elif n == m1.get(f, nullid): # same as parent
   199             elif not n[20:]: # same as parent
   198                 if backwards:
   200                 if backwards:
   199                     repo.ui.debug(_("remote deleted %s\n") % f)
   201                     repo.ui.debug(_("remote deleted %s\n") % f)
   200                     remove.append(f)
   202                     remove.append(f)
   201                 else:
   203                 else:
   202                     repo.ui.debug(_("local modified %s, keeping\n") % f)
   204                     repo.ui.debug(_("local modified %s, keeping\n") % f)