From 5b83eec6d87dc43a1f9dface9540220d8188edcf Mon Sep 17 00:00:00 2001 From: Nagy Gabor <ngaba@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@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