mercurial/copies.py
changeset 46159 929054848d6c
parent 46158 1fcfff09cac5
child 46161 3a0c41336961
equal deleted inserted replaced
46158:1fcfff09cac5 46159:929054848d6c
   194 
   194 
   195     HASCOPIESINFO = flagutil.REVIDX_HASCOPIESINFO
   195     HASCOPIESINFO = flagutil.REVIDX_HASCOPIESINFO
   196 
   196 
   197     changelogrevision = cl.changelogrevision
   197     changelogrevision = cl.changelogrevision
   198 
   198 
   199     alwaysmatch = match.always()
   199     if rustmod is not None:
   200 
       
   201     if rustmod is not None and alwaysmatch:
       
   202 
   200 
   203         def revinfo(rev):
   201         def revinfo(rev):
   204             p1, p2 = parents(rev)
   202             p1, p2 = parents(rev)
   205             if flags(rev) & HASCOPIESINFO:
   203             if flags(rev) & HASCOPIESINFO:
   206                 raw = changelogrevision(rev)._sidedata.get(sidedatamod.SD_FILES)
   204                 raw = changelogrevision(rev)._sidedata.get(sidedatamod.SD_FILES)
   354     It returns the aggregated copies information for `targetrev`.
   352     It returns the aggregated copies information for `targetrev`.
   355     """
   353     """
   356 
   354 
   357     alwaysmatch = match.always()
   355     alwaysmatch = match.always()
   358 
   356 
   359     if rustmod is not None and alwaysmatch:
   357     if rustmod is not None:
   360         final_copies = rustmod.combine_changeset_copies(
   358         final_copies = rustmod.combine_changeset_copies(
   361             list(revs), children_count, targetrev, revinfo, isancestor
   359             list(revs), children_count, targetrev, revinfo, isancestor
   362         )
   360         )
   363     else:
   361     else:
   364         isancestor = cached_is_ancestor(isancestor)
   362         isancestor = cached_is_ancestor(isancestor)
   394                     if parent == 1:
   392                     if parent == 1:
   395                         childcopies = changes.copied_from_p1
   393                         childcopies = changes.copied_from_p1
   396                     elif parent == 2:
   394                     elif parent == 2:
   397                         childcopies = changes.copied_from_p2
   395                         childcopies = changes.copied_from_p2
   398 
   396 
   399                     if not alwaysmatch:
       
   400                         childcopies = {
       
   401                             dst: src
       
   402                             for dst, src in childcopies.items()
       
   403                             if match(dst)
       
   404                         }
       
   405                     if childcopies:
   397                     if childcopies:
   406                         newcopies = copies.copy()
   398                         newcopies = copies.copy()
   407                         for dest, source in pycompat.iteritems(childcopies):
   399                         for dest, source in pycompat.iteritems(childcopies):
   408                             prev = copies.get(source)
   400                             prev = copies.get(source)
   409                             if prev is not None and prev[1] is not None:
   401                             if prev is not None and prev[1] is not None:
   445         # filter out internal details and return a {dest: source mapping}
   437         # filter out internal details and return a {dest: source mapping}
   446         final_copies = {}
   438         final_copies = {}
   447         for dest, (tt, source) in all_copies[targetrev].items():
   439         for dest, (tt, source) in all_copies[targetrev].items():
   448             if source is not None:
   440             if source is not None:
   449                 final_copies[dest] = source
   441                 final_copies[dest] = source
       
   442     if not alwaysmatch:
       
   443         for filename in list(final_copies.keys()):
       
   444             if not match(filename):
       
   445                 del final_copies[filename]
   450     return final_copies
   446     return final_copies
   451 
   447 
   452 
   448 
   453 def _merge_copies_dict(minor, major, isancestor, changes):
   449 def _merge_copies_dict(minor, major, isancestor, changes):
   454     """merge two copies-mapping together, minor and major
   450     """merge two copies-mapping together, minor and major