From a23f6f4afb0f819c6c478975df41e235e8d0953a Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Tue, 14 Apr 2009 18:48:02 +0300 Subject: state: rework changeset calculation algorithm Calculate changesets directly by stabilizating the package graph instead of recalculating the whole graph and then diffing (similar approach as seen in 'smart' package manager). The algorithm is not complete: defferred search space forking is missing. So you don't always get a solution on complex graphs. Benefits: - usually the search state tree is smaller (less memory used) - speed relational to changeset size, not database size (usually faster) - touch only packages related to users request (can work on partitially broken state; upgrades only necessary packages, fixes #7) Also implemented: - command prompt to confirm operation if packages are deleted or downgraded - requesting deletion of package suggests removal of all packages depending on the package being removed (you'll get list of packages that also get removed if you want package X removed) - option --simulate to see what would have been done (mainly for testing) - an untested implementation of versioned dependencies and conflicts A lot has changed, so expect new bugs too. --- src/apk_package.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/apk_package.h') diff --git a/src/apk_package.h b/src/apk_package.h index bf0ae95..8ce7e9f 100644 --- a/src/apk_package.h +++ b/src/apk_package.h @@ -28,6 +28,9 @@ struct apk_name; #define APK_SCRIPT_PRE_UPGRADE 5 #define APK_SCRIPT_POST_UPGRADE 6 +#define APK_PKG_NOT_INSTALLED 0 +#define APK_PKG_INSTALLED 1 + struct apk_script { struct hlist_node script_list; unsigned int type; @@ -35,10 +38,14 @@ struct apk_script { char script[]; }; +#define APK_DEPMASK_REQUIRE (APK_VERSION_EQUAL|APK_VERSION_LESS|\ + APK_VERSION_GREATER) +#define APK_DEPMASK_CONFLICT (0) + struct apk_dependency { struct apk_name *name; - char *min_version; - char *max_version; + int result_mask; + char *version; }; APK_ARRAY(apk_dependency_array, struct apk_dependency); @@ -46,7 +53,7 @@ struct apk_package { apk_hash_node hash_node; csum_t csum; - unsigned id, repos; + unsigned repos; struct apk_name *name; char *version; char *url, *description, *license; -- cgit v1.2.3