def run(self, index_project=False):
        """Runs the cindex command.

        Once this starts running, it will not listen to other calls until the
        index is finished running.

        Args:
            index_project: If true, the index will be generated from folders
                used by the project. The csearchindex file location must be set
                in the project settings when set to True.
        """
        if self._is_running:
            return
        self._is_running = True
        self.window.active_view().set_status('YetAnotherCodeSearch',
                                             'cindex (starting)')
        self._total_indexed = 0

        try:
            s = settings.get_project_settings(
                self.window.project_data(),
                self.window.project_file_name(),
                index_project_folders=index_project)
            _CindexListThread(self,
                              path_cindex=s.cindex_path,
                              index_filename=s.index_filename,
                              paths_to_index=s.paths_to_index).start()
        except Exception as e:
            self._finish(err=e)
    def run(self, index_project=False):
        """Runs the cindex command.

        Once this starts running, it will not listen to other calls until the
        index is finished running.

        Args:
            index_project: If true, the index will be generated from folders
                used by the project. The csearchindex file location must be set
                in the project settings when set to True.
        """
        if self._is_running:
            return
        self._is_running = True
        self.window.active_view().set_status('YetAnotherCodeSearch',
                                             'cindex (starting)')
        self._total_indexed = 0

        try:
            s = settings.get_project_settings(
                self.window.project_data(),
                index_project_folders=index_project)
            _CindexListThread(self,
                              path_cindex=s.cindex_path,
                              index_filename=s.index_filename,
                              paths_to_index=s.paths_to_index).start()
        except Exception as e:
            self._finish(err=e)
    def _on_search(self, result):
        self._last_search = result

        view = self._get_results_view()
        self._write_message('Searching for "{0}"\n\n'.format(result), view=view, erase=True)
        view.set_status("YetAnotherCodeSearch", "Searching...")
        try:
            s = settings.get_project_settings(self.window.project_data())
            _CsearchThread(
                parser.parse_query(result), self, path_csearch=s.csearch_path, index_filename=s.index_filename
            ).start()
        except Exception as e:
            self._finish(None, err=e)
    def test_get_project_settings_when_indexing_project_and_no_index_set(
            self, mock_isfile, mock_expanduser, mock_abspath):
        mock_expanduser.side_effect = lambda x: x.replace('~', 'home/you')
        mock_abspath.side_effect = lambda x: '/abs/' + x
        mock_isfile.return_value = True

        del self.project_data['code_search']
        s = settings.get_project_settings(self.project_data,
                                          index_project_folders=True)
        self.assertEquals(s.paths_to_index,
                          ['/abs/home/you/bar', '/abs/home/you/foo'])
        self.assertIsNone(s.index_filename)
        self.assertEquals(os.path.basename(s.cindex_path), 'cindex')
        self.assertEquals(os.path.basename(s.csearch_path), 'csearch')
    def _on_search(self, result):
        self._last_search = result

        view = self._get_results_view()
        self._write_message('Searching for "{0}"\n\n'.format(result),
                            view=view, erase=True)
        view.set_status('YetAnotherCodeSearch', 'Searching...')
        try:
            s = settings.get_project_settings(self.window.project_data())
            _CsearchThread(parser.parse_query(result), self,
                           path_csearch=s.csearch_path,
                           index_filename=s.index_filename).start()
        except Exception as e:
            self._finish(None, err=e)
    def test_get_project_settings(self, mock_isfile, mock_expanduser,
                                  mock_abspath):
        mock_expanduser.side_effect = lambda x: x.replace('~', 'home/you')
        mock_abspath.side_effect = lambda x: '/abs/' + x
        mock_isfile.return_value = True

        s = settings.get_project_settings(self.project_data,
                                          index_project_folders=True)
        self.assertEquals(s.paths_to_index,
                          ['/abs/home/you/bar', '/abs/home/you/foo'])
        self.assertEquals(s.index_filename, '/abs/csearchindex')
        # Test the basename here incase someone is testing and has their own
        # user settings.
        self.assertEquals(os.path.basename(s.cindex_path), 'cindex')
        self.assertEquals(os.path.basename(s.csearch_path), 'csearch')
    def test_get_project_settings_when_indexing_project_and_no_index_set(
            self, mock_isfile, mock_expanduser, mock_abspath, mock_isabs):
        mock_expanduser.side_effect = expanduser
        mock_abspath.side_effect = abspath
        mock_isfile.return_value = True
        mock_isabs.side_effect = lambda x: x.startswith('/')

        del self.project_data['code_search']
        s = settings.get_project_settings(self.project_data,
                                          self.project_file_name,
                                          index_project_folders=True)
        self.assertEquals(s.paths_to_index, ['/abs/home/you/bar',
                                             '/abs/home/you/foo',
                                             '/abs/project/src'])
        self.assertIsNone(s.index_filename)
        self.assertEquals(os.path.basename(s.cindex_path), 'cindex')
        self.assertEquals(os.path.basename(s.csearch_path), 'csearch')
    def test_get_project_settings(self, mock_isfile, mock_expanduser,
                                  mock_abspath, mock_isabs):
        mock_expanduser.side_effect = expanduser
        mock_abspath.side_effect = abspath
        mock_isfile.return_value = True
        mock_isabs.side_effect = lambda x: x.startswith('/')

        s = settings.get_project_settings(self.project_data,
                                          self.project_file_name,
                                          index_project_folders=True)
        self.assertEquals(s.paths_to_index, ['/abs/home/you/bar',
                                             '/abs/home/you/foo',
                                             '/abs/project/src'])
        self.assertEquals(s.index_filename, '/abs/csearchindex')
        # Test the basename here incase someone is testing and has their own
        # user settings.
        self.assertEquals(os.path.basename(s.cindex_path), 'cindex')
        self.assertEquals(os.path.basename(s.csearch_path), 'csearch')
 def test_raises_exception_if_index_file_is_missing(self, mock_isfile):
     mock_isfile.return_value = False
     with self.assertRaises(Exception):
         settings.get_project_settings(self.project_data)