From: Michael Tremer Date: Mon, 21 Jun 2021 10:58:31 +0000 (+0000) Subject: libpakfire: Implement "check" command X-Git-Tag: 0.9.28~1213 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d37d8d56a1bbcccb7e308f8af253201d65e127fc;p=pakfire.git libpakfire: Implement "check" command Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 6a32772c0..400db9cc3 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -1042,6 +1042,16 @@ static PyObject* Pakfire_refresh(PakfireObject* self, PyObject* args) { Py_RETURN_NONE; } +static PyObject* Pakfire_check(PakfireObject* self) { + int r = pakfire_check(self->pakfire); + if (r) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + Py_RETURN_NONE; +} + static struct PyMethodDef Pakfire_methods[] = { { "bind", @@ -1055,6 +1065,12 @@ static struct PyMethodDef Pakfire_methods[] = { METH_VARARGS|METH_KEYWORDS, NULL }, + { + "check", + (PyCFunction)Pakfire_check, + METH_NOARGS, + NULL, + }, { "clean", (PyCFunction)Pakfire_clean, diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index 16faa7a58..2eed931ce 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -86,6 +86,10 @@ int pakfire_install(Pakfire pakfire, const char** packages, int flags, int* chan int pakfire_erase(Pakfire pakfire, const char** packages, int flags, int* changed); int pakfire_update(Pakfire pakfire, const char** packages, int flags, int* changed); +// Check + +int pakfire_check(Pakfire pakfire); + #ifdef PAKFIRE_PRIVATE #include diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 393b1b90b..8e519c5ba 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -22,6 +22,7 @@ LIBPAKFIRE_0 { global: # pakfire pakfire_bind; + pakfire_check; pakfire_clean; pakfire_copy_in; pakfire_copy_out; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 20dd54933..362f6beca 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -1681,3 +1681,24 @@ PAKFIRE_EXPORT int pakfire_update(Pakfire pakfire, const char** packages, return pakfire_perform_transaction(pakfire, pakfire_request_upgrade, packages, flags, changed); } + +PAKFIRE_EXPORT int pakfire_check(Pakfire pakfire) { + struct pakfire_db* db = NULL; + int r; + + // Open database in read-only mode and try to load all installed packages + r = pakfire_db_open(&db, pakfire, PAKFIRE_DB_READWRITE); + if (r) + goto ERROR; + + // Perform a database integrity check + r = pakfire_db_check(db); + if (r) + goto ERROR; + +ERROR: + if (db) + pakfire_db_unref(db); + + return r; +} diff --git a/src/pakfire/cli.py b/src/pakfire/cli.py index 03f8a74bc..0250d2a8e 100644 --- a/src/pakfire/cli.py +++ b/src/pakfire/cli.py @@ -303,12 +303,7 @@ class Cli(object): p.clean() def handle_check(self, ns): - with self.pakfire(ns) as p: - # This will throw an exception when there are errors - transaction = p.check() - - print(_("Everything okay")) - + self.pakfire(ns).check() class CliClient(Cli):