diff options
author | Judd Vinet <judd@archlinux.org> | 2006-01-28 04:48:51 +0000 |
---|---|---|
committer | Judd Vinet <judd@archlinux.org> | 2006-01-28 04:48:51 +0000 |
commit | f3c5f9b4d1eaa34c0d3893e985900b908f0b08b0 (patch) | |
tree | 05e50e63f3e18d00e63b2ec8a25bfa87284ab40b /lib | |
parent | 25a9e070e85cf2d8d007b3fb3b221d91ec079f3b (diff) | |
download | pacman-f3c5f9b4d1eaa34c0d3893e985900b908f0b08b0.tar.xz |
Search through package provides if no literal matches are found when scanning for targets with -S
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/add.c | 2 | ||||
-rw-r--r-- | lib/libalpm/sync.c | 24 |
2 files changed, 23 insertions, 3 deletions
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index e6af43a9..a7fb922d 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -647,7 +647,7 @@ int add_commit(pmtrans_t *trans, pmdb_t *db) continue; } } - _alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'", tmpp->name, info->name); + _alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'", info->name, depinfo->name); depinfo->requiredby = pm_list_add(depinfo->requiredby, strdup(info->name)); if(db_write(db, depinfo, INFRQ_DEPENDS)) { _alpm_log(PM_LOG_ERROR, "could not update 'requiredby' database entry '%s-%s'", diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 9e23bb31..889c5936 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -39,6 +39,7 @@ #include "cache.h" #include "deps.h" #include "conflict.h" +#include "provide.h" #include "trans.h" #include "sync.h" #include "versioncmp.h" @@ -285,7 +286,14 @@ int sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, PMList *dbs_sync, char *n if(strcmp(dbs->treename, targline) == 0) { spkg = db_get_pkgfromcache(dbs, targ); if(spkg == NULL) { - RET_ERR(PM_ERR_PKG_NOT_FOUND, -1); + /* Search provides */ + PMList *p = _alpm_db_whatprovides(dbs, targ); + if(p == NULL) { + RET_ERR(PM_ERR_PKG_NOT_FOUND, -1); + } + spkg = db_get_pkgfromcache(dbs, p->data); + p->data = NULL; + FREELIST(p); } } } @@ -295,12 +303,24 @@ int sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, PMList *dbs_sync, char *n pmdb_t *dbs = j->data; spkg = db_get_pkgfromcache(dbs, targ); } + if(spkg == NULL) { + /* Search provides */ + for(j = dbs_sync; j && !spkg; j = j->next) { + pmdb_t *dbs = j->data; + PMList *p = _alpm_db_whatprovides(dbs, targ); + if(p) { + spkg = db_get_pkgfromcache(dbs, p->data); + p->data = NULL; + FREELIST(p); + } + } + } } if(spkg == NULL) { RET_ERR(PM_ERR_PKG_NOT_FOUND, -1); } - local = db_get_pkgfromcache(db_local, name); + local = db_get_pkgfromcache(db_local, spkg->name); if(local) { cmp = versioncmp(local->version, spkg->version); if(cmp > 0) { |