Skip to content

Commit 4c78c94

Browse files
committed
Remember if repositories were loaded
In libdnf5, the `repos_updated_and_loaded` bool attribute, which serves the same purpose, is private. Check if the repositories are loaded before making queries.
1 parent 52e3428 commit 4c78c94

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

pyanaconda/modules/payloads/payload/dnf/dnf_manager.py

+18-6
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ def __init__(self):
341341
self._download_location = None
342342
self._md_hashes = {}
343343
self._enabled_system_repositories = []
344+
self._repositories_loaded = False
344345
self._query_environments = None
345346
self._query_groups = None
346347

@@ -428,6 +429,7 @@ def reset_base(self):
428429
self._download_location = None
429430
self._md_hashes = {}
430431
self._enabled_system_repositories = []
432+
self._repositories_loaded = False
431433
log.debug("The DNF base has been reset.")
432434

433435
def configure_base(self, data: PackagesConfigurationData):
@@ -481,6 +483,9 @@ def default_environment(self):
481483

482484
@property
483485
def _environments(self):
486+
if not self._repositories_loaded:
487+
log.warning("There is no metadata about environments and groups!")
488+
return []
484489
if self._query_environments is None:
485490
self._query_environments = libdnf5.comps.EnvironmentQuery(self._base)
486491
return self._query_environments
@@ -570,6 +575,9 @@ def _get_environment_data(self, env) -> CompsEnvironmentData:
570575

571576
@property
572577
def _groups(self):
578+
if not self._repositories_loaded:
579+
log.warning("There is no metadata about environments and groups!")
580+
return []
573581
if self._query_groups is None:
574582
self._query_groups = libdnf5.comps.GroupQuery(self._base)
575583
return self._query_groups
@@ -781,9 +789,9 @@ def is_package_available(self, package_spec):
781789
:param package_spec: a package spec
782790
:return: True if the package can be installed, otherwise False
783791
"""
784-
#if not self._base.sack:
785-
# log.warning("There is no metadata about packages!")
786-
# return False
792+
if not self._repositories_loaded:
793+
log.warning("There is no metadata about packages!")
794+
return False
787795

788796
query = libdnf5.rpm.PackageQuery(self._base)
789797
query.filter_name([package_spec])
@@ -797,9 +805,9 @@ def match_available_packages(self, pattern):
797805
:param pattern: a pattern for package names
798806
:return: a list of matched package names
799807
"""
800-
#if not self._base.sack:
801-
# log.warning("There is no metadata about packages!")
802-
# return []
808+
if not self._repositories_loaded:
809+
log.warning("There is no metadata about packages!")
810+
return []
803811

804812
query = libdnf5.rpm.PackageQuery(self._base)
805813
query.filter_name([pattern], libdnf5.common.QueryCmp_GLOB)
@@ -1064,6 +1072,9 @@ def _create_repository(self, data: RepoConfigurationData):
10641072
:param RepoConfigurationData data: a repo configuration
10651073
return dnf.repo.Repo: a DNF repository
10661074
"""
1075+
if self._repositories_loaded:
1076+
raise RuntimeError("Cannot create a new repository. Repositories were already loaded.")
1077+
10671078
repo_sack = self._base.get_repo_sack()
10681079
repo = repo_sack.create_repo(data.name)
10691080
config = simplify_config(repo.get_config())
@@ -1253,6 +1264,7 @@ def load_repositories(self):
12531264
except RuntimeError as e:
12541265
log.warning(str(e))
12551266
raise MetadataError(str(e)) from None
1267+
self._repositories_loaded = True
12561268
log.info("Loaded repositories.")
12571269

12581270
def load_repomd_hashes(self):

0 commit comments

Comments
 (0)