]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Remove pakfire_install/_update/_sync/_erase
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 25 Sep 2023 13:45:19 +0000 (13:45 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 25 Sep 2023 13:45:19 +0000 (13:45 +0000)
These functions used to call a mega function to perform some basic
actions which was getting too complicated to keep alive.

This way, we export the transaction object which breaks down all those
actions into many smaller steps.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/pakfire.c
src/libpakfire/include/pakfire/pakfire.h
src/libpakfire/libpakfire.sym
src/libpakfire/pakfire.c

index 711525d3dadc8d31d8bcf0c8218a74b89e64af23..e17a8d6388dbe4dfc8f2184f2e27063f001d8c53 100644 (file)
@@ -331,31 +331,6 @@ static PyObject* Pakfire_get_repo(PakfireObject* self, PyObject* args) {
        return obj;
 }
 
-static void Pakfire_status_callback(struct pakfire* pakfire, void* data,
-               int progress, const char* status) {
-       PyObject* callback = (PyObject*)data;
-
-       // Do not attempt to call nothing
-       if (!callback)
-               return;
-
-       // Acquire GIL
-       PyGILState_STATE state = PyGILState_Ensure();
-
-       // Compile arguments
-       PyObject* args = Py_BuildValue("(is)", progress, status);
-       if (args) {
-               // Call the callback
-               PyObject* result = PyObject_CallObject(callback, args);
-
-               Py_XDECREF(result);
-               Py_DECREF(args);
-       }
-
-       // Release the GIL
-       PyGILState_Release(state);
-}
-
 static int convert_packages(PyObject* object, void* address) {
        char*** packages = (char***)address;
 
@@ -424,188 +399,6 @@ ERROR:
        return 0;
 }
 
-static PyObject* Pakfire_install(PakfireObject* self, PyObject* args, PyObject* kwargs) {
-       char* kwlist[] = {
-               "packages",
-               "without_recommended",
-               "allow_uninstall",
-               "allow_downgrade",
-               "status_callback",
-               NULL
-       };
-       char** packages = NULL;
-       int without_recommended = 0;
-       int allow_uninstall = 0;
-       int allow_downgrade = 0;
-       int solver_flags = 0;
-       int transaction_flags = 0;
-       PyObject* status_callback = NULL;
-       int r;
-
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$pppO", kwlist,
-                       convert_packages, &packages, &without_recommended, &allow_uninstall,
-                       &allow_downgrade, &status_callback))
-               return NULL;
-
-       // Check if callback is callable
-       if (status_callback && !PyCallable_Check(status_callback)) {
-               PyErr_SetString(PyExc_TypeError, "status_callback must be callable");
-               return NULL;
-       }
-
-
-       // Do not install recommended packages
-       if (without_recommended)
-               solver_flags |= PAKFIRE_TRANSACTION_WITHOUT_RECOMMENDED;
-
-       // Can the solver uninstall packages?
-       if (allow_uninstall)
-               solver_flags |= PAKFIRE_TRANSACTION_ALLOW_UNINSTALL;
-
-       // Can the solver downgrade packages?
-       if (allow_downgrade)
-               solver_flags |= PAKFIRE_TRANSACTION_ALLOW_DOWNGRADE;
-
-       Py_BEGIN_ALLOW_THREADS
-
-       // Run pakfire_install
-       r = pakfire_install(self->pakfire, transaction_flags, solver_flags,
-               (const char**)packages, NULL, 0, NULL, Pakfire_status_callback, status_callback);
-
-       Py_END_ALLOW_THREADS
-
-       if (r)
-               PyErr_SetFromErrno(PyExc_OSError);
-
-       if (packages) {
-               for (char** package = packages; *package; package++)
-                       free(*package);
-               free(packages);
-       }
-
-       if (r)
-               return NULL;
-
-       Py_RETURN_NONE;
-}
-
-static PyObject* Pakfire_erase(PakfireObject* self, PyObject* args, PyObject* kwargs) {
-       char* kwlist[] = {
-               "packages",
-               "keep_dependencies",
-               "status_callback",
-               NULL
-       };
-       char** packages = NULL;
-       int keep_dependencies = 0;
-       int transaction_flags = 0;
-       int flags = 0;
-       PyObject* status_callback = NULL;
-       int r;
-
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$pO", kwlist,
-                       convert_packages, &packages, &keep_dependencies, &status_callback))
-               return NULL;
-
-       // Check if callback is callable
-       if (status_callback && !PyCallable_Check(status_callback)) {
-               PyErr_SetString(PyExc_TypeError, "status_callback must be callable");
-               return NULL;
-       }
-
-       if (keep_dependencies)
-               flags |= PAKFIRE_JOB_KEEP_DEPS;
-
-       Py_BEGIN_ALLOW_THREADS
-
-       // Run pakfire_erase
-       r = pakfire_erase(self->pakfire, transaction_flags, 0, (const char**)packages,
-               NULL, flags, NULL, Pakfire_status_callback, status_callback);
-
-       Py_END_ALLOW_THREADS
-
-       if (r)
-               PyErr_SetFromErrno(PyExc_OSError);
-
-       if (packages) {
-               for (char** package = packages; *package; package++)
-                       free(*package);
-               free(packages);
-       }
-
-       if (r)
-               return NULL;
-
-       Py_RETURN_NONE;
-}
-
-static PyObject* Pakfire_update(PakfireObject* self, PyObject* args, PyObject* kwargs) {
-       char* kwlist[] = {
-               "packages",
-               "excludes",
-               "allow_uninstall",
-               "allow_downgrade",
-               "status_callback",
-               NULL
-       };
-       char** packages = NULL;
-       char** excludes = NULL;
-       int allow_uninstall = 0;
-       int allow_downgrade = 0;
-       int solver_flags = 0;
-       int transaction_flags = 0;
-       PyObject* status_callback = NULL;
-       int r;
-
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&ppO", kwlist,
-                       convert_packages, &packages, convert_packages, &excludes,
-                       &allow_uninstall, &allow_downgrade, &status_callback))
-               return NULL;
-
-       // Check if callback is callable
-       if (status_callback && !PyCallable_Check(status_callback)) {
-               PyErr_SetString(PyExc_TypeError, "status_callback must be callable");
-               return NULL;
-       }
-
-       // Can the solver uninstall packages?
-       if (allow_uninstall)
-               solver_flags |= PAKFIRE_TRANSACTION_ALLOW_UNINSTALL;
-
-       // Can the solver downgrade packages?
-       if (allow_downgrade)
-               solver_flags |= PAKFIRE_TRANSACTION_ALLOW_DOWNGRADE;
-
-       Py_BEGIN_ALLOW_THREADS
-
-       // Run pakfire_update
-       r = pakfire_update(self->pakfire, transaction_flags, solver_flags,
-               (const char**)packages, (const char**)excludes, 0, NULL,
-               Pakfire_status_callback, status_callback);
-
-       Py_END_ALLOW_THREADS
-
-       if (r)
-               PyErr_SetFromErrno(PyExc_OSError);
-
-       if (packages) {
-               for (char** package = packages; *package; package++)
-                       free(*package);
-               free(packages);
-       }
-
-       if (excludes) {
-               for (char** exclude = excludes; *exclude; exclude++)
-                       free(*exclude);
-               free(excludes);
-       }
-
-       if (r)
-               return NULL;
-
-       Py_RETURN_NONE;
-}
-
 static PyObject* Pakfire_generate_key(PakfireObject* self, PyObject* args, PyObject* kwds) {
        char* kwlist[] = { "algorithm", "comment", NULL };
        struct pakfire_key* key = NULL;
@@ -1299,87 +1092,6 @@ static PyObject* Pakfire_refresh(PakfireObject* self, PyObject* args) {
        Py_RETURN_NONE;
 }
 
-static PyObject* Pakfire_check(PakfireObject* self) {
-       struct pakfire_filelist* errors = NULL;
-       int r;
-
-       // Allocate a filelist for errors
-       r = pakfire_filelist_create(&errors, self->pakfire);
-       if (r)
-               goto ERROR;
-
-       Py_BEGIN_ALLOW_THREADS
-
-       // Perform check
-       r = pakfire_check(self->pakfire, errors);
-
-       Py_END_ALLOW_THREADS
-
-       if (r)
-               goto ERROR;
-
-       const size_t num_errors = pakfire_filelist_length(errors);
-
-       // Did we find any errors?
-       if (num_errors) {
-               PyObject* _errors = PyList_FromFileList(errors);
-               if (!_errors)
-                       goto ERROR;
-
-               pakfire_filelist_unref(errors);
-
-               // Raise CheckFileVerificationError
-               PyErr_SetObject(PyExc_CheckFileVerificationError, _errors);
-               Py_DECREF(_errors);
-               return NULL;
-       }
-
-       pakfire_filelist_unref(errors);
-       Py_RETURN_NONE;
-
-ERROR:
-       // Cleanup
-       if (errors)
-               pakfire_filelist_unref(errors);
-
-       // Raise exception from errno
-       PyErr_SetFromErrno(PyExc_OSError);
-       return NULL;
-}
-
-static PyObject* Pakfire_sync(PakfireObject* self, PyObject* args, PyObject* kwargs) {
-       char* kwlist[] = {
-               "keep_orphaned",
-               "status_callback",
-               NULL,
-       };
-       int keep_orphaned = 0;
-       int flags = 0;
-       PyObject* status_callback = NULL;
-       int r;
-
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|$pO", kwlist,
-                       &keep_orphaned, &status_callback))
-               return NULL;
-
-       if (keep_orphaned)
-               flags |= PAKFIRE_JOB_KEEP_ORPHANED;
-
-       Py_BEGIN_ALLOW_THREADS
-
-       r = pakfire_sync(self->pakfire, 0, flags, NULL,
-                       Pakfire_status_callback, status_callback);
-       if (r) {
-               Py_BLOCK_THREADS
-               PyErr_SetFromErrno(PyExc_OSError);
-               return NULL;
-       }
-
-       Py_END_ALLOW_THREADS
-
-       Py_RETURN_NONE;
-}
-
 static PyObject* Pakfire_open(PakfireObject* self, PyObject* args) {
        struct pakfire_archive* archive = NULL;
        const char* path = NULL;
@@ -1535,12 +1247,6 @@ static struct PyMethodDef Pakfire_methods[] = {
                METH_VARARGS|METH_KEYWORDS,
                NULL
        },
-       {
-               "check",
-               (PyCFunction)Pakfire_check,
-               METH_NOARGS,
-               NULL,
-       },
        {
                "clean",
                (PyCFunction)Pakfire_clean,
@@ -1565,12 +1271,6 @@ static struct PyMethodDef Pakfire_methods[] = {
                METH_VARARGS,
                NULL
        },
-       {
-               "erase",
-               (PyCFunction)Pakfire_erase,
-               METH_VARARGS|METH_KEYWORDS,
-               NULL
-       },
        {
                "execute",
                (PyCFunction)Pakfire_execute,
@@ -1595,12 +1295,6 @@ static struct PyMethodDef Pakfire_methods[] = {
                METH_VARARGS,
                NULL,
        },
-       {
-               "install",
-               (PyCFunction)Pakfire_install,
-               METH_VARARGS|METH_KEYWORDS,
-               NULL,
-       },
        {
                "mkimage",
                (PyCFunction)Pakfire_mkimage,
@@ -1637,18 +1331,6 @@ static struct PyMethodDef Pakfire_methods[] = {
                METH_VARARGS|METH_KEYWORDS,
                NULL,
        },
-       {
-               "sync",
-               (PyCFunction)Pakfire_sync,
-               METH_VARARGS|METH_KEYWORDS,
-               NULL,
-       },
-       {
-               "update",
-               (PyCFunction)Pakfire_update,
-               METH_VARARGS|METH_KEYWORDS,
-               NULL
-       },
        {
                "version_compare",
                (PyCFunction)Pakfire_version_compare,
index 7423d664428ec5d9f09acf4d7e4f98d7a45c8a72..2084e69c2a4ab56d440e494cedec86ad80e72111 100644 (file)
@@ -94,27 +94,10 @@ int pakfire_search(struct pakfire* pakfire, const char* what, int flags,
 int pakfire_log_get_priority(struct pakfire* pakfire);
 void pakfire_log_set_priority(struct pakfire* pakfire, int priority);
 
-// Install/Erase/Update
-
-int pakfire_install(struct pakfire* pakfire, int transaction_flags, int solver_flags,
-       const char** packages, const char** locks, int job_flags, int* changed,
-       pakfire_status_callback status_callback, void* status_callback_data);
-int pakfire_erase(struct pakfire* pakfire, int transaction_flags, int solver_flags,
-       const char** packages, const char** locks, int job_flags, int* changed,
-       pakfire_status_callback status_callback, void* status_callback_data);
-int pakfire_update(struct pakfire* pakfire, int transaction_flags, int solver_flags,
-       const char** packages, const char** locks, int jobs_flags, int* changed,
-       pakfire_status_callback status_callback, void* status_callback_data);
-
 // Check
 
 int pakfire_check(struct pakfire* pakfire, struct pakfire_filelist* errors);
 
-// Sync
-
-int pakfire_sync(struct pakfire* pakfire, int solver_flags, int flags, int* changed,
-       pakfire_status_callback status_callback, void* status_callback_data);
-
 #ifdef PAKFIRE_PRIVATE
 
 #include <sys/types.h>
index 0a0806c4269b24937ddfb650d11ed366bac52999..26dce9ba58793d37832346c8f1a1602a1a342a0c 100644 (file)
@@ -26,20 +26,16 @@ global:
        pakfire_copy_in;
        pakfire_copy_out;
        pakfire_create;
-       pakfire_erase;
        pakfire_get_arch;
        pakfire_get_path;
        pakfire_get_repo;
        pakfire_get_repos;
-       pakfire_install;
        pakfire_ref;
        pakfire_refresh;
        pakfire_search;
        pakfire_set_confirm_callback;
        pakfire_set_log_callback;
-       pakfire_sync;
        pakfire_unref;
-       pakfire_update;
        pakfire_version_compare;
        pakfire_whatprovides;
        pakfire_whatrequires;
index 3c84665879d7f711655406f49ebdc5ca80608007..535b32b1136fb81c994be0297a7d72f12280870c 100644 (file)
@@ -1894,212 +1894,13 @@ struct archive* pakfire_make_archive_disk_writer(struct pakfire* pakfire, int in
 
 // Convenience functions to install/erase/update packages
 
-static int pakfire_perform_transaction(
-               struct pakfire* pakfire,
-               int transaction_flags,
-               int solver_flags,
-               const enum pakfire_job_action action,
-               const char** packages,
-               const char** locks,
-               int job_flags,
-               int* changed,
-               pakfire_status_callback status_callback,
-               void* status_callback_data) {
-       struct pakfire_transaction* transaction = NULL;
-       int r = 1;
-
-       // Packages cannot be NULL
-       if (!packages) {
-               errno = EINVAL;
-               return 1;
-       }
-
-       // Acquire lock
-       r = pakfire_acquire_lock(pakfire);
-       if (r)
-               goto ERROR;
-
-       // Create a new transaction
-       r = pakfire_transaction_create(&transaction, pakfire, solver_flags);
-       if (r)
-               goto ERROR;
-
-       // Set status callback
-       if (status_callback)
-               pakfire_transaction_set_status_callback(
-                       transaction, status_callback, status_callback_data);
-
-       // Lock anything that should be locked
-       if (locks) {
-               for (const char** lock = locks; *lock; lock++) {
-                       r = pakfire_transaction_request(transaction, PAKFIRE_JOB_LOCK, *lock, 0);
-                       if (r) {
-                               ERROR(pakfire, "Could not lock '%s': %m\n", *lock);
-                               goto ERROR;
-                       }
-               }
-       }
-
-       // Perform action on all packages
-       for (const char** package = packages; *package; package++) {
-               r = pakfire_transaction_request(transaction, action, *package, job_flags);
-               if (r) {
-                       ERROR(pakfire, "Could not find '%s': %m\n", *package);
-                       goto ERROR;
-               }
-       }
-
-       // Solve the transaction
-       r = pakfire_transaction_solve(transaction, PAKFIRE_REQ_SOLVE_INTERACTIVE, NULL);
-       if (r)
-               goto ERROR;
-
-       // Set how many packages have been changed
-       if (changed)
-               *changed = pakfire_transaction_count(transaction);
-
-       // Run the transaction
-       r = pakfire_transaction_run(transaction);
-       if (r)
-               goto ERROR;
-
-       // Success
-       r = 0;
-
-ERROR:
-       // Release lock
-       pakfire_release_lock(pakfire);
-
-       if (transaction)
-               pakfire_transaction_unref(transaction);
-
-       return r;
-}
-
-PAKFIRE_EXPORT int pakfire_install(
-               struct pakfire* pakfire,
-               int transaction_flags,
-               int solver_flags,
-               const char** packages,
-               const char** locks,
-               int flags,
-               int* changed,
-               pakfire_status_callback status_callback,
-               void* status_callback_data) {
-       return pakfire_perform_transaction(
-               pakfire,
-               transaction_flags,
-               solver_flags,
-               PAKFIRE_JOB_INSTALL,
-               packages,
-               locks,
-               flags,
-               changed,
-               status_callback,
-               status_callback_data);
-}
-
-PAKFIRE_EXPORT int pakfire_erase(
-               struct pakfire* pakfire,
-               int transaction_flags,
-               int solver_flags,
-               const char** packages,
-               const char** locks,
-               int flags,
-               int* changed,
-               pakfire_status_callback status_callback,
-               void* status_callback_data) {
-       return pakfire_perform_transaction(
-               pakfire,
-               transaction_flags,
-               solver_flags,
-               PAKFIRE_JOB_ERASE,
-               packages,
-               locks,
-               flags,
-               changed,
-               status_callback,
-               status_callback_data);
-}
-
-static int pakfire_perform_transaction_simple(struct pakfire* pakfire, int solver_flags,
-               const enum pakfire_job_action action, int job_flags, int* changed,
-               pakfire_status_callback status_callback, void* status_callback_data) {
-       struct pakfire_transaction* transaction = NULL;
-       int r = 1;
-
-       // Acquire lock
-       r = pakfire_acquire_lock(pakfire);
-       if (r)
-               goto ERROR;
-
-       // Create a new transaction
-       r = pakfire_transaction_create(&transaction, pakfire, solver_flags);
-       if (r)
-               goto ERROR;
-
-       // Set status callback
-       if (status_callback)
-               pakfire_transaction_set_status_callback(
-                       transaction, status_callback, status_callback_data);
-
-       // Perform action
-       r = pakfire_transaction_request(transaction, action, NULL, job_flags);
-       if (r)
-               goto ERROR;
-
-       // Solve the transaction
-       r = pakfire_transaction_solve(transaction, PAKFIRE_REQ_SOLVE_INTERACTIVE, NULL);
-       if (r)
-               goto ERROR;
-
-       // Set how many packages have been changed
-       if (changed)
-               *changed = pakfire_transaction_count(transaction);
-
-       // Run the transaction
-       r = pakfire_transaction_run(transaction);
-       if (r)
-               goto ERROR;
-
-       // Success
-       r = 0;
-
-ERROR:
-       // Release lock
-       pakfire_release_lock(pakfire);
-
-       if (transaction)
-               pakfire_transaction_unref(transaction);
-
-       return r;
-}
-
-PAKFIRE_EXPORT int pakfire_update(
-               struct pakfire* pakfire,
-               int transaction_flags,
-               int solver_flags,
-               const char** packages,
-               const char** locks,
-               int flags,
-               int* changed,
-               pakfire_status_callback status_callback,
-               void* status_callback_data) {
-       // If no packages are being passed, we will try to update everything
-       // XXX add locks
-       if (!packages)
-               return pakfire_perform_transaction_simple(
-                       pakfire, solver_flags, PAKFIRE_JOB_UPDATE_ALL, flags, changed,
-                       status_callback, status_callback_data);
-
-       return pakfire_perform_transaction(pakfire, transaction_flags, solver_flags,
-               PAKFIRE_JOB_UPDATE, packages, locks, flags, changed,
-               status_callback, status_callback_data);
-}
-
 static int pakfire_verify(struct pakfire* pakfire, int *changed) {
+#if 0
        return pakfire_perform_transaction_simple(pakfire, 0, PAKFIRE_JOB_VERIFY,
                0, changed, NULL, NULL);
+#endif
+       #warning TODO
+       return 0;
 }
 
 static int pakfire_check_files(struct pakfire* pakfire,
@@ -2152,9 +1953,3 @@ ERROR:
 
        return r;
 }
-
-PAKFIRE_EXPORT int pakfire_sync(struct pakfire* pakfire, int solver_flags, int flags,
-               int* changed, pakfire_status_callback status_callback, void* status_callback_data) {
-       return pakfire_perform_transaction_simple(pakfire, solver_flags,
-               PAKFIRE_JOB_SYNC, flags, changed, status_callback, status_callback_data);
-}