[entropy.client] move _enabled_repos to a property, allow lazy loading

This commit is contained in:
Fabio Erculiani
2013-12-12 18:35:17 +01:00
parent 88ca752724
commit aa4e2441be
3 changed files with 33 additions and 22 deletions

View File

@@ -753,7 +753,6 @@ class Client(Singleton, TextInterface, LoadersMixin, CacheMixin,
self._can_run_sys_set_hooks = False
const_debug_write(__name__, "debug enabled")
self._enabled_repos = []
self.safe_mode = 0
self._indexing = indexing
self._repo_validation = repo_validation
@@ -771,6 +770,9 @@ class Client(Singleton, TextInterface, LoadersMixin, CacheMixin,
self._real_logger = None
self._real_logger_lock = threading.Lock()
self._real_enabled_repos = None
self._real_enabled_repos_lock = threading.RLock()
# class init
LoadersMixin.__init__(self)
@@ -803,11 +805,6 @@ class Client(Singleton, TextInterface, LoadersMixin, CacheMixin,
elif (not entropy.tools.is_user_in_entropy_group()) and not user_xcache:
self.xcache = False
if self._repo_validation:
self._validate_repositories()
else:
self._enabled_repos.extend(self._settings['repositories']['order'])
# Add Entropy Resources Lock post-acquire hook that cleans
# repository caches.
hook_ref = EntropyResourcesLock.add_post_acquire_hook(
@@ -895,6 +892,23 @@ class Client(Singleton, TextInterface, LoadersMixin, CacheMixin,
return self._real_logger
@property
def _enabled_repos(self):
if self._real_enabled_repos is None:
with self._real_enabled_repos_lock:
if self._real_enabled_repos is None:
self._real_enabled_repos = []
if self._repo_validation:
self._validate_repositories(
enabled_repos = self._real_enabled_repos)
else:
self._real_enabled_repos.extend(
self._settings['repositories']['order'])
return self._real_enabled_repos
def _resources_post_hook(self):
"""
Hook running after Entropy Resources Lock acquisition.

View File

@@ -58,7 +58,10 @@ class RepositoryMixin:
def __get_repository_cache_key(self, repository_id):
return (repository_id, etpConst['systemroot'],)
def _validate_repositories(self, quiet = False):
def _validate_repositories(self, quiet = False, enabled_repos = None):
if enabled_repos is None:
enabled_repos = self._enabled_repos
StatusInterface().clear()
self._repo_error_messages_cache.clear()
@@ -86,7 +89,7 @@ class RepositoryMixin:
t2 = _("Please update your repositories now in order to remove this message!")
del self._enabled_repos[:]
del enabled_repos[:]
_enabled_repos = []
all_repos = self._settings['repositories']['order'][:]
for repoid in self._settings['repositories']['order']:
@@ -143,7 +146,7 @@ class RepositoryMixin:
continue
# write back correct _enabled_repos
self._enabled_repos.extend(_enabled_repos)
enabled_repos.extend(_enabled_repos)
def _init_generic_temp_repository(self, repoid, description,
package_mirrors = None, temp_file = None):

View File

@@ -27,8 +27,6 @@ class EntropyRepositoryTest(unittest.TestCase):
xcache = False, repo_validation = False)
self.Spm = self.Client.Spm()
self.test_db_name = "test_suite"
self.client_sysset_plugin_id = \
etpConst['system_settings_plugins_ids']['client_plugin']
self.test_db = self.__open_test_db(":memory:")
# GenericRepository supports package masking if this property is set
self.test_db.enable_mask_filter = True
@@ -400,9 +398,8 @@ class EntropyRepositoryTest(unittest.TestCase):
self.test_db.atomMatch(pkg_atom))
# test package masking
plug_id = self.client_sysset_plugin_id
masking_validation = \
self._settings[plug_id]['masking_validation']['cache']
self.Client.ClientSettings()['masking_validation']['cache']
f_match_mask = (1, self.test_db_name,)
self._settings['live_packagemasking']['mask_matches'].add(
@@ -465,9 +462,8 @@ class EntropyRepositoryTest(unittest.TestCase):
self.test_db.atomMatch(pkg_atom))
# test package masking
plug_id = self.client_sysset_plugin_id
masking_validation = \
self._settings[plug_id]['masking_validation']['cache']
masking_validation = self.Client.ClientSettings(
)['masking_validation']['cache']
f_match_mask = (1, self.test_db_name,)
self._settings['live_packagemasking']['mask_matches'].add(
@@ -504,9 +500,8 @@ class EntropyRepositoryTest(unittest.TestCase):
self.test_db.atomMatch(pkg_atom))
# test package masking
plug_id = self.client_sysset_plugin_id
masking_validation = \
self._settings[plug_id]['masking_validation']['cache']
masking_validation = self.Client.ClientSettings(
)['masking_validation']['cache']
f_match_mask = (1, self.test_db_name,)
self._settings['live_packagemasking']['mask_matches'].add(
@@ -552,9 +547,8 @@ class EntropyRepositoryTest(unittest.TestCase):
self.test_db.atomMatch(pkg_atom))
# test package masking
plug_id = self.client_sysset_plugin_id
masking_validation = \
self._settings[plug_id]['masking_validation']['cache']
masking_validation = self.Client.ClientSettings(
)['masking_validation']['cache']
f_match_mask = (1, self.test_db_name,)
self._settings['live_packagemasking']['mask_matches'].add(