summaryrefslogtreecommitdiff
path: root/src/database.c
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2012-02-24 18:27:55 +0200
committerTimo Teräs <timo.teras@iki.fi>2012-02-24 18:29:30 +0200
commit12bdec38a376f787a8aa621c965b561387b445ce (patch)
tree055074fe2eb53047f62282ab11dc8ecc4dadd06a /src/database.c
parent99145e2c0dc0b5b3b5a2a72fb1bff140d1f583f3 (diff)
downloadapk-tools-12bdec38a376f787a8aa621c965b561387b445ce.tar.gz
apk-tools-12bdec38a376f787a8aa621c965b561387b445ce.tar.bz2
apk-tools-12bdec38a376f787a8aa621c965b561387b445ce.tar.xz
apk-tools-12bdec38a376f787a8aa621c965b561387b445ce.zip
solver, dot: elementary provides fixes
implementation is still not near finished, but now at least it can handle it to a minimum degree. many cases are not done right yet, though. ref #574.
Diffstat (limited to 'src/database.c')
-rw-r--r--src/database.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/database.c b/src/database.c
index ed8b8ee..ae6810b 100644
--- a/src/database.c
+++ b/src/database.c
@@ -518,9 +518,15 @@ riif_done:
return;
}
+static inline void add_provider(struct apk_name *name, struct apk_provider p)
+{
+ *apk_provider_array_add(&name->providers) = p;
+}
+
struct apk_package *apk_db_pkg_add(struct apk_database *db, struct apk_package *pkg)
{
struct apk_package *idb;
+ int i;
if (pkg->license == NULL)
pkg->license = apk_blob_atomize(APK_BLOB_NULL);
@@ -529,8 +535,11 @@ struct apk_package *apk_db_pkg_add(struct apk_database *db, struct apk_package *
if (idb == NULL) {
idb = pkg;
apk_hash_insert(&db->available.packages, pkg);
- *apk_provider_array_add(&pkg->name->providers) =
- APK_PROVIDER_FROM_PACKAGE(pkg);
+ add_provider(pkg->name, APK_PROVIDER_FROM_PACKAGE(pkg));
+ for (i = 0; i < pkg->provides->num; i++) {
+ struct apk_dependency *dep = &pkg->provides->item[i];
+ add_provider(dep->name, APK_PROVIDER_FROM_PROVIDES(pkg, dep));
+ }
apk_db_pkg_rdepends(db, pkg);
} else {
idb->repos |= pkg->repos;