]> git.ipfire.org Git - pakfire.git/commitdiff
cli: Add option to keep dependencies on uninstall
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 24 Jun 2021 19:55:46 +0000 (19:55 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 24 Jun 2021 19:55:46 +0000 (19:55 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/pakfire.c
src/libpakfire/include/pakfire/request.h
src/libpakfire/request.c
src/pakfire/cli.py

index 5c73e92e2b9d4c21fdc9470a6668a4fdb12595f2..3868bc53bf85135b4737294de35585c2d5f38cc8 100644 (file)
@@ -307,15 +307,20 @@ static PyObject* Pakfire_install(PakfireObject* self, PyObject* args, PyObject*
 static PyObject* Pakfire_erase(PakfireObject* self, PyObject* args, PyObject* kwargs) {
        char* kwlist[] = {
                "packages",
+               "keep_dependencies",
                NULL
        };
        char** packages = NULL;
+       int keep_dependencies = 0;
        int flags = 0;
 
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist,
-                       convert_packages, &packages))
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$p", kwlist,
+                       convert_packages, &packages, &keep_dependencies))
                return NULL;
 
+       if (keep_dependencies)
+               flags |= PAKFIRE_REQUEST_KEEP_DEPS;
+
        // Run pakfire_erase
        int r = pakfire_erase(self->pakfire, (const char**)packages, NULL, flags, NULL);
        if (r)
index 6f01a2768eae07fc4a3915639754313cc6d8eea5..6efd3ab3f0c114cc896915cabdc2b88b7a1db0e2 100644 (file)
@@ -27,7 +27,7 @@ struct pakfire_request;
 
 enum _pakfire_request_op_flags {
        PAKFIRE_CHECK_INSTALLED = 1 << 0,
-       PAKFIRE_CLEAN_DEPS      = 1 << 1,
+       PAKFIRE_REQUEST_KEEP_DEPS         = 1 << 1,
        PAKFIRE_REQUEST_KEEP_ORPHANED     = 1 << 2,
 };
 
index c309509b1703129f474f65680e9a0b62d8b76943..2edf06c870671333ac29ec8d8d2860d51fb37441 100644 (file)
@@ -462,7 +462,8 @@ PAKFIRE_EXPORT int pakfire_request_install_package(
 static int erase_flags(int flags) {
        int additional = 0;
 
-       if (flags & PAKFIRE_CLEAN_DEPS)
+       // Keep dependencies
+       if (!(flags & PAKFIRE_REQUEST_KEEP_DEPS))
                additional |= SOLVER_CLEANDEPS;
 
        return additional;
index d3fac488c72c2d961e6e7ebdbc26f7de408f2135..8d196bab5a01b7f7497fb56e531530d04eea1c7e 100644 (file)
@@ -105,6 +105,8 @@ class Cli(object):
                        help=_("Remove one or more packages from the system"))
                remove.add_argument("package", nargs="+",
                        help=_("Give name of at least one package to remove"))
+               remove.add_argument("--keep-dependencies", action="store_true",
+                       help=_("Keep dependencies installed"))
                remove.set_defaults(func=self.handle_remove)
 
                # repolist
@@ -274,7 +276,7 @@ class Cli(object):
 
        def handle_remove(self, ns):
                p = self.pakfire(ns)
-               p.erase(ns.package)
+               p.erase(ns.package, keep_dependencies=ns.keep_dependencies)
 
        def handle_provides(self, ns, long=False):
                for pkg in self.pakfire(ns).whatprovides(ns.pattern):