def get_search_results(self, req, query, filters): if 'repo' not in filters: return repo = self.env.get_repository(authname=req.authname) if not isinstance(query, list): query = query.split() query = [q.lower() for q in query] db = self.env.get_db_cnx() include, excludes = self._get_filters() to_unicode = Mimeview(self.env).to_unicode # Use indexer if possible, otherwise fall back on brute force search. try: from tracreposearch.indexer import Indexer self.indexer = Indexer(self.env) self.indexer.reindex() walker = lambda repo, query: [ repo.get_node(filename) for filename in self.indexer.find_words(query) ] except TracError, e: self.env.log.warning(e) self.env.log.warning('Falling back on full repository walk') def full_walker(repo, query): for node in self.walk_repo(repo): # Search content matched = 1 content = node.get_content() if not content: continue content = to_unicode(content.read().lower(), node.get_content_type()) for term in query: if term not in content: matched = 0 break if matched: yield node walker = full_walker