From 2b5ba3b771c091e3703b6370e7fd366a2e4f478f Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 7 Apr 2017 20:06:09 +0200 Subject: [PATCH] Drop satsolver.Pool class and use Pool from _pakfire Signed-off-by: Michael Tremer --- src/libpakfire/pool.c | 5 +- src/pakfire/base.py | 17 ++--- src/pakfire/satsolver.py | 143 --------------------------------------- 3 files changed, 11 insertions(+), 154 deletions(-) diff --git a/src/libpakfire/pool.c b/src/libpakfire/pool.c index 3fd11b7e1..26e2460b4 100644 --- a/src/libpakfire/pool.c +++ b/src/libpakfire/pool.c @@ -154,7 +154,10 @@ void pakfire_pool_set_cache_path(PakfirePool pool, const char* path) { } PakfireCache pakfire_pool_get_cache(PakfirePool pool) { - return pool->cache; + if (pool->cache) + return pool->cache; + + return NULL; } static PakfirePackageList pakfire_pool_dataiterator(PakfirePool pool, const char* what, int key, int flags) { diff --git a/src/pakfire/base.py b/src/pakfire/base.py index ec8e3ba31..04cc678aa 100644 --- a/src/pakfire/base.py +++ b/src/pakfire/base.py @@ -23,6 +23,7 @@ import os import random import string +from . import _pakfire from . import actions from . import builder from . import config @@ -46,7 +47,7 @@ from .i18n import _ class Pakfire(object): mode = None - def __init__(self, path="/", arch=None, distro=None): + def __init__(self, path="/", arch=None, distro=None, cache_path=None): # The path where we are operating in self.path = path @@ -69,7 +70,10 @@ class Pakfire(object): # Initialize the keyring self.keyring = keyring.Keyring(self) - self.pool = satsolver.Pool(self.arch.name) + self.pool = _pakfire.Pool(self.arch.name) + self.pool.cache_path = cache_path or \ + os.path.join(CACHE_DIR, self.distro.sname, self.distro.release) + self.repos = repository.Repositories(self) # Load default repository configuration @@ -211,14 +215,7 @@ class PakfireContext(object): pkgs.append(pkg) else: - solvs = self.pakfire.pool.search(pattern, satsolver.SEARCH_GLOB, "solvable:name") - - for solv in solvs: - pkg = packages.SolvPackage(self.pakfire, solv) - if pkg in pkgs: - continue - - pkgs.append(pkg) + pkgs += self.pakfire.pool.whatprovides(pattern, name_only=True) return sorted(pkgs) diff --git a/src/pakfire/satsolver.py b/src/pakfire/satsolver.py index ed12a0115..f07984cc6 100644 --- a/src/pakfire/satsolver.py +++ b/src/pakfire/satsolver.py @@ -43,149 +43,6 @@ SEARCH_GLOB = _pakfire.SEARCH_GLOB Solvable = _pakfire.Solvable Relation = _pakfire.Relation -class Pool(_pakfire.Pool): - RELATIONS = ( - (">=", _pakfire.REL_GE,), - ("<=", _pakfire.REL_LE,), - ("=" , _pakfire.REL_EQ,), - ("<" , _pakfire.REL_LT,), - (">" , _pakfire.REL_GT,), - ) - - def create_relation(self, s): - assert s - - if isinstance(s, filelist._File): - return Relation(self, s.name) - - elif s.startswith("/"): - return Relation(self, s) - - for pattern, type in self.RELATIONS: - if not pattern in s: - continue - - name, version = s.split(pattern, 1) - return Relation(self, name.strip(), version.strip(), type) - - return Relation(self, s) - - def create_request(self, builder=False, install=None, remove=None, update=None, updateall=False): - request = Request(self) - - # Add multiinstall information. - for solv in PAKFIRE_MULTIINSTALL: - request.noobsoletes(solv) - - # Apply all installs. - for req in self.expand_requires(install): - request.install(req) - - # Apply all removes. - for req in self.expand_requires(remove): - request.remove(req) - - # Apply all updates. - for req in self.expand_requires(update): - request.update(req) - - # Configure the request to update all packages - # if requested. - if updateall: - request.updateall() - - # Return the request. - return request - - def grouplist(self, group): - pkgs = [] - - for solv in self.search(group, _pakfire.SEARCH_SUBSTRING, "solvable:group"): - pkg = packages.SolvPackage(self, solv) - - if group in pkg.groups and not pkg.name in pkgs: - pkgs.append(pkg.name) - - return sorted(pkgs) - - def expand_requires(self, requires): - if requires is None: - return [] - - ret = [] - for req in requires: - if isinstance(req, packages.BinaryPackage): - ret.append(req) - continue - - if isinstance(req, packages.SolvPackage): - ret.append(req.solvable) - continue - - assert type(req) == type("a"), req - - # Expand all groups. - if req.startswith("@"): - reqs = self.grouplist(req[1:]) - else: - reqs = [req,] - - for req in reqs: - req = self.create_relation(req) - ret.append(req) - - return ret - - def resolvdep(self, pakfire, pkg, logger=None): - assert os.path.exists(pkg) - - # Open the package file. - pkg = packages.open(pakfire, None, pkg) - - # Create a new request. - request = self.create_request(install=pkg.requires) - - # Add build dependencies if needed. - if isinstance(pkg, packages.Makefile) or isinstance(pkg, packages.SourcePackage): - for req in self.expand_requires(BUILD_PACKAGES): - request.install(req) - - # Solv the request. - solver = self.solve(request, logger=logger) - - if solver.status: - return solver - - raise DependencyError(solver.get_problem_string()) - - def solve(self, request, interactive=False, logger=None, force_best=False, **kwargs): - # XXX implement interactive - - if not logger: - logger = logging.getLogger("pakfire") - - # Create a solver. - solver = Solver(self, request, logger=logger) - - # Apply configuration to solver. - for key, val in list(kwargs.items()): - solver.set(key, val) - - # Do the solving. - solver.solve(force_best=force_best) - - # Return the solver so one can do stuff with it... - return solver - - def whatprovides(self, pakfire, what): - pkgs = [] - for solv in self.providers(what): - pkg = packages.SolvPackage(pakfire, solv) - pkgs.append(pkg) - - return pkgs - - class Request(_pakfire.Request): def install(self, what): if isinstance(what, Solvable): -- 2.39.5