From: Michael Tremer Date: Mon, 22 Jan 2018 17:52:03 +0000 (+0100) Subject: libpakfire: Move Repository.get_config function into C library X-Git-Tag: 0.9.28~1285^2~1129 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8e163f76a0ed26f52dd34b9e43fdf94760a45322;p=pakfire.git libpakfire: Move Repository.get_config function into C library Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/repo.c b/src/_pakfire/repo.c index 659f7e37d..dd4266d68 100644 --- a/src/_pakfire/repo.c +++ b/src/_pakfire/repo.c @@ -189,6 +189,19 @@ static int Repo_set_mirrorlist(RepoObject* self, PyObject* value) { return pakfire_repo_set_mirrorlist(self->repo, mirrorlist); } +static PyObject* Repo_get_config(RepoObject* self) { + char* config = pakfire_repo_get_config(self->repo); + + if (config) { + PyObject* obj = PyUnicode_FromString(config); + pakfire_free(config); + + return obj; + } + + Py_RETURN_NONE; +} + static PyObject* Repo_read_solv(RepoObject* self, PyObject* args) { const char* filename = NULL; @@ -370,6 +383,12 @@ static struct PyMethodDef Repo_methods[] = { METH_VARARGS, NULL, }, + { + "get_config", + (PyCFunction)Repo_get_config, + METH_NOARGS, + NULL, + }, { "read_solv", (PyCFunction)Repo_read_solv, diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index 30050d150..8fde3e1f3 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -56,6 +56,8 @@ int pakfire_repo_set_keyfile(PakfireRepo repo, const char* keyfile); const char* pakfire_repo_get_mirrorlist(PakfireRepo repo); int pakfire_repo_set_mirrorlist(PakfireRepo repo, const char* mirrorlist); +char* pakfire_repo_get_config(PakfireRepo repo); + int pakfire_repo_is_installed_repo(PakfireRepo repo); int pakfire_repo_read_solv(PakfireRepo repo, const char* filename, int flags); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 8dba79580..bd64a7a7d 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -227,6 +227,7 @@ global: pakfire_repo_create; pakfire_repo_get_baseurl; pakfire_repo_get_cache; + pakfire_repo_get_config; pakfire_repo_get_name; pakfire_repo_get_enabled; pakfire_repo_get_keyfile; diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index 4468abf98..f58380fd6 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -301,6 +301,40 @@ PAKFIRE_EXPORT int pakfire_repo_set_mirrorlist(PakfireRepo repo, const char* mir return 0; } +PAKFIRE_EXPORT char* pakfire_repo_get_config(PakfireRepo repo) { + if (pakfire_repo_is_installed_repo(repo) == 0) + return NULL; + + char buffer[1024 * 4]; + char* p = buffer; + + // Headline + p += sprintf(p, "[repo:%s]\n", pakfire_repo_get_name(repo)); + + // Enabled + p += sprintf(p, "enabled = %d\n", pakfire_repo_get_enabled(repo)); + + // Base URL + const char* baseurl = pakfire_repo_get_baseurl(repo); + if (baseurl) + p += sprintf(p, "baseurl = %s\n", baseurl); + + // Mirror List + const char* mirrorlist = pakfire_repo_get_mirrorlist(repo); + if (mirrorlist) + p += sprintf(p, "mirrors = %s\n", mirrorlist); + + // Key File + const char* keyfile = pakfire_repo_get_keyfile(repo); + if (keyfile) + p += sprintf(p, "keyfile = %s\n", keyfile); + + // Priority + p += sprintf(p, "priority = %d\n", pakfire_repo_get_priority(repo)); + + return pakfire_strdup(buffer); +} + PAKFIRE_EXPORT int pakfire_repo_is_installed_repo(PakfireRepo repo) { PakfireRepo installed_repo = pakfire_get_installed_repo(repo->pakfire); diff --git a/src/pakfire/repository/base.py b/src/pakfire/repository/base.py index ea56d0eb0..989d1744a 100644 --- a/src/pakfire/repository/base.py +++ b/src/pakfire/repository/base.py @@ -88,13 +88,6 @@ class RepositoryFactory(_pakfire.Repo): return "\n\n".join(dumps) - def get_config(self): - """ - Return the configuration as a list of string which - can be written to a configuration file. - """ - pass - class RepositoryDummy(RepositoryFactory): """ diff --git a/src/pakfire/repository/remote.py b/src/pakfire/repository/remote.py index cd2b85075..289c1c2ce 100644 --- a/src/pakfire/repository/remote.py +++ b/src/pakfire/repository/remote.py @@ -268,27 +268,3 @@ class RepositoryRemote(base.RepositoryFactory): grabber.increment_mirror(grabber) return os.path.join(self.cache.path, cache_filename) - - def get_config(self): - if self.enabled: - enabled = "1" - else: - enabled = "0" - - lines = [ - "[repo:%s]" % self.name, - "description = %s" % self.description, - "enabled = %s" % enabled, - "baseurl = %s" % self.baseurl, - ] - - mirrors = self.settings.get("mirrors", None) - if mirrors: - lines.append("mirrors = %s" % mirrors) - - lines += [ - #"gpgkey = %s" % self.keyfile, - "priority = %s" % self.priority, - ] - - return lines