mercurial/copies.py
changeset 26657 1ae898cfe857
parent 26656 3e3d783b0d59
child 26658 aabfa0fb7e3e
equal deleted inserted replaced
26656:3e3d783b0d59 26657:1ae898cfe857
   326     addedinm1 = m1.filesnotin(ma)
   326     addedinm1 = m1.filesnotin(ma)
   327     addedinm2 = m2.filesnotin(ma)
   327     addedinm2 = m2.filesnotin(ma)
   328     u1, u2 = _computenonoverlap(repo, c1, c2, addedinm1, addedinm2)
   328     u1, u2 = _computenonoverlap(repo, c1, c2, addedinm1, addedinm2)
   329 
   329 
   330     for f in u1:
   330     for f in u1:
   331         getfctx = _makegetfctx(c1)
   331         checkcopies(c1, f, m1, m2, ca, limit, diverge, copy1, fullcopy1)
   332         checkcopies(getfctx, f, m1, m2, ca, limit, diverge, copy1, fullcopy1)
       
   333 
   332 
   334     for f in u2:
   333     for f in u2:
   335         getfctx = _makegetfctx(c2)
   334         checkcopies(c2, f, m2, m1, ca, limit, diverge, copy2, fullcopy2)
   336         checkcopies(getfctx, f, m2, m1, ca, limit, diverge, copy2, fullcopy2)
       
   337 
   335 
   338     copy = dict(copy1.items() + copy2.items())
   336     copy = dict(copy1.items() + copy2.items())
   339     movewithdir = dict(movewithdir1.items() + movewithdir2.items())
   337     movewithdir = dict(movewithdir1.items() + movewithdir2.items())
   340     fullcopy = dict(fullcopy1.items() + fullcopy2.items())
   338     fullcopy = dict(fullcopy1.items() + fullcopy2.items())
   341 
   339 
   357     if bothnew:
   355     if bothnew:
   358         repo.ui.debug("  unmatched files new in both:\n   %s\n"
   356         repo.ui.debug("  unmatched files new in both:\n   %s\n"
   359                       % "\n   ".join(bothnew))
   357                       % "\n   ".join(bothnew))
   360     bothdiverge, _copy, _fullcopy = {}, {}, {}
   358     bothdiverge, _copy, _fullcopy = {}, {}, {}
   361     for f in bothnew:
   359     for f in bothnew:
   362         getfctx = _makegetfctx(c1)
   360         checkcopies(c1, f, m1, m2, ca, limit, bothdiverge, _copy, _fullcopy)
   363         checkcopies(getfctx, f, m1, m2, ca, limit, bothdiverge,
   361         checkcopies(c2, f, m2, m1, ca, limit, bothdiverge, _copy, _fullcopy)
   364                     _copy, _fullcopy)
       
   365         getfctx = _makegetfctx(c2)
       
   366         checkcopies(getfctx, f, m2, m1, ca, limit, bothdiverge,
       
   367                     _copy, _fullcopy)
       
   368     for of, fl in bothdiverge.items():
   362     for of, fl in bothdiverge.items():
   369         if len(fl) == 2 and fl[0] == fl[1]:
   363         if len(fl) == 2 and fl[0] == fl[1]:
   370             copy[fl[0]] = of # not actually divergent, just matching renames
   364             copy[fl[0]] = of # not actually divergent, just matching renames
   371 
   365 
   372     if fullcopy and repo.ui.debugflag:
   366     if fullcopy and repo.ui.debugflag:
   442                                        "dst: '%s'\n") % (f, df))
   436                                        "dst: '%s'\n") % (f, df))
   443                     break
   437                     break
   444 
   438 
   445     return copy, movewithdir, diverge, renamedelete
   439     return copy, movewithdir, diverge, renamedelete
   446 
   440 
   447 def checkcopies(getfctx, f, m1, m2, ca, limit, diverge, copy, fullcopy):
   441 def checkcopies(ctx, f, m1, m2, ca, limit, diverge, copy, fullcopy):
   448     """
   442     """
   449     check possible copies of f from m1 to m2
   443     check possible copies of f from m1 to m2
   450 
   444 
   451     getfctx = function accepting (filename, node) that returns a filectx.
   445     ctx = starting context for f in m1
   452     f = the filename to check
   446     f = the filename to check
   453     m1 = the source manifest
   447     m1 = the source manifest
   454     m2 = the destination manifest
   448     m2 = the destination manifest
   455     ca = the changectx of the common ancestor
   449     ca = the changectx of the common ancestor
   456     limit = the rev number to not search beyond
   450     limit = the rev number to not search beyond
   458     copy = record all non-divergent copies in this dict
   452     copy = record all non-divergent copies in this dict
   459     fullcopy = record all copies in this dict
   453     fullcopy = record all copies in this dict
   460     """
   454     """
   461 
   455 
   462     ma = ca.manifest()
   456     ma = ca.manifest()
       
   457     getfctx = _makegetfctx(ctx)
   463 
   458 
   464     def _related(f1, f2, limit):
   459     def _related(f1, f2, limit):
   465         # Walk back to common ancestor to see if the two files originate
   460         # Walk back to common ancestor to see if the two files originate
   466         # from the same file. Since workingfilectx's rev() is None it messes
   461         # from the same file. Since workingfilectx's rev() is None it messes
   467         # up the integer comparison logic, hence the pre-step check for
   462         # up the integer comparison logic, hence the pre-step check for