def search_thread(self, q, tgts, copy): hglib.invalidaterepo(self.repo) srcs = [] audit_path = util.path_auditor(self.repo.root) m = cmdutil.match(self.repo) for abs in self.repo.walk(m): target = self.repo.wjoin(abs) good = True try: audit_path(abs) except: good = False status = self.repo.dirstate[abs] if (not good or not os.path.lexists(target) or (os.path.isdir(target) and not os.path.islink(target))): srcs.append(abs) elif copy and status == 'n': # looking for copies, so any revisioned file is a # potential source (yes, this will be expensive) # Added and removed files are not considered as copy # sources. srcs.append(abs) if copy: simularity = 1.0 else: simularity = self.adjustment.get_value() / 100.0; gen = similar.findrenames(self.repo, tgts, srcs, simularity) for old, new, score in gen: q.put( [old, new, '%d%%' % (score*100)] )
def _findrenames(repo, uipathfn, added, removed, similarity): """Find what files in added are really moved files. Any file named in removed that is at least similarity% similar to a file in added is seen as a rename. """ renames = {} if similarity > 0: for src, dst, score in similar.findrenames(repo, added, removed, similarity): if repo.ui.verbose: repo.ui.status( _(b'detected move of %s as %s (%d%% similar)\n') % (uipathfn(src), uipathfn(dst), score * 100)) renames[dst] = src if renames: repo.ui.status(_(b'detected move of %d files\n') % len(renames)) return renames
def _findrenames(repo, matcher, added, removed, similarity): """Find what files in added are really moved files. Any file named in removed that is at least similarity% similar to a file in added is seen as a rename. """ renames = {} if similarity > 0: for src, dst, score in similar.findrenames( repo, added, removed, similarity): if repo.ui.verbose: repo.ui.status( _('detected move of %s as %s (%d%% similar)\n') % ( matcher.rel(src), matcher.rel(dst), score * 100)) renames[dst] = src if renames: repo.ui.status(_('detected move of %d files\n') % len(renames)) return renames