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

Nagy Gabor ngaba at bibl.u-szeged.hu
Mon Apr 21 06:19:37 EDT 2008


From 7a390333be1b3ab5644c4e39d98538e32ee3e3ec Mon Sep 17 00:00:00 2001
From: Nagy Gabor <ngaba at bibl.u-szeged.hu>
Date: Mon, 21 Apr 2008 12:16:15 +0200
Subject: [PATCH] Kill compute_requiredby usage in deps.c/can_remove_package()

In the can_remove_package function, we don't need to compute the
whole requiredby list, we just need to find one member of it that
doesn't belong to the targets list.
That way we get a small speedup and remove the only usage of
alpm_pkg_compute_requiredby in the backend, so that it can be tweaked
for frontend usage.

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