From: Michael Tremer Date: Sat, 19 Jun 2021 13:15:45 +0000 (+0000) Subject: pakfire: Move refresh into libpakfire X-Git-Tag: 0.9.28~1222 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03359f5225257207d8554075b7bc3506217df645;p=pakfire.git pakfire: Move refresh into libpakfire Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index ca62a9bf1..39b3c1f5b 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -859,6 +859,21 @@ static PyObject* Pakfire_clean(PakfireObject* self) { Py_RETURN_NONE; } +static PyObject* Pakfire_refresh(PakfireObject* self, PyObject* args) { + int force = 0; + + if (!PyArg_ParseTuple(args, "|p", &force)) + return NULL; + + int r = pakfire_refresh(self->pakfire, force); + if (r) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + Py_RETURN_NONE; +} + static struct PyMethodDef Pakfire_methods[] = { { "bind", @@ -938,6 +953,12 @@ static struct PyMethodDef Pakfire_methods[] = { METH_VARARGS, NULL }, + { + "refresh", + (PyCFunction)Pakfire_refresh, + METH_VARARGS, + NULL, + }, { "search", (PyCFunction)Pakfire_search, diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index f286384ec..16faa7a58 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -48,6 +48,7 @@ Pakfire pakfire_unref(Pakfire pakfire); const char* pakfire_get_path(Pakfire pakfire); int pakfire_clean(Pakfire pakfire, int flags); +int pakfire_refresh(Pakfire pakfire, int flags); int pakfire_bind(Pakfire pakfire, const char* src, const char* dst, int flags); diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index 3cd59424f..ccb4a8fb9 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -83,7 +83,7 @@ int pakfire_repo_scan(PakfireRepo repo, int flags); // Refresh -int pakfire_repo_refresh(PakfireRepo repo, const int force); +int pakfire_repo_refresh(PakfireRepo repo, int force); #ifdef PAKFIRE_PRIVATE diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 13482a260..393b1b90b 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -40,6 +40,7 @@ global: pakfire_install; pakfire_read_makefile; pakfire_ref; + pakfire_refresh; pakfire_search; pakfire_set_installonly; pakfire_unref; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index f6ffb8dbe..20dd54933 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -1085,6 +1085,14 @@ PAKFIRE_EXPORT int pakfire_clean(Pakfire pakfire, int flags) { return pakfire_foreach_repo(pakfire, pakfire_repo_clean, flags); } +PAKFIRE_EXPORT int pakfire_refresh(Pakfire pakfire, int flags) { + // Do nothing if running in offline mode + if (pakfire_has_flag(pakfire, PAKFIRE_FLAGS_OFFLINE)) + return 0; + + return pakfire_foreach_repo(pakfire, pakfire_repo_refresh, flags); +} + static int pakfire_copy(Pakfire pakfire, const char* src, const char* dst) { char buffer[512 * 1024]; struct archive* reader = NULL; @@ -1395,6 +1403,11 @@ static PakfirePackageList pakfire_search_provides(Pakfire pakfire, const char* p } PAKFIRE_EXPORT PakfirePackageList pakfire_whatprovides(Pakfire pakfire, const char* what, int flags) { + // Refresh repositories + int r = pakfire_refresh(pakfire, 0); + if (r) + return NULL; + if (flags & PAKFIRE_NAME_ONLY) { flags &= ~PAKFIRE_NAME_ONLY; @@ -1405,6 +1418,11 @@ PAKFIRE_EXPORT PakfirePackageList pakfire_whatprovides(Pakfire pakfire, const ch } PAKFIRE_EXPORT PakfirePackageList pakfire_search(Pakfire pakfire, const char* what, int flags) { + // Refresh repositories + int r = pakfire_refresh(pakfire, 0); + if (r) + return NULL; + return pakfire_pool_dataiterator(pakfire, what, 0, PAKFIRE_SUBSTRING); } @@ -1596,6 +1614,11 @@ static int pakfire_perform_transaction(Pakfire pakfire, return 1; } + // Refresh repositories + r = pakfire_refresh(pakfire, 0); + if (r) + goto ERROR; + // Create a new request r = pakfire_request_create(&request, pakfire, 0); if (r) diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index 3ce328c3e..ef5126916 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -942,7 +942,7 @@ ERROR: return r; } -PAKFIRE_EXPORT int pakfire_repo_refresh(PakfireRepo repo, const int force) { +PAKFIRE_EXPORT int pakfire_repo_refresh(PakfireRepo repo, int force) { const char* name = pakfire_repo_get_name(repo); int r; diff --git a/src/pakfire/base.py b/src/pakfire/base.py index 497a7dfcb..07cd0f77c 100644 --- a/src/pakfire/base.py +++ b/src/pakfire/base.py @@ -40,18 +40,11 @@ class Pakfire(_pakfire.Pakfire): Called to initialize this Pakfire instance when the context is entered. """ - # Refresh repositories - self.refresh_repositories() - return PakfireContext(self) def __exit__(self, type, value, traceback): pass - def refresh_repositories(self, force=False): - for repo in self.repos: - repo.refresh(force=force) - class PakfireContext(object): """