]> git.ipfire.org Git - pakfire.git/commitdiff
packages: Move pakfire_package_{g,s}et_filename into string function
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 25 Oct 2022 16:21:41 +0000 (16:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 25 Oct 2022 16:21:41 +0000 (16:21 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/package.c
src/libpakfire/db.c
src/libpakfire/include/pakfire/package.h
src/libpakfire/libpakfire.sym
src/libpakfire/package.c
src/libpakfire/packager.c
src/libpakfire/repo.c
src/libpakfire/transaction.c

index c9c65abf96b20bdf57326ce8438e2ee0f7160d3c..631112958275ff3b647e3ca37e0f3b3361feee1d 100644 (file)
@@ -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) {
index 98dc007332c8a80bb99e92dcd6b2e9ffe833f7c9..d31b3f366a5a01bf7d093e085a802931789b64bc 100644 (file)
@@ -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
index 1c5112231a08d81bb7875983631e61ca95e5ec4c..9b6aaf4e2554955f02c8e4666180f1393f67af7c 100644 (file)
@@ -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);
index d1bf206ae9e7252ccb1621f3d84847e78144cecb..d457d94624c2aa0247658aa4d3aa4c54e79c2875 100644 (file)
@@ -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;
index a677da06c463d460277f51906feaae96efe16ff2..bd404bdc01531997392b64523141fa0f7c2a08de 100644 (file)
@@ -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);
index 8226c296cef8406b56daa58b25525da92ea9d6b8..05957b0b8f39a8c5523a4198097c8c16ea40e75e 100644 (file)
@@ -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))
index 025143b194ee9f56accf5ed3c77dcf5c9f72ee31..438d119405f20ffebc5f4c41f4997fcd7ffcfcbe 100644 (file)
@@ -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);
index 42b7a3968b47b522f8d922738dc8d5231a6fd33d..d14d33260c600a6e1a3b4e13c361476c4545946c 100644 (file)
@@ -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;