mercurial/merge.py
changeset 2848 e78cad1f6b1f
parent 2829 4870f795f681
child 2849 19b3bc840182
equal deleted inserted replaced
2830:49988d9f0758 2848:e78cad1f6b1f
   116     mfw = mf1.copy()
   116     mfw = mf1.copy()
   117     umap = dict.fromkeys(unknown)
   117     umap = dict.fromkeys(unknown)
   118 
   118 
   119     for f in added + modified + unknown:
   119     for f in added + modified + unknown:
   120         mw[f] = ""
   120         mw[f] = ""
   121         mfw[f] = util.is_exec(repo.wjoin(f), mfw.get(f, False))
   121         mfw.set(f, util.is_exec(repo.wjoin(f), mfw.execf(f)))
   122 
   122 
   123     for f in deleted + removed:
   123     for f in deleted + removed:
   124         if f in mw:
   124         if f in mw:
   125             del mw[f]
   125             del mw[f]
   126 
   126 
   153                 # are both different from the ancestor?
   153                 # are both different from the ancestor?
   154                 if n != a and m2[f] != a:
   154                 if n != a and m2[f] != a:
   155                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   155                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   156                     # merge executable bits
   156                     # merge executable bits
   157                     # "if we changed or they changed, change in merge"
   157                     # "if we changed or they changed, change in merge"
   158                     a, b, c = mfa.get(f, 0), mfw[f], mf2[f]
   158                     a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
   159                     mode = ((a^b) | (a^c)) ^ a
   159                     mode = ((a^b) | (a^c)) ^ a
   160                     merge[f] = (m1.get(f, nullid), m2[f], mode)
   160                     merge[f] = (m1.get(f, nullid), m2[f], mode)
   161                     s = 1
   161                     s = 1
   162                 # are we clobbering?
   162                 # are we clobbering?
   163                 # is remote's version newer?
   163                 # is remote's version newer?
   169             elif f in umap or f in added:
   169             elif f in umap or f in added:
   170                 # this unknown file is the same as the checkout
   170                 # this unknown file is the same as the checkout
   171                 # we need to reset the dirstate if the file was added
   171                 # we need to reset the dirstate if the file was added
   172                 get[f] = m2[f]
   172                 get[f] = m2[f]
   173 
   173 
   174             if not s and mfw[f] != mf2[f]:
   174             if not s and mfw.execf(f) != mf2.execf(f):
   175                 if overwrite:
   175                 if overwrite:
   176                     repo.ui.debug(_(" updating permissions for %s\n") % f)
   176                     repo.ui.debug(_(" updating permissions for %s\n") % f)
   177                     util.set_exec(repo.wjoin(f), mf2[f])
   177                     util.set_exec(repo.wjoin(f), mf2.execf(f))
   178                 else:
   178                 else:
   179                     a, b, c = mfa.get(f, 0), mfw[f], mf2[f]
   179                     a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
   180                     mode = ((a^b) | (a^c)) ^ a
   180                     mode = ((a^b) | (a^c)) ^ a
   181                     if mode != b:
   181                     if mode != b:
   182                         repo.ui.debug(_(" updating permissions for %s\n")
   182                         repo.ui.debug(_(" updating permissions for %s\n")
   183                                       % f)
   183                                       % f)
   184                         util.set_exec(repo.wjoin(f), mode)
   184                         util.set_exec(repo.wjoin(f), mode)
   257         if f[0] == "/":
   257         if f[0] == "/":
   258             continue
   258             continue
   259         repo.ui.note(_("getting %s\n") % f)
   259         repo.ui.note(_("getting %s\n") % f)
   260         t = repo.file(f).read(get[f])
   260         t = repo.file(f).read(get[f])
   261         repo.wwrite(f, t)
   261         repo.wwrite(f, t)
   262         util.set_exec(repo.wjoin(f), mf2[f])
   262         util.set_exec(repo.wjoin(f), mf2.execf(f))
   263         if not partial:
   263         if not partial:
   264             if branchmerge:
   264             if branchmerge:
   265                 repo.dirstate.update([f], 'n', st_mtime=-1)
   265                 repo.dirstate.update([f], 'n', st_mtime=-1)
   266             else:
   266             else:
   267                 repo.dirstate.update([f], 'n')
   267                 repo.dirstate.update([f], 'n')