small checkdeps speed-up
In the old code 'alpm_list_diff(_alpm_db_get_pkgcache(db), dblist, _alpm_pkg_cmp);' was slow. Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu> [Xav: In my opinion, computing both dblist and modified in one for loop also makes the code clearer, besides being more efficient. Also renamed joined to targets since I also find that clearer.] Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
This commit is contained in:
parent
e654236db6
commit
633dbeac88
1 changed files with 12 additions and 8 deletions
|
@ -226,7 +226,7 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||||
alpm_list_t *remove, alpm_list_t *upgrade)
|
alpm_list_t *remove, alpm_list_t *upgrade)
|
||||||
{
|
{
|
||||||
alpm_list_t *i, *j;
|
alpm_list_t *i, *j;
|
||||||
alpm_list_t *joined, *dblist;
|
alpm_list_t *targets, *dblist = NULL, *modified = NULL;
|
||||||
alpm_list_t *baddeps = NULL;
|
alpm_list_t *baddeps = NULL;
|
||||||
pmdepmissing_t *miss = NULL;
|
pmdepmissing_t *miss = NULL;
|
||||||
|
|
||||||
|
@ -236,9 +236,16 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
joined = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
|
targets = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
|
||||||
dblist = alpm_list_diff(_alpm_db_get_pkgcache(db), joined, _alpm_pkg_cmp);
|
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
|
||||||
alpm_list_free(joined);
|
void *pkg = i->data;
|
||||||
|
if(alpm_list_find(targets, pkg, _alpm_pkg_cmp)) {
|
||||||
|
modified = alpm_list_add(modified, pkg);
|
||||||
|
} else {
|
||||||
|
dblist = alpm_list_add(dblist, pkg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
alpm_list_free(targets);
|
||||||
|
|
||||||
/* look for unsatisfied dependencies of the upgrade list */
|
/* look for unsatisfied dependencies of the upgrade list */
|
||||||
for(i = upgrade; i; i = i->next) {
|
for(i = upgrade; i; i = i->next) {
|
||||||
|
@ -267,9 +274,6 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||||
if(reversedeps) {
|
if(reversedeps) {
|
||||||
/* reversedeps handles the backwards dependencies, ie,
|
/* reversedeps handles the backwards dependencies, ie,
|
||||||
* the packages listed in the requiredby field. */
|
* the packages listed in the requiredby field. */
|
||||||
|
|
||||||
alpm_list_t *modified = alpm_list_diff(_alpm_db_get_pkgcache(db), dblist, _alpm_pkg_cmp);
|
|
||||||
|
|
||||||
for(i = dblist; i; i = i->next) {
|
for(i = dblist; i; i = i->next) {
|
||||||
pmpkg_t *lp = i->data;
|
pmpkg_t *lp = i->data;
|
||||||
for(j = alpm_pkg_get_depends(lp); j; j = j->next) {
|
for(j = alpm_pkg_get_depends(lp); j; j = j->next) {
|
||||||
|
@ -290,8 +294,8 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alpm_list_free(modified);
|
|
||||||
}
|
}
|
||||||
|
alpm_list_free(modified);
|
||||||
alpm_list_free(dblist);
|
alpm_list_free(dblist);
|
||||||
|
|
||||||
return(baddeps);
|
return(baddeps);
|
||||||
|
|
Loading…
Add table
Reference in a new issue