mercurial/copies.py
changeset 9467 4c041f1ee1b4
parent 9102 bbc78cb1bf15
child 10179 83cfa1baf8ad
equal deleted inserted replaced
9466:1214c64c592b 9467:4c041f1ee1b4
   142                         if c1 != ca or c2 != ca: # merge needed?
   142                         if c1 != ca or c2 != ca: # merge needed?
   143                             copy[f] = of
   143                             copy[f] = of
   144             elif of in ma:
   144             elif of in ma:
   145                 diverge.setdefault(of, []).append(f)
   145                 diverge.setdefault(of, []).append(f)
   146 
   146 
   147     repo.ui.debug(_("  searching for copies back to rev %d\n") % limit)
   147     repo.ui.debug("  searching for copies back to rev %d\n" % limit)
   148 
   148 
   149     u1 = _nonoverlap(m1, m2, ma)
   149     u1 = _nonoverlap(m1, m2, ma)
   150     u2 = _nonoverlap(m2, m1, ma)
   150     u2 = _nonoverlap(m2, m1, ma)
   151 
   151 
   152     if u1:
   152     if u1:
   153         repo.ui.debug(_("  unmatched files in local:\n   %s\n")
   153         repo.ui.debug("  unmatched files in local:\n   %s\n"
   154                       % "\n   ".join(u1))
   154                       % "\n   ".join(u1))
   155     if u2:
   155     if u2:
   156         repo.ui.debug(_("  unmatched files in other:\n   %s\n")
   156         repo.ui.debug("  unmatched files in other:\n   %s\n"
   157                       % "\n   ".join(u2))
   157                       % "\n   ".join(u2))
   158 
   158 
   159     for f in u1:
   159     for f in u1:
   160         checkcopies(f, m1, m2)
   160         checkcopies(f, m1, m2)
   161     for f in u2:
   161     for f in u2:
   167             del diverge[of] # not actually divergent
   167             del diverge[of] # not actually divergent
   168         else:
   168         else:
   169             diverge2.update(fl) # reverse map for below
   169             diverge2.update(fl) # reverse map for below
   170 
   170 
   171     if fullcopy:
   171     if fullcopy:
   172         repo.ui.debug(_("  all copies found (* = to merge, ! = divergent):\n"))
   172         repo.ui.debug("  all copies found (* = to merge, ! = divergent):\n")
   173         for f in fullcopy:
   173         for f in fullcopy:
   174             note = ""
   174             note = ""
   175             if f in copy: note += "*"
   175             if f in copy: note += "*"
   176             if f in diverge2: note += "!"
   176             if f in diverge2: note += "!"
   177             repo.ui.debug("   %s -> %s %s\n" % (f, fullcopy[f], note))
   177             repo.ui.debug("   %s -> %s %s\n" % (f, fullcopy[f], note))
   178     del diverge2
   178     del diverge2
   179 
   179 
   180     if not fullcopy or not checkdirs:
   180     if not fullcopy or not checkdirs:
   181         return copy, diverge
   181         return copy, diverge
   182 
   182 
   183     repo.ui.debug(_("  checking for directory renames\n"))
   183     repo.ui.debug("  checking for directory renames\n")
   184 
   184 
   185     # generate a directory move map
   185     # generate a directory move map
   186     d1, d2 = _dirs(m1), _dirs(m2)
   186     d1, d2 = _dirs(m1), _dirs(m2)
   187     invalid = set()
   187     invalid = set()
   188     dirmove = {}
   188     dirmove = {}
   214 
   214 
   215     if not dirmove:
   215     if not dirmove:
   216         return copy, diverge
   216         return copy, diverge
   217 
   217 
   218     for d in dirmove:
   218     for d in dirmove:
   219         repo.ui.debug(_("  dir %s -> %s\n") % (d, dirmove[d]))
   219         repo.ui.debug("  dir %s -> %s\n" % (d, dirmove[d]))
   220 
   220 
   221     # check unaccounted nonoverlapping files against directory moves
   221     # check unaccounted nonoverlapping files against directory moves
   222     for f in u1 + u2:
   222     for f in u1 + u2:
   223         if f not in fullcopy:
   223         if f not in fullcopy:
   224             for d in dirmove:
   224             for d in dirmove:
   225                 if f.startswith(d):
   225                 if f.startswith(d):
   226                     # new file added in a directory that was moved, move it
   226                     # new file added in a directory that was moved, move it
   227                     df = dirmove[d] + f[len(d):]
   227                     df = dirmove[d] + f[len(d):]
   228                     if df not in copy:
   228                     if df not in copy:
   229                         copy[f] = df
   229                         copy[f] = df
   230                         repo.ui.debug(_("  file %s -> %s\n") % (f, copy[f]))
   230                         repo.ui.debug("  file %s -> %s\n" % (f, copy[f]))
   231                     break
   231                     break
   232 
   232 
   233     return copy, diverge
   233     return copy, diverge