summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-08-18 07:24:41 +0200
committerDan McGee <dan@archlinux.org>2011-08-18 17:47:41 +0200
commit6cfc4757b98e813428d261dbc185e20618ca83a6 (patch)
tree2bc9fb3f4f516abc2414c18653b4f2670507857f
parent3752edbff48fc472c5944f05f665adb000a521d9 (diff)
downloadpacman-6cfc4757b98e813428d261dbc185e20618ca83a6.tar.gz
pacman-6cfc4757b98e813428d261dbc185e20618ca83a6.tar.xz
Convert resolvedep() to use _alpm_depcmp_literal()
The whole first loop is trying to check literals only, so teach it to do so. Also, reorder operations to make more sense by putting the strcmp() first in the literal loop, and using a very cheap name_hash check first in the second loop. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/deps.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 48e8e773..704a9046 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -561,14 +561,16 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
/* 1. literals */
for(i = dbs; i; i = i->next) {
alpm_pkg_t *pkg = _alpm_db_get_pkgfromcache(i->data, dep->name);
- if(pkg && _alpm_depcmp(pkg, dep) && !_alpm_pkg_find(excluding, pkg->name)) {
+ if(pkg && _alpm_depcmp_literal(pkg, dep)
+ && !_alpm_pkg_find(excluding, pkg->name)) {
if(_alpm_pkg_should_ignore(handle, pkg)) {
int install = 0;
if(prompt) {
QUESTION(handle->trans, ALPM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
NULL, NULL, &install);
} else {
- _alpm_log(handle, ALPM_LOG_WARNING, _("ignoring package %s-%s\n"), pkg->name, pkg->version);
+ _alpm_log(handle, ALPM_LOG_WARNING, _("ignoring package %s-%s\n"),
+ pkg->name, pkg->version);
}
if(!install) {
ignored = 1;
@@ -582,15 +584,18 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
for(i = dbs; i; i = i->next) {
for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) {
alpm_pkg_t *pkg = j->data;
- if(_alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) != 0 &&
- !_alpm_pkg_find(excluding, pkg->name)) {
+ /* with hash != hash, we can even skip the strcmp() as we know they can't
+ * possibly be the same string */
+ if(pkg->name_hash != dep->name_hash && _alpm_depcmp(pkg, dep)
+ && !_alpm_pkg_find(excluding, pkg->name)) {
if(_alpm_pkg_should_ignore(handle, pkg)) {
int install = 0;
if(prompt) {
QUESTION(handle->trans, ALPM_TRANS_CONV_INSTALL_IGNOREPKG,
pkg, NULL, NULL, &install);
} else {
- _alpm_log(handle, ALPM_LOG_WARNING, _("ignoring package %s-%s\n"), pkg->name, pkg->version);
+ _alpm_log(handle, ALPM_LOG_WARNING, _("ignoring package %s-%s\n"),
+ pkg->name, pkg->version);
}
if(!install) {
ignored = 1;