hgext/automv.py
changeset 41660 f89aad980025
parent 34971 38637dd39cfd
child 42543 abd902a85040
equal deleted inserted replaced
41659:ecf7f4ef52fb 41660:f89aad980025
    62         if not 0 <= threshold <= 100:
    62         if not 0 <= threshold <= 100:
    63             raise error.Abort(_('automv.similarity must be between 0 and 100'))
    63             raise error.Abort(_('automv.similarity must be between 0 and 100'))
    64         if threshold > 0:
    64         if threshold > 0:
    65             match = scmutil.match(repo[None], pats, opts)
    65             match = scmutil.match(repo[None], pats, opts)
    66             added, removed = _interestingfiles(repo, match)
    66             added, removed = _interestingfiles(repo, match)
    67             renames = _findrenames(repo, match, added, removed,
    67             uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
       
    68             renames = _findrenames(repo, uipathfn, added, removed,
    68                                    threshold / 100.0)
    69                                    threshold / 100.0)
    69 
    70 
    70     with repo.wlock():
    71     with repo.wlock():
    71         if renames is not None:
    72         if renames is not None:
    72             scmutil._markchanges(repo, (), (), renames)
    73             scmutil._markchanges(repo, (), (), renames)
    87     # remove the copy files for which we already have copy info
    88     # remove the copy files for which we already have copy info
    88     added = [f for f in added if f not in copy]
    89     added = [f for f in added if f not in copy]
    89 
    90 
    90     return added, removed
    91     return added, removed
    91 
    92 
    92 def _findrenames(repo, matcher, added, removed, similarity):
    93 def _findrenames(repo, uipathfn, added, removed, similarity):
    93     """Find what files in added are really moved files.
    94     """Find what files in added are really moved files.
    94 
    95 
    95     Any file named in removed that is at least similarity% similar to a file
    96     Any file named in removed that is at least similarity% similar to a file
    96     in added is seen as a rename.
    97     in added is seen as a rename.
    97 
    98 
   101         for src, dst, score in similar.findrenames(
   102         for src, dst, score in similar.findrenames(
   102                 repo, added, removed, similarity):
   103                 repo, added, removed, similarity):
   103             if repo.ui.verbose:
   104             if repo.ui.verbose:
   104                 repo.ui.status(
   105                 repo.ui.status(
   105                     _('detected move of %s as %s (%d%% similar)\n') % (
   106                     _('detected move of %s as %s (%d%% similar)\n') % (
   106                         matcher.rel(src), matcher.rel(dst), score * 100))
   107                         uipathfn(src), uipathfn(dst), score * 100))
   107             renames[dst] = src
   108             renames[dst] = src
   108     if renames:
   109     if renames:
   109         repo.ui.status(_('detected move of %d files\n') % len(renames))
   110         repo.ui.status(_('detected move of %d files\n') % len(renames))
   110     return renames
   111     return renames