mercurial/merge.py
changeset 2838 b11c014dcbd9
parent 2837 19b3bc840182
child 2842 06c05c675a35
child 2875 3d6efcbbd1c9
equal deleted inserted replaced
2837:19b3bc840182 2838:b11c014dcbd9
    82 
    82 
    83     m1n = repo.changelog.read(p1)[0]
    83     m1n = repo.changelog.read(p1)[0]
    84     m2n = repo.changelog.read(p2)[0]
    84     m2n = repo.changelog.read(p2)[0]
    85     man = repo.manifest.ancestor(m1n, m2n)
    85     man = repo.manifest.ancestor(m1n, m2n)
    86     m1 = repo.manifest.read(m1n)
    86     m1 = repo.manifest.read(m1n)
    87     mf1 = repo.manifest.readflags(m1n)
       
    88     m2 = repo.manifest.read(m2n).copy()
    87     m2 = repo.manifest.read(m2n).copy()
    89     mf2 = repo.manifest.readflags(m2n)
       
    90     ma = repo.manifest.read(man)
    88     ma = repo.manifest.read(man)
    91     mfa = repo.manifest.readflags(man)
       
    92 
    89 
    93     if not forcemerge and not overwrite:
    90     if not forcemerge and not overwrite:
    94         for f in unknown:
    91         for f in unknown:
    95             if f in m2:
    92             if f in m2:
    96                 t1 = repo.wread(f)
    93                 t1 = repo.wread(f)
   111     get = {}
   108     get = {}
   112     remove = []
   109     remove = []
   113 
   110 
   114     # construct a working dir manifest
   111     # construct a working dir manifest
   115     mw = m1.copy()
   112     mw = m1.copy()
   116     mfw = mf1.copy()
       
   117     umap = dict.fromkeys(unknown)
   113     umap = dict.fromkeys(unknown)
   118 
   114 
   119     for f in added + modified + unknown:
   115     for f in added + modified + unknown:
   120         mw[f] = ""
   116         mw[f] = ""
   121         mfw.set(f, util.is_exec(repo.wjoin(f), mfw.execf(f)))
   117         mw.set(f, util.is_exec(repo.wjoin(f), mw.execf(f)))
   122 
   118 
   123     for f in deleted + removed:
   119     for f in deleted + removed:
   124         if f in mw:
   120         if f in mw:
   125             del mw[f]
   121             del mw[f]
   126 
   122 
   153                 # are both different from the ancestor?
   149                 # are both different from the ancestor?
   154                 if n != a and m2[f] != a:
   150                 if n != a and m2[f] != a:
   155                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   151                     repo.ui.debug(_(" %s versions differ, resolve\n") % f)
   156                     # merge executable bits
   152                     # merge executable bits
   157                     # "if we changed or they changed, change in merge"
   153                     # "if we changed or they changed, change in merge"
   158                     a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
   154                     a, b, c = ma.execf(f), mw.execf(f), m2.execf(f)
   159                     mode = ((a^b) | (a^c)) ^ a
   155                     mode = ((a^b) | (a^c)) ^ a
   160                     merge[f] = (mode, m1.get(f, nullid), m2[f])
   156                     merge[f] = (mode, m1.get(f, nullid), m2[f])
   161                     s = 1
   157                     s = 1
   162                 # are we clobbering?
   158                 # are we clobbering?
   163                 # is remote's version newer?
   159                 # is remote's version newer?
   169             elif f in umap or f in added:
   165             elif f in umap or f in added:
   170                 # this unknown file is the same as the checkout
   166                 # this unknown file is the same as the checkout
   171                 # we need to reset the dirstate if the file was added
   167                 # we need to reset the dirstate if the file was added
   172                 get[f] = (m2.execf(f), m2[f])
   168                 get[f] = (m2.execf(f), m2[f])
   173 
   169 
   174             if not s and mfw.execf(f) != mf2.execf(f):
   170             if not s and mw.execf(f) != m2.execf(f):
   175                 if overwrite:
   171                 if overwrite:
   176                     repo.ui.debug(_(" updating permissions for %s\n") % f)
   172                     repo.ui.debug(_(" updating permissions for %s\n") % f)
   177                     util.set_exec(repo.wjoin(f), mf2.execf(f))
   173                     util.set_exec(repo.wjoin(f), m2.execf(f))
   178                 else:
   174                 else:
   179                     a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
   175                     a, b, c = ma.execf(f), mw.execf(f), m2.execf(f)
   180                     mode = ((a^b) | (a^c)) ^ a
   176                     mode = ((a^b) | (a^c)) ^ a
   181                     if mode != b:
   177                     if mode != b:
   182                         repo.ui.debug(_(" updating permissions for %s\n")
   178                         repo.ui.debug(_(" updating permissions for %s\n")
   183                                       % f)
   179                                       % f)
   184                         util.set_exec(repo.wjoin(f), mode)
   180                         util.set_exec(repo.wjoin(f), mode)