]> git.ipfire.org Git - pakfire.git/commitdiff
Drop satsolver.Pool class and use Pool from _pakfire
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 7 Apr 2017 18:06:09 +0000 (20:06 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 7 Apr 2017 18:06:09 +0000 (20:06 +0200)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/pool.c
src/pakfire/base.py
src/pakfire/satsolver.py

index 3fd11b7e1a09f5ed0563e62a6831875e7357407e..26e2460b48ae14e0556e64b8cfb2c8edaa7e2050 100644 (file)
@@ -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) {
index ec8e3ba315a8def58c8294ed51cdf5ef3365756e..04cc678aa4ca1f78d101f6b7a7ba003c39edbb7a 100644 (file)
@@ -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)
 
index ed12a0115bd03cdead4711563a2924ea3425734d..f07984cc619f0b1330fad699f3903054cdf1a029 100644 (file)
@@ -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):