Changeset 375

Show
Ignore:
Timestamp:
01/19/06 21:43:19 (3 years ago)
Author:
athomas
Message:

RepoSearchPlugin:

  • Correctly invalidate files no longer in the included set.
  • Fixed exception when include/exclude not provided.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • reposearchplugin/0.9/tracreposearch/indexer.py

    r371 r375  
    130130 
    131131    def need_reindex(self, repo): 
    132         result = not hasattr(self, 'meta') or
    133             repo.youngest_rev != int(self.meta.get('last-repo-rev', -1)) \ 
    134             or self.env.config.get('repo-search', 'include', '1') \ 
     132        return not hasattr(self, 'meta')
     133            or repo.youngest_rev != int(self.meta.get('last-repo-rev', -1)) \ 
     134            or self.env.config.get('repo-search', 'include', '') \ 
    135135               != self.meta.get('index-include', '') \ 
    136136            or self.env.config.get('repo-search', 'exclude', '') \ 
    137                != self.meta.get('index-exclude', '1') 
    138         return result 
     137               != self.meta.get('index-exclude', '') 
    139138    need_reindex = synchronized(need_reindex) 
    140139 
     
    155154    _bigram_search = synchronized(_bigram_search) 
    156155 
    157     def reindex_node(self, node): 
     156    def _reindex_node(self, node): 
    158157        def node_tokens(): 
    159158            for token in self._strip.finditer(node.get_content().read()): 
     
    185184        self.files[node.path] = node_words 
    186185        self.revs[node.path] = str(node.rev) 
    187     reindex_node = synchronized(reindex_node) 
     186 
     187    def _invalidate_file(self, file): 
     188        if file in self.files: 
     189            for word in self.files[file]: 
     190                word_files = self.words[word] 
     191                word_files.discard(file) 
     192                self.words[word] = word_files 
     193            self.env.log.debug("Invalidated stale index entry %s" % file) 
    188194 
    189195    def reindex(self, repo = None): 
     
    194200            self.env.log.debug('Indexing repository (either repository or indexing criteria have changed)') 
    195201            self._open_storage('c') 
     202            new_files = set() 
    196203            for node in TracRepoSearchPlugin(self.env).walk_repo(repo): 
    197204                if node.kind != Node.DIRECTORY: 
     
    199206                    if int(self.revs.get(node.path, -1)) != node.rev: 
    200207                        self.env.log.debug("Reindexing %s" % node.path) 
    201                         # Invalidate old index 
    202                         if node.path in self.files: 
    203                             for word in self.files[node.path]: 
    204                                 word_files = self.words[word] 
    205                                 word_files.discard(node.path) 
    206                                 self.words[word] = word_files 
    207                         self.reindex_node(node) 
     208                        self._invalidate_file(node.path) 
     209                        self._reindex_node(node) 
     210                new_files.add(node.path) 
     211             
     212            # All files that don't match the new filter criteria must be purged 
     213            # from the index 
     214            invalidated_files = set(self.files.keys()) 
     215            invalidated_files.difference_update(new_files) 
     216            for invalid in invalidated_files: 
     217                self._invalidate_file(invalid) 
    208218 
    209219            self.sync(repo) 
  • reposearchplugin/0.9/tracreposearch/search.py

    r371 r375  
    3535                    return 1 
    3636 
    37             return not include and not exclude 
     37            return not includes 
    3838 
    3939        def do_walk(path): 
     
    7272            self.indexer = Indexer(self.env) 
    7373            self.indexer.reindex(repo) 
    74             walker = lambda repo, query: [repo.get_node(filename) for filename in self.indexer.find_words(query)] 
     74            walker = lambda repo, query: [repo.get_node(filename) for filename 
     75                                          in self.indexer.find_words(query)] 
    7576        except TracError: 
    7677            def full_walker(repo, query):