From: Michael Tremer Date: Wed, 7 Dec 2016 22:02:39 +0000 (+0100) Subject: Move install() to PakfireContext X-Git-Tag: 0.9.28~1285^2~1376 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=154f8448dfd51427771ae6277648bb53a9bd23de;p=pakfire.git Move install() to PakfireContext Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/base.py b/src/pakfire/base.py index 79118b1aa..29dfa61e4 100644 --- a/src/pakfire/base.py +++ b/src/pakfire/base.py @@ -105,83 +105,6 @@ class Pakfire(object): if not ret: raise NotAnIPFireSystemError("You can run pakfire only on an IPFire system") - - def install(self, requires, interactive=True, logger=None, signatures_mode=None, **kwargs): - if not logger: - logger = logging.getLogger("pakfire") - - # Pointer to temporary repository. - repo = None - - # Sort out what we got... - download_packages = [] - local_packages = [] - relations = [] - - for req in requires: - if isinstance(req, packages.Package): - relations.append(req) - continue - - # This looks like a file. - elif req.endswith(".%s" % PACKAGE_EXTENSION) and os.path.exists(req) and os.path.isfile(req): - local_packages.append(req) - continue - - # Remote files. - elif req.startswith("http://") or req.startswith("https://") or req.startswith("ftp://"): - download_packages.append(req) - continue - - # We treat the rest as relations. The solver will return any errors. - relations.append(req) - - # Redefine requires, which will be the list that will be passed to the - # solver. - requires = relations - - try: - # If we have got files to install, we need to create a temporary repository - # called 'localinstall'. - # XXX FIX TMP PATH - if local_packages or download_packages: - repo = repository.RepositoryDir(self, "localinstall", _("Local install repository"), - os.path.join(LOCAL_TMP_PATH, "repo_%s" % util.random_string())) - - # Register the repository. - self.repos.add_repo(repo) - - # Download packages. - for download_package in download_packages: - repo.download_package(download_package) - - # Add all packages to the repository index. - repo.add_packages(local_packages) - - # Add all packages to the requires. - requires += repo - - # Do the solving. - request = self.pool.create_request(install=requires) - solver = self.pool.solve(request, logger=logger, interactive=interactive, **kwargs) - - # Create the transaction. - t = transaction.Transaction.from_solver(self, solver) - t.dump(logger=logger) - - # Ask if the user acknowledges the transaction. - if interactive and not t.cli_yesno(): - return - - # Run the transaction. - t.run(logger=logger, signatures_mode=signatures_mode) - - finally: - if repo: - # Remove the temporary repository we have created earlier. - repo.remove() - self.repos.rem_repo(repo) - def reinstall(self, pkgs, strict=False, logger=None): """ Reinstall one or more packages. @@ -543,6 +466,84 @@ class PakfireContext(object): # Return a list of the packages, alphabetically sorted. return sorted(pkgs.values()) + # Transactions + + def install(self, requires, interactive=True, logger=None, signatures_mode=None, **kwargs): + if not logger: + logger = logging.getLogger("pakfire") + + # Pointer to temporary repository. + repo = None + + # Sort out what we got... + download_packages = [] + local_packages = [] + relations = [] + + for req in requires: + if isinstance(req, packages.Package): + relations.append(req) + continue + + # This looks like a file. + elif req.endswith(".%s" % PACKAGE_EXTENSION) and os.path.exists(req) and os.path.isfile(req): + local_packages.append(req) + continue + + # Remote files. + elif req.startswith("http://") or req.startswith("https://") or req.startswith("ftp://"): + download_packages.append(req) + continue + + # We treat the rest as relations. The solver will return any errors. + relations.append(req) + + # Redefine requires, which will be the list that will be passed to the + # solver. + requires = relations + + try: + # If we have got files to install, we need to create a temporary repository + # called 'localinstall'. + # XXX FIX TMP PATH + if local_packages or download_packages: + repo = repository.RepositoryDir(self.pakfire, "localinstall", _("Local install repository"), + os.path.join(LOCAL_TMP_PATH, "repo_%s" % util.random_string())) + + # Register the repository. + self.pakfire.repos.add_repo(repo) + + # Download packages. + for download_package in download_packages: + repo.download_package(download_package) + + # Add all packages to the repository index. + repo.add_packages(local_packages) + + # Add all packages to the requires. + requires += repo + + # Do the solving. + request = self.pakfire.pool.create_request(install=requires) + solver = self.pakfire.pool.solve(request, logger=logger, interactive=interactive, **kwargs) + + # Create the transaction. + t = transaction.Transaction.from_solver(self.pakfire, solver) + t.dump(logger=logger) + + # Ask if the user acknowledges the transaction. + if interactive and not t.cli_yesno(): + return + + # Run the transaction. + t.run(logger=logger, signatures_mode=signatures_mode) + + finally: + if repo: + # Remove the temporary repository we have created earlier. + repo.remove() + self.pakfire.repos.rem_repo(repo) + class PakfireBuilder(Pakfire): mode = "builder"