]> git.ipfire.org Git - pakfire.git/commitdiff
db: Read userinstalled packages when loading database
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 23 Jun 2021 16:08:49 +0000 (16:08 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 23 Jun 2021 16:08:49 +0000 (16:08 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/db.c

index 9ef7b7d3ca6d07538fc1b3d8d097b947c5e4e36c..779eb147b991270df595ae98def1305a8ff44a9b 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <time.h>
 
+#include <solv/solver.h>
 #include <sqlite3.h>
 
 #include <pakfire/archive.h>
@@ -650,6 +651,16 @@ ssize_t pakfire_db_packages(struct pakfire_db* db) {
        return packages;
 }
 
+static void pakfire_db_add_userinstalled(Pakfire pakfire, const char* name) {
+       Pool* pool = pakfire_get_solv_pool(pakfire);
+
+       // Convert name to ID
+       Id id = pool_str2id(pool, name, 1);
+
+       // Append it to pooljobs
+       queue_push2(&pool->pooljobs, SOLVER_USERINSTALLED|SOLVER_SOLVABLE_NAME, id);
+}
+
 static int pakfire_db_add_dependencies(struct pakfire_db* db, unsigned long id, PakfirePackage pkg) {
        sqlite3_stmt* stmt = NULL;
        int r = 1;
@@ -1455,8 +1466,13 @@ static int pakfire_db_load_package(struct pakfire_db* db, PakfireRepo repo, sqli
                pakfire_package_set_install_time(pkg, install_time);
        }
 
+       // installed by user?
+       int userinstalled = sqlite3_column_int(stmt, 16);
+       if (userinstalled)
+               pakfire_db_add_userinstalled(db->pakfire, name);
+
        // Files
-       const char* files = (const char*)sqlite3_column_text(stmt, 16);
+       const char* files = (const char*)sqlite3_column_text(stmt, 17);
        if (files) {
                r = pakfire_package_set_filelist_from_string(pkg, files);
                if (r)
@@ -1469,15 +1485,15 @@ static int pakfire_db_load_package(struct pakfire_db* db, PakfireRepo repo, sqli
                unsigned int field;
                void (*func)(PakfirePackage pkg, const char* dep);
        } dependencies[] = {
-               { 17, pakfire_package_add_provides },
-               { 18, pakfire_package_add_prerequires },
-               { 10, pakfire_package_add_requires },
-               { 20, pakfire_package_add_conflicts },
-               { 21, pakfire_package_add_obsoletes },
-               { 22, pakfire_package_add_recommends },
-               { 23, pakfire_package_add_suggests },
-               { 24, pakfire_package_add_supplements },
-               { 25, pakfire_package_add_enhances },
+               { 18, pakfire_package_add_provides },
+               { 19, pakfire_package_add_prerequires },
+               { 20, pakfire_package_add_requires },
+               { 21, pakfire_package_add_conflicts },
+               { 22, pakfire_package_add_obsoletes },
+               { 23, pakfire_package_add_recommends },
+               { 24, pakfire_package_add_suggests },
+               { 25, pakfire_package_add_supplements },
+               { 26, pakfire_package_add_enhances },
                { 0, NULL },
        };
 
@@ -1515,7 +1531,7 @@ int pakfire_db_load(struct pakfire_db* db, PakfireRepo repo) {
                "SELECT "
                        "name, evr, arch, groups, filename, size, inst_size, hash1, license, summary, "
                        "description, uuid, vendor, build_host, build_time, "
-                       "strftime('%s', installed) AS installed, "
+                       "strftime('%s', installed) AS installed, userinstalled, "
                        "("
                                "SELECT group_concat(path, '\n') FROM files WHERE files.pkg = packages.id"
                        ") AS files, "