[entropy.db] implement conditional dependencies support, break API on EntropyRepositoryBase
This commit is contained in:
@@ -433,7 +433,8 @@ def _graph_package(match, package, entropy_intf, show_complete = False):
|
||||
|
||||
# deps
|
||||
repodb = entropy_intf.open_repository(repo_id)
|
||||
deps = repodb.retrieveDependencies(pkg_id, extended = True)
|
||||
deps = repodb.retrieveDependencies(pkg_id, extended = True,
|
||||
resolve_conditional_deps = False)
|
||||
|
||||
graph_deps = []
|
||||
for dep, x_dep_type in sorted(deps, key = depsorter):
|
||||
@@ -1628,7 +1629,8 @@ def print_package_info(idpackage, dbconn, clientSearch = False,
|
||||
pkgsize = entropy.tools.bytes_into_human(pkgsize)
|
||||
pkgbin = dbconn.retrieveDownloadURL(idpackage)
|
||||
pkgdigest = dbconn.retrieveDigest(idpackage)
|
||||
pkgdeps = dbconn.retrieveDependencies(idpackage, extended = True)
|
||||
pkgdeps = dbconn.retrieveDependencies(idpackage, extended = True,
|
||||
resolve_conditional_deps = False)
|
||||
pkgconflicts = dbconn.retrieveConflicts(idpackage)
|
||||
depsorter = lambda x: entropy.dep.dep_getcpv(x[0])
|
||||
|
||||
|
||||
@@ -836,7 +836,8 @@ class EntropyRepository(EntropyRepositoryBase):
|
||||
mypackage_id_string = 'NULL'
|
||||
if isinstance(package_id, int):
|
||||
|
||||
manual_deps = self.retrieveManualDependencies(package_id)
|
||||
manual_deps = self.retrieveManualDependencies(package_id,
|
||||
resolve_conditional_deps = False)
|
||||
|
||||
# does it exist?
|
||||
self.removePackage(package_id, do_cleanup = False,
|
||||
@@ -2916,7 +2917,8 @@ class EntropyRepository(EntropyRepositoryBase):
|
||||
return frozenset(cur)
|
||||
return self._cur2frozenset(cur)
|
||||
|
||||
def retrieveDependenciesList(self, package_id, exclude_deptypes = None):
|
||||
def retrieveDependenciesList(self, package_id, exclude_deptypes = None,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Reimplemented from EntropyRepositoryBase.
|
||||
"""
|
||||
@@ -2934,31 +2936,40 @@ class EntropyRepository(EntropyRepositoryBase):
|
||||
UNION SELECT "!" || conflict FROM conflicts
|
||||
WHERE idpackage = (?)""" % (excluded_deptypes_query,),
|
||||
(package_id, package_id,))
|
||||
return self._cur2frozenset(cur)
|
||||
if resolve_conditional_deps:
|
||||
return frozenset(entropy.dep.expand_dependencies(cur, self))
|
||||
else:
|
||||
return self._cur2frozenset(cur)
|
||||
|
||||
def retrieveBuildDependencies(self, package_id, extended = False):
|
||||
def retrieveBuildDependencies(self, package_id, extended = False,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Reimplemented from EntropyRepositoryBase.
|
||||
"""
|
||||
return self.retrieveDependencies(package_id, extended = extended,
|
||||
deptype = etpConst['dependency_type_ids']['bdepend_id'])
|
||||
deptype = etpConst['dependency_type_ids']['bdepend_id'],
|
||||
resolve_conditional_deps = resolve_conditional_deps)
|
||||
|
||||
def retrievePostDependencies(self, package_id, extended = False):
|
||||
def retrievePostDependencies(self, package_id, extended = False,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Reimplemented from EntropyRepositoryBase.
|
||||
"""
|
||||
return self.retrieveDependencies(package_id, extended = extended,
|
||||
deptype = etpConst['dependency_type_ids']['pdepend_id'])
|
||||
deptype = etpConst['dependency_type_ids']['pdepend_id'],
|
||||
resolve_conditional_deps = resolve_conditional_deps)
|
||||
|
||||
def retrieveManualDependencies(self, package_id, extended = False):
|
||||
def retrieveManualDependencies(self, package_id, extended = False,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Reimplemented from EntropyRepositoryBase.
|
||||
"""
|
||||
return self.retrieveDependencies(package_id, extended = extended,
|
||||
deptype = etpConst['dependency_type_ids']['mdepend_id'])
|
||||
deptype = etpConst['dependency_type_ids']['mdepend_id'],
|
||||
resolve_conditional_deps = resolve_conditional_deps)
|
||||
|
||||
def retrieveDependencies(self, package_id, extended = False, deptype = None,
|
||||
exclude_deptypes = None):
|
||||
exclude_deptypes = None, resolve_conditional_deps = True):
|
||||
"""
|
||||
Reimplemented from EntropyRepositoryBase.
|
||||
"""
|
||||
@@ -2983,7 +2994,7 @@ class EntropyRepository(EntropyRepositoryBase):
|
||||
dependencies.iddependency =
|
||||
dependenciesreference.iddependency %s %s""" % (
|
||||
depstring, excluded_deptypes_query,), searchdata)
|
||||
return tuple(cur)
|
||||
return tuple(entropy.dep.expand_dependencies(cur, self))
|
||||
else:
|
||||
cur = self._cursor().execute("""
|
||||
SELECT dependenciesreference.dependency
|
||||
@@ -2992,7 +3003,7 @@ class EntropyRepository(EntropyRepositoryBase):
|
||||
dependencies.iddependency =
|
||||
dependenciesreference.iddependency %s %s""" % (
|
||||
depstring, excluded_deptypes_query,), searchdata)
|
||||
return self._cur2frozenset(cur)
|
||||
return frozenset(entropy.dep.expand_dependencies(cur, self))
|
||||
|
||||
def retrieveKeywords(self, package_id):
|
||||
"""
|
||||
|
||||
@@ -1418,7 +1418,8 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
'content': content,
|
||||
'content_safety': self.retrieveContentSafety(package_id),
|
||||
'dependencies': dict((x, y,) for x, y in \
|
||||
self.retrieveDependencies(package_id, extended = True)),
|
||||
self.retrieveDependencies(package_id, extended = True,
|
||||
resolve_conditional_deps = False)),
|
||||
'mirrorlinks': [[x, self.retrieveMirrorData(x)] for x in mirrornames],
|
||||
'signatures': signatures,
|
||||
'spm_phases': self.retrieveSpmPhases(package_id),
|
||||
@@ -2273,7 +2274,8 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def retrieveDependenciesList(self, package_id, exclude_deptypes = None):
|
||||
def retrieveDependenciesList(self, package_id, exclude_deptypes = None,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Return list of dependencies, including conflicts for given package
|
||||
identifier.
|
||||
@@ -2284,13 +2286,18 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
data. Please see etpConst['dependency_type_ids'] for valid values.
|
||||
Anything != int will raise AttributeError
|
||||
@type exclude_deptypes: list
|
||||
@keyword resolve_conditional_deps: resolve conditional dependencies
|
||||
automatically by default, stuff like
|
||||
( app-foo/foo | app-foo/bar ) & bar-baz/foo
|
||||
@type resolve_conditional_deps: bool
|
||||
@return: list (frozenset) of dependencies of package
|
||||
@rtype: frozenset
|
||||
@raise AttributeError: if exclude_deptypes contains illegal values
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def retrieveBuildDependencies(self, package_id, extended = False):
|
||||
def retrieveBuildDependencies(self, package_id, extended = False,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Return list of build time package dependencies for given package
|
||||
identifier.
|
||||
@@ -2301,12 +2308,17 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
@type package_id: int
|
||||
@keyword extended: return in extended format
|
||||
@type extended: bool
|
||||
@keyword resolve_conditional_deps: resolve conditional dependencies
|
||||
automatically by default, stuff like
|
||||
( app-foo/foo | app-foo/bar ) & bar-baz/foo
|
||||
@type resolve_conditional_deps: bool
|
||||
@return: list (frozenset) of build dependencies of package
|
||||
@rtype: frozenset
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def retrievePostDependencies(self, package_id, extended = False):
|
||||
def retrievePostDependencies(self, package_id, extended = False,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Return list of post-merge package dependencies for given package
|
||||
identifier.
|
||||
@@ -2317,12 +2329,17 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
@type package_id: int
|
||||
@keyword extended: return in extended format
|
||||
@type extended: bool
|
||||
@keyword resolve_conditional_deps: resolve conditional dependencies
|
||||
automatically by default, stuff like
|
||||
( app-foo/foo | app-foo/bar ) & bar-baz/foo
|
||||
@type resolve_conditional_deps: bool
|
||||
@return: list (frozenset) of post dependencies of package
|
||||
@rtype: frozenset
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def retrieveManualDependencies(self, package_id, extended = False):
|
||||
def retrieveManualDependencies(self, package_id, extended = False,
|
||||
resolve_conditional_deps = True):
|
||||
"""
|
||||
Return manually added dependencies for given package identifier.
|
||||
Note: this function is just a wrapper of retrieveDependencies()
|
||||
@@ -2332,13 +2349,17 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
@type package_id: int
|
||||
@keyword extended: return in extended format
|
||||
@type extended: bool
|
||||
@keyword resolve_conditional_deps: resolve conditional dependencies
|
||||
automatically by default, stuff like
|
||||
( app-foo/foo | app-foo/bar ) & bar-baz/foo
|
||||
@type resolve_conditional_deps: bool
|
||||
@return: list (frozenset) of manual dependencies of package
|
||||
@rtype: frozenset
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def retrieveDependencies(self, package_id, extended = False, deptype = None,
|
||||
exclude_deptypes = None):
|
||||
exclude_deptypes = None, resolve_conditional_deps = True):
|
||||
"""
|
||||
Return dependencies for given package identifier.
|
||||
|
||||
@@ -2355,6 +2376,10 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore, object)
|
||||
data. Please see etpConst['dependency_type_ids'] for valid values.
|
||||
Anything != int will raise AttributeError
|
||||
@type exclude_deptypes: list
|
||||
@keyword resolve_conditional_deps: resolve conditional dependencies
|
||||
automatically by default, stuff like
|
||||
( app-foo/foo | app-foo/bar ) & bar-baz/foo
|
||||
@type resolve_conditional_deps: bool
|
||||
@return: dependencies of given package
|
||||
@rtype: tuple or frozenset
|
||||
@raise AttributeError: if exclude_deptypes contains illegal values
|
||||
|
||||
@@ -212,7 +212,8 @@ class ServerPackagesRepository(EntropyRepository):
|
||||
current_rev = myrev
|
||||
|
||||
#
|
||||
manual_deps |= self.retrieveManualDependencies(package_id)
|
||||
manual_deps |= self.retrieveManualDependencies(package_id,
|
||||
resolve_conditional_deps = False)
|
||||
# injected packages wouldn't be removed by addPackage
|
||||
self.removePackage(package_id, do_cleanup = False,
|
||||
do_commit = False)
|
||||
@@ -227,7 +228,8 @@ class ServerPackagesRepository(EntropyRepository):
|
||||
)
|
||||
|
||||
for r_package_id in removelist:
|
||||
manual_deps |= self.retrieveManualDependencies(r_package_id)
|
||||
manual_deps |= self.retrieveManualDependencies(r_package_id,
|
||||
resolve_conditional_deps = False)
|
||||
self.removePackage(r_package_id, do_cleanup = False,
|
||||
do_commit = False)
|
||||
|
||||
|
||||
@@ -4260,7 +4260,8 @@ class ServerRepositoryMixin:
|
||||
header = red(" @@ ")
|
||||
)
|
||||
|
||||
manual_deps = sorted(dbconn.retrieveManualDependencies(idpackage))
|
||||
manual_deps = sorted(dbconn.retrieveManualDependencies(idpackage,
|
||||
resolve_conditional_deps = False))
|
||||
if manual_deps:
|
||||
self.output(
|
||||
"[repo:%s] %s: %s" % (
|
||||
|
||||
@@ -213,7 +213,8 @@ def _package_dep(entropy_server, args):
|
||||
for idpackage in idpackages:
|
||||
|
||||
atom = dbconn.retrieveAtom(idpackage)
|
||||
orig_deps = dbconn.retrieveDependencies(idpackage, extended = True)
|
||||
orig_deps = dbconn.retrieveDependencies(idpackage, extended = True,
|
||||
resolve_conditional_deps = False)
|
||||
dep_type_map = dict(orig_deps)
|
||||
|
||||
def dep_check_cb(s):
|
||||
|
||||
Reference in New Issue
Block a user