[pacman-dev] [PATCH] Kill compute_requiredby usage in deps.c/can_remove_package()

Nagy Gabor ngaba at bibl.u-szeged.hu
Sat Apr 19 18:49:13 EDT 2008


From 5b83eec6d87dc43a1f9dface9540220d8188edcf Mon Sep 17 00:00:00 2001
From: Nagy Gabor <ngaba at bibl.u-szeged.hu>
Date: Sun, 20 Apr 2008 00:39:32 +0200
Subject: [PATCH] Kill compute_requiredby usage in deps.c/can_remove_package()

After this patch compute_requiredby is used nowhere in back-end, so it can be optimized for front-end.
* Before this patch the db param wasn't used, db == localdb was supposed
* This is a minor speed-up, since we needn't calculate the whole requiredby list, if we find an ,,external'' member

Signed-off-by: Nagy Gabor <ngaba at bibl.u-szeged.hu>
---
 lib/libalpm/deps.c |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 1eebca3..4216e2c 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -439,7 +439,7 @@ pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep)
 static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
 		int include_explicit)
 {
-	alpm_list_t *i, *requiredby;
+	alpm_list_t *i, *j;
 
 	if(_alpm_pkg_find(alpm_pkg_get_name(pkg), targets)) {
 		return(0);
@@ -461,15 +461,17 @@ static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
 	 * if checkdeps detected it would break something */
 
 	/* see if other packages need it */
-	requiredby = alpm_pkg_compute_requiredby(pkg);
-	for(i = requiredby; i; i = i->next) {
-		pmpkg_t *reqpkg = _alpm_db_get_pkgfromcache(db, i->data);
-		if(reqpkg && !_alpm_pkg_find(alpm_pkg_get_name(reqpkg), targets)) {
-			FREELIST(requiredby);
-			return(0);
-		}
+	for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
+		pmpkg_t *lpkg = i->data;
+		for(j = alpm_pkg_get_depends(lpkg); j; j = j->next) {
+			if(alpm_depcmp(pkg, j->data)) {
+				if(!_alpm_pkg_find(lpkg->name, targets)) {
+					return(0);
+				}
+				break;
+			}
+		}	
 	}
-	FREELIST(requiredby);
 
 	/* it's ok to remove */
 	return(1);
-- 
1.5.3.8





More information about the pacman-dev mailing list