mercurial/merge.py
changeset 3318 c5075ad5e3e9
parent 3317 966632304dde
child 3320 b16456909a0a
equal deleted inserted replaced
3317:966632304dde 3318:c5075ad5e3e9
    61 
    61 
    62     os.unlink(b)
    62     os.unlink(b)
    63     os.unlink(c)
    63     os.unlink(c)
    64     return r
    64     return r
    65 
    65 
    66 def checkunknown(repo, m2, wctx):
    66 def checkunknown(wctx, mctx):
    67     """
    67     """
    68     check for collisions between unknown files and files in m2
    68     check for collisions between unknown files and files in m2
    69     """
    69     """
       
    70     man = mctx.manifest()
    70     for f in wctx.unknown():
    71     for f in wctx.unknown():
    71         if f in m2:
    72         if f in man:
    72             if repo.file(f).cmp(m2[f], repo.wread(f)):
    73             if mctx.filectx(f).cmp(wctx.filectx(f).data()):
    73                 raise util.Abort(_("'%s' already exists in the working"
    74                 raise util.Abort(_("'%s' already exists in the working"
    74                                    " dir and differs from remote") % f)
    75                                    " dir and differs from remote") % f)
    75 
    76 
    76 def forgetremoved(m2, wctx):
    77 def forgetremoved(wctx, mctx):
    77     """
    78     """
    78     Forget removed files
    79     Forget removed files
    79 
    80 
    80     If we're jumping between revisions (as opposed to merging), and if
    81     If we're jumping between revisions (as opposed to merging), and if
    81     neither the working directory nor the target rev has the file,
    82     neither the working directory nor the target rev has the file,
    83     dirstate from listing the file when it is no longer in the
    84     dirstate from listing the file when it is no longer in the
    84     manifest.
    85     manifest.
    85     """
    86     """
    86 
    87 
    87     action = []
    88     action = []
    88 
    89     man = mctx.manifest()
    89     for f in wctx.deleted() + wctx.removed():
    90     for f in wctx.deleted() + wctx.removed():
    90         if f not in m2:
    91         if f not in man:
    91             action.append((f, "f"))
    92             action.append((f, "f"))
    92 
    93 
    93     return action
    94     return action
    94 
    95 
    95 def nonoverlap(d1, d2):
    96 def nonoverlap(d1, d2):
   381 
   382 
   382     if branchmerge and not forcemerge:
   383     if branchmerge and not forcemerge:
   383         if wc.modified() or wc.added() or wc.removed():
   384         if wc.modified() or wc.added() or wc.removed():
   384             raise util.Abort(_("outstanding uncommitted changes"))
   385             raise util.Abort(_("outstanding uncommitted changes"))
   385 
   386 
   386     m1 = wc.manifest()
       
   387     m2 = p2.manifest()
       
   388 
       
   389     # resolve the manifest to determine which files
   387     # resolve the manifest to determine which files
   390     # we care about merging
   388     # we care about merging
   391     repo.ui.note(_("resolving manifests\n"))
   389     repo.ui.note(_("resolving manifests\n"))
   392     repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") %
   390     repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") %
   393                   (overwrite, branchmerge, bool(partial)))
   391                   (overwrite, branchmerge, bool(partial)))
   394     repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa))
   392     repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa))
   395 
   393 
   396     action = []
   394     action = []
   397 
   395 
   398     if not force:
   396     if not force:
   399         checkunknown(repo, m2, wc)
   397         checkunknown(wc, p2)
   400     if not branchmerge:
   398     if not branchmerge:
   401         action += forgetremoved(m2, wc)
   399         action += forgetremoved(wc, p2)
   402 
   400 
   403     action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
   401     action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
   404 
   402 
   405     ### apply phase
   403     ### apply phase
   406 
   404