[entropy.db] implement conditional dependencies support, break API on EntropyRepositoryBase

This commit is contained in:
Fabio Erculiani
2010-11-23 21:13:41 +01:00
parent 00cec97b2d
commit f76ce71d83
6 changed files with 66 additions and 24 deletions
+4 -2
View File
@@ -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])
+23 -12
View File
@@ -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):
"""
+31 -6
View File
@@ -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
+4 -2
View File
@@ -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)
+2 -1
View File
@@ -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" % (
+2 -1
View File
@@ -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):