changeset 3916:ba08786c49ef beta

fixed #850 Whoosh indexer should use the default revision flag to make index
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 30 May 2013 00:29:23 +0200
parents a42bfe8a9335
children 35c0c62583cd
files rhodecode/lib/indexers/daemon.py
diffstat 1 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/indexers/daemon.py	Thu May 30 00:01:16 2013 +0200
+++ b/rhodecode/lib/indexers/daemon.py	Thu May 30 00:29:23 2013 +0200
@@ -41,6 +41,7 @@
 
 from rhodecode.config.conf import INDEX_EXTENSIONS
 from rhodecode.model.scm import ScmModel
+from rhodecode.model.db import Repository
 from rhodecode.lib.utils2 import safe_unicode, safe_str
 from rhodecode.lib.indexers import SCHEMA, IDX_NAME, CHGSETS_SCHEMA, \
     CHGSET_IDX_NAME
@@ -98,17 +99,29 @@
         self.initial = True
         if not os.path.isdir(self.index_location):
             os.makedirs(self.index_location)
-            log.info('Cannot run incremental index since it does not'
-                     ' yet exist running full build')
+            log.info('Cannot run incremental index since it does not '
+                     'yet exist running full build')
         elif not exists_in(self.index_location, IDX_NAME):
-            log.info('Running full index build as the file content'
-                     ' index does not exist')
+            log.info('Running full index build as the file content '
+                     'index does not exist')
         elif not exists_in(self.index_location, CHGSET_IDX_NAME):
-            log.info('Running full index build as the changeset'
-                     ' index does not exist')
+            log.info('Running full index build as the changeset '
+                     'index does not exist')
         else:
             self.initial = False
 
+    def _get_index_revision(self, repo):
+        db_repo = Repository.get_by_repo_name(repo.name)
+        landing_rev = 'tip'
+        if db_repo:
+            landing_rev = db_repo.landing_rev
+        return landing_rev
+
+    def _get_index_changeset(self, repo):
+        index_rev = self._get_index_revision(repo)
+        cs = repo.get_changeset(index_rev)
+        return cs
+
     def get_paths(self, repo):
         """
         recursive walk in root dir and return a set of all path in that dir
@@ -116,8 +129,8 @@
         """
         index_paths_ = set()
         try:
-            tip = repo.get_changeset('tip')
-            for _topnode, _dirs, files in tip.walk('/'):
+            cs = self._get_index_changeset(repo)
+            for _topnode, _dirs, files in cs.walk('/'):
                 for f in files:
                     index_paths_.add(jn(safe_str(repo.path), safe_str(f.path)))
 
@@ -128,7 +141,8 @@
 
     def get_node(self, repo, path):
         n_path = path[len(repo.path) + 1:]
-        node = repo.get_changeset().get_node(n_path)
+        cs = self._get_index_changeset(repo)
+        node = cs.get_node(n_path)
         return node
 
     def get_node_mtime(self, node):
@@ -222,7 +236,8 @@
         :param repo: instance of vcs repo
         """
         i_cnt = iwc_cnt = 0
-        log.debug('building index for [%s]' % repo.path)
+        log.debug('building index for %s @revision:%s' % (repo.path,
+                                                self._get_index_revision(repo)))
         for idx_path in self.get_paths(repo):
             i, iwc = self.add_doc(file_idx_writer, idx_path, repo, repo_name)
             i_cnt += i
@@ -276,7 +291,7 @@
                                                 repo_name, repo, start_id)
                         writer_is_dirty = True
                 log.debug('indexed %s changesets for repo %s' % (
-                             indexed_total, repo_name)
+                          indexed_total, repo_name)
                 )
             finally:
                 if writer_is_dirty:
@@ -284,7 +299,6 @@
                     writer.commit(merge=True)
                     log.debug('>>> FINISHED REBUILDING CHANGESET INDEX <<<')
                 else:
-                    writer.cancel
                     log.debug('>> NOTHING TO COMMIT TO CHANGESET INDEX<<')
 
     def update_file_index(self):