From 8ef6c3885823a1d81889603cf92298a08fdf7892 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 20 Jan 2018 14:33:12 +0100 Subject: [PATCH] Drop functions to enable/disable a repository This is implemented in the repositories itself Signed-off-by: Michael Tremer --- src/_pakfire/package.c | 6 +++--- src/_pakfire/pakfire.c | 26 ++++++++++++++++++++++++-- src/_pakfire/repo.c | 12 ++++++------ src/_pakfire/repo.h | 2 +- src/pakfire/cli.py | 10 ++++++---- src/pakfire/repository/__init__.py | 16 ---------------- 6 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/_pakfire/package.c b/src/_pakfire/package.c index 9468a1fba..f3003c5d8 100644 --- a/src/_pakfire/package.c +++ b/src/_pakfire/package.c @@ -447,12 +447,12 @@ static PyObject* Package_get_cache_path(PackageObject* self) { static PyObject* Package_get_repo(PackageObject* self) { PakfireRepo repo = pakfire_package_get_repo(self->package); if (!repo) - return NULL; + Py_RETURN_NONE; - const char* name = pakfire_repo_get_name(repo); + PyObject* obj = new_repo(&RepoType, repo); pakfire_repo_unref(repo); - return new_repo(self->pakfire, name); + return obj; } static int Package_set_repo(PackageObject* self, PyObject* value) { diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 09aa2600b..e12b5d809 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -79,6 +79,22 @@ static PyObject* Pakfire_get_arch(PakfireObject* self) { return PyUnicode_FromString(arch); } +static PyObject* Pakfire_get_repo(PakfireObject* self, PyObject* args) { + const char* name = NULL; + + if (!PyArg_ParseTuple(args, "s", &name)) + return NULL; + + PakfireRepo repo = pakfire_get_repo(self->pakfire, name); + if (!repo) + Py_RETURN_NONE; + + PyObject* obj = new_repo(&RepoType, repo); + pakfire_repo_unref(repo); + + return obj; +} + static PyObject* Pakfire_get_cache_path(PakfireObject* self) { char* path = pakfire_get_cache_path(self->pakfire, NULL); if (!path) @@ -104,8 +120,8 @@ static PyObject* Pakfire_get_installed_repo(PakfireObject* self) { if (!repo) Py_RETURN_NONE; - PyObject* obj = new_repo(self, pakfire_repo_get_name(repo)); - Py_XINCREF(obj); + PyObject* obj = new_repo(&RepoType, repo); + pakfire_repo_unref(repo); return obj; } @@ -294,6 +310,12 @@ static struct PyMethodDef Pakfire_methods[] = { METH_VARARGS, NULL }, + { + "get_repo", + (PyCFunction)Pakfire_get_repo, + METH_VARARGS, + NULL + }, { "import_key", (PyCFunction)Pakfire_import_key, diff --git a/src/_pakfire/repo.c b/src/_pakfire/repo.c index 48b17e74c..00a1b9fb1 100644 --- a/src/_pakfire/repo.c +++ b/src/_pakfire/repo.c @@ -28,13 +28,13 @@ #include "package.h" #include "repo.h" -PyObject* new_repo(PakfireObject* pakfire, const char* name) { - PyObject* args = Py_BuildValue("Os", (PyObject *)pakfire, name); - PyObject* repo = PyObject_CallObject((PyObject *)&RepoType, args); - - Py_DECREF(args); +PyObject* new_repo(PyTypeObject* type, PakfireRepo repo) { + RepoObject* self = (RepoObject *)type->tp_alloc(type, 0); + if (self) { + self->repo = pakfire_repo_ref(repo); + } - return repo; + return (PyObject*)self; } static PyObject* Repo_new(PyTypeObject* type, PyObject* args, PyObject* kwds) { diff --git a/src/_pakfire/repo.h b/src/_pakfire/repo.h index ecda9a28c..3a25f0eca 100644 --- a/src/_pakfire/repo.h +++ b/src/_pakfire/repo.h @@ -35,6 +35,6 @@ typedef struct { extern PyTypeObject RepoType; -PyObject* new_repo(PakfireObject* pakfire, const char* name); +PyObject* new_repo(PyTypeObject* type, PakfireRepo repo); #endif /* PYTHON_PAKFIRE_REPO_H */ diff --git a/src/pakfire/cli.py b/src/pakfire/cli.py index bb2e42eec..4b76d2779 100644 --- a/src/pakfire/cli.py +++ b/src/pakfire/cli.py @@ -192,12 +192,14 @@ class Cli(object): p = base.Pakfire() # Disable repositories. - for repo in ns.disable_repo: - p.repos.disable_repo(repo) + for repo_name in ns.disable_repo: + repo = p.get_repo(repo_name) + repo.enabled = False # Enable repositories. - for repo in ns.enable_repo: - p.repos.enable_repo(repo) + for repo_name in ns.enable_repo: + repo = p.get_repo(repo_name) + repo.enabled = True return p diff --git a/src/pakfire/repository/__init__.py b/src/pakfire/repository/__init__.py index 4225bd0c2..05a8e2574 100644 --- a/src/pakfire/repository/__init__.py +++ b/src/pakfire/repository/__init__.py @@ -170,22 +170,6 @@ class Repositories(object): except KeyError: return self.dummy - def enable_repo(self, name): - for repo in self: - if repo == self.local: - continue - - if repo.name == name or name == "*": - repo.enabled = True - - def disable_repo(self, name): - for repo in self: - if repo == self.local: - continue - - if repo.name == name or name == "*": - repo.enabled = False - def clean(self): log.info("Cleaning up all repository caches...") -- 2.39.5