diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libalpm/add.c | 16 | ||||
| -rw-r--r-- | lib/libalpm/remove.c | 6 | 
2 files changed, 14 insertions, 8 deletions
| diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index b2cacf81..0bbf0755 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -98,9 +98,10 @@ int add_loadtarget(pmdb_t *db, pmtrans_t *trans, char *name)  		if(strcmp(pkg->name, info->name) == 0) {  			if(rpmvercmp(pkg->version, info->version) < 0) { -				_alpm_log(PM_LOG_WARNING, "replacing older version of %s in target list", pkg->name); +				_alpm_log(PM_LOG_WARNING, "replacing older version of %s %s by %s in target list", pkg->name, pkg->version, info->version);  				FREEPKG(j->data);  				j->data = info; +				return(0);  			} else {  				pm_errno = PM_ERR_TRANS_DUP_TARGET;  				goto error; @@ -372,6 +373,7 @@ int add_commit(pmdb_t *db, pmtrans_t *trans)  			if(splitdep(lp->data, &depend)) {  				continue;  			} +  			/* ORE  			same thing here: we should browse the cache instead of using db_scan */  			depinfo = db_scan(db, depend.name, INFRQ_DESC|INFRQ_DEPENDS); @@ -382,15 +384,15 @@ int add_commit(pmdb_t *db, pmtrans_t *trans)  				cache, thus eliminating the need for db_scan(DEPENDS) */  				PMList *provides = _alpm_db_whatprovides(db, depend.name);  				if(provides) { +					PMList *p;  					/* use the first one */ -					depinfo = db_scan(db, ((pmpkg_t *)provides->data)->name, INFRQ_DEPENDS); +					depinfo = db_scan(db, ((pmpkg_t *)provides->data)->name, INFRQ_DESC|INFRQ_DEPENDS); +					for(p = provides; p; p = p->next) { +						p->data = NULL; +					} +					FREELIST(provides);  					if(depinfo == NULL) { -						PMList *lp;  						/* wtf */ -						for(lp = provides; lp; lp = lp->next) { -							lp->data = NULL; -						} -						FREELIST(provides);  						continue;  					}  				} else { diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 8f778576..b6e2452b 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -228,11 +228,15 @@ int remove_commit(pmdb_t *db, pmtrans_t *trans)  				/* look for a provides package */  				PMList *provides = _alpm_db_whatprovides(db, depend.name);  				if(provides) { +					PMList *p;  					/* TODO: should check _all_ packages listed in provides, not just  					 *       the first one.  					 */  					/* use the first one */ -					depinfo = db_scan(db, provides->data, INFRQ_DEPENDS); +					depinfo = db_scan(db, ((pmpkg_t *)provides->data)->name, INFRQ_DESC|INFRQ_DEPENDS); +					for(p = provides; p; p = p->next) { +						p->data = NULL; +					}  					FREELIST(provides);  					if(depinfo == NULL) {  						/* wtf */ | 
