From: Michael Tremer Date: Tue, 25 Oct 2022 16:21:41 +0000 (+0000) Subject: packages: Move pakfire_package_{g,s}et_filename into string function X-Git-Tag: 0.9.28~217 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0aade652a9bab598547230aefbc87724efb38534;p=pakfire.git packages: Move pakfire_package_{g,s}et_filename into string function Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/package.c b/src/_pakfire/package.c index c9c65abf9..631112958 100644 --- a/src/_pakfire/package.c +++ b/src/_pakfire/package.c @@ -309,7 +309,7 @@ static void Package_set_maintainer(PackageObject* self, PyObject* value) { } static PyObject* Package_get_filename(PackageObject* self) { - const char* filename = pakfire_package_get_filename(self->package); + const char* filename = pakfire_package_get_string(self->package, PAKFIRE_PKG_FILENAME); if (!filename) Py_RETURN_NONE; @@ -319,7 +319,7 @@ static PyObject* Package_get_filename(PackageObject* self) { static void Package_set_filename(PackageObject* self, PyObject* value) { const char* filename = PyUnicode_FromValue(value); - pakfire_package_set_filename(self->package, filename); + pakfire_package_set_string(self->package, PAKFIRE_PKG_FILENAME, filename); } static PyObject* Package_get_installed(PackageObject* self) { diff --git a/src/libpakfire/db.c b/src/libpakfire/db.c index 98dc00733..d31b3f366 100644 --- a/src/libpakfire/db.c +++ b/src/libpakfire/db.c @@ -1365,7 +1365,7 @@ int pakfire_db_add_package(struct pakfire_db* db, } // Bind filename - const char* filename = pakfire_package_get_filename(pkg); + const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME); r = sqlite3_bind_text(stmt, 5, filename, -1, NULL); if (r) { @@ -1765,7 +1765,9 @@ static int pakfire_db_load_package(struct pakfire_db* db, struct pakfire_repo* r // Filename const char* filename = (const char*)sqlite3_column_text(stmt, 5); if (filename) { - pakfire_package_set_filename(pkg, filename); + r = pakfire_package_set_string(pkg, PAKFIRE_PKG_FILENAME, filename); + if (r) + goto ERROR; } // Size diff --git a/src/libpakfire/include/pakfire/package.h b/src/libpakfire/include/pakfire/package.h index 1c5112231..9b6aaf4e2 100644 --- a/src/libpakfire/include/pakfire/package.h +++ b/src/libpakfire/include/pakfire/package.h @@ -45,6 +45,7 @@ enum pakfire_package_key { PAKFIRE_PKG_VENDOR, PAKFIRE_PKG_DISTRO, PAKFIRE_PKG_MAINTAINER, + PAKFIRE_PKG_FILENAME, }; int pakfire_package_create(struct pakfire_package** package, struct pakfire* pakfire, @@ -67,10 +68,8 @@ const unsigned char* pakfire_package_get_digest(struct pakfire_package* pkg, enum pakfire_digest_types* type, size_t* length); int pakfire_package_set_digest(struct pakfire_package* pkg, enum pakfire_digest_types type, const unsigned char* digest, const size_t length); -const char* pakfire_package_get_filename(struct pakfire_package* pkg); const char* pakfire_package_get_path(struct pakfire_package* pkg); void pakfire_package_set_path(struct pakfire_package* pkg, const char* path); -void pakfire_package_set_filename(struct pakfire_package* pkg, const char* filename); int pakfire_package_is_installed(struct pakfire_package* pkg); size_t pakfire_package_get_downloadsize(struct pakfire_package* pkg); void pakfire_package_set_downloadsize(struct pakfire_package* pkg, size_t downloadsize); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index d1bf206ae..d457d9462 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -176,7 +176,6 @@ global: pakfire_package_get_downloadsize; pakfire_package_get_enhances; pakfire_package_get_filelist; - pakfire_package_get_filename; pakfire_package_get_location; pakfire_package_get_installsize; pakfire_package_get_install_time; @@ -205,7 +204,6 @@ global: pakfire_package_set_checksum; pakfire_package_set_downloadsize; pakfire_package_set_filelist; - pakfire_package_set_filename; pakfire_package_set_installsize; pakfire_package_set_install_time; pakfire_package_set_path; diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index a677da06c..bd404bdc0 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -286,6 +286,43 @@ static void pakfire_package_has_changed(struct pakfire_package* pkg) { } } +// Removes epoch +static const char* evr2vr(const char* evr) { + const char* p = evr; + + // Skip any leading digits + for (; *p >= '0' && *p <= '9'; p++); + + // If after the leading digits, we found :, we return the rest of the string + if (p != evr && *p == ':') + return ++p; + + return evr; +} + +static const char* pakfire_package_make_filename(struct pakfire_package* pkg) { + int r; + + if (!*pkg->filename) { + const char* name = pakfire_package_get_string(pkg, PAKFIRE_PKG_NAME); + const char* evr = pakfire_package_get_string(pkg, PAKFIRE_PKG_EVR); + const char* arch = pakfire_package_get_string(pkg, PAKFIRE_PKG_ARCH); + + if (!name || !evr || !arch) + return NULL; + + const char* vr = evr2vr(evr); + if (!vr) + return NULL; + + r = pakfire_string_format(pkg->filename, "%s-%s.%s.pfm", name, vr, arch); + if (r) + return NULL; + } + + return pkg->filename; +} + PAKFIRE_EXPORT const char* pakfire_package_get_string( struct pakfire_package* pkg, const enum pakfire_package_key key) { const char* ret = NULL; @@ -350,6 +387,14 @@ PAKFIRE_EXPORT const char* pakfire_package_get_string( case PAKFIRE_PKG_MAINTAINER: ret = solvable_lookup_str(s, SOLVABLE_PACKAGER); break; + + case PAKFIRE_PKG_FILENAME: + ret = solvable_lookup_str(s, SOLVABLE_MEDIAFILE); + + // Generate the filename if not set + if (!ret) + ret = pakfire_package_make_filename(pkg); + break; } return ret; @@ -428,6 +473,10 @@ PAKFIRE_EXPORT int pakfire_package_set_string( case PAKFIRE_PKG_MAINTAINER: id = SOLVABLE_PACKAGER; break; + + case PAKFIRE_PKG_FILENAME: + id = SOLVABLE_MEDIAFILE; + break; } // Check if we have found a valid ID @@ -548,7 +597,7 @@ ERROR: } static int pakfire_package_make_cache_path(struct pakfire_package* pkg) { - const char* filename = pakfire_package_get_filename(pkg); + const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME); enum pakfire_digest_types digest_type = PAKFIRE_DIGEST_UNDEFINED; size_t digest_length = 0; @@ -570,7 +619,7 @@ PAKFIRE_EXPORT const char* pakfire_package_get_path(struct pakfire_package* pkg) if (!*pkg->path) { const char* base = pakfire_package_get_string(pkg, SOLVABLE_MEDIABASE); if (base) { - const char* filename = pakfire_package_get_filename(pkg); + const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME); if (!filename) return NULL; @@ -598,51 +647,6 @@ PAKFIRE_EXPORT void pakfire_package_set_path(struct pakfire_package* pkg, const pakfire_string_set(pkg->path, path); } -// Removes epoch -static const char* evr2vr(const char* evr) { - const char* p = evr; - - // Skip any leading digits - for (; *p >= '0' && *p <= '9'; p++); - - // If after the leading digits, we found :, we return the rest of the string - if (p != evr && *p == ':') - return ++p; - - return evr; -} - -static const char* pakfire_package_make_filename(struct pakfire_package* pkg) { - if (!*pkg->filename) { - const char* name = pakfire_package_get_string(pkg, PAKFIRE_PKG_NAME); - const char* evr = pakfire_package_get_string(pkg, PAKFIRE_PKG_EVR); - const char* arch = pakfire_package_get_string(pkg, PAKFIRE_PKG_ARCH); - - if (!name || !evr || !arch) - return NULL; - - const char* vr = evr2vr(evr); - - pakfire_string_format(pkg->filename, "%s-%s.%s.pfm", name, vr, arch); - } - - return pkg->filename; -} - -PAKFIRE_EXPORT const char* pakfire_package_get_filename(struct pakfire_package* pkg) { - const char* filename = pakfire_package_get_string(pkg, SOLVABLE_MEDIAFILE); - - // Generate the filename if not set - if (!filename) - filename = pakfire_package_make_filename(pkg); - - return filename; -} - -PAKFIRE_EXPORT void pakfire_package_set_filename(struct pakfire_package* pkg, const char* filename) { - pakfire_package_set_string(pkg, SOLVABLE_MEDIAFILE, filename); -} - PAKFIRE_EXPORT int pakfire_package_is_installed(struct pakfire_package* pkg) { Pool* pool = pakfire_get_solv_pool(pkg->pakfire); Solvable* s = get_solvable(pkg); diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index 8226c296c..05957b0b8 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -173,7 +173,7 @@ struct pakfire_packager* pakfire_packager_unref( const char* pakfire_packager_filename(struct pakfire_packager* packager) { if (!*packager->filename) { - const char* filename = pakfire_package_get_filename(packager->pkg); + const char* filename = pakfire_package_get_string(packager->pkg, PAKFIRE_PKG_FILENAME); // Add arch if (pakfire_package_is_source(packager->pkg)) diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index 025143b19..438d11940 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -1481,7 +1481,7 @@ PAKFIRE_EXPORT int pakfire_repo_compose(struct pakfire* pakfire, const char* pat goto OUT; } - const char* filename = pakfire_package_get_filename(package); + const char* filename = pakfire_package_get_string(package, PAKFIRE_PKG_FILENAME); // Make new path r = pakfire_path_join(destination_path, path, filename); diff --git a/src/libpakfire/transaction.c b/src/libpakfire/transaction.c index 42b7a3968..d14d33260 100644 --- a/src/libpakfire/transaction.c +++ b/src/libpakfire/transaction.c @@ -1155,7 +1155,7 @@ static int pakfire_transaction_download_package(struct pakfire_transaction* tran } // What file to download? - const char* filename = pakfire_package_get_filename(pkg); + const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME); if (!filename) { ERROR(transaction->pakfire, "Could not retrieve filename for package %s: %m\n", nevra); goto ERROR;