FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux Pacman Development

 
 
LinkBack Thread Tools
 
Old 04-21-2008, 10:19 AM
Nagy Gabor
 
Default Kill compute_requiredby usage in deps.c/can_remove_package() (RESUBMIT)

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

_______________________________________________
pacman-dev mailing list
pacman-dev@archlinux.org
http://archlinux.org/mailman/listinfo/pacman-dev
 

Thread Tools




All times are GMT. The time now is 04:18 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org