summaryrefslogtreecommitdiffstats
path: root/lib/libalpm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/alpm.c3
-rw-r--r--lib/libalpm/db.c1
-rw-r--r--lib/libalpm/deps.c40
-rw-r--r--lib/libalpm/server.h1
4 files changed, 31 insertions, 14 deletions
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 5868ddfe..386eee4d 100644
--- a/lib/libalpm/alpm.c
+++ b/lib/libalpm/alpm.c
@@ -303,6 +303,7 @@ int alpm_db_setserver(pmdb_t *db, char *url)
/** Update a package database
* @param force if true, then forces the update, otherwise update only in case
+ * the database isn't up to date
* @param db pointer to the package database to update
* @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up
* to date
@@ -996,7 +997,7 @@ void *alpm_dep_getinfo(pmdepmissing_t *miss, unsigned char parm)
}
/** @} */
-/** @defgroup alpm_dep File Conflicts Functions
+/** @defgroup alpm_conflict File Conflicts Functions
* @brief Functions to get informations about a libalpm file conflict
* @{
*/
diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c
index 39134680..fe421261 100644
--- a/lib/libalpm/db.c
+++ b/lib/libalpm/db.c
@@ -124,7 +124,6 @@ pmlist_t *_alpm_db_search(pmdb_t *db, pmlist_t *needles)
} else if(retval) {
_alpm_log(PM_LOG_DEBUG, " search target '%s' matched '%s'", targ, haystack);
match = 1;
- } else {
}
FREE(haystack);
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 8249c651..2d28fde0 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -307,11 +307,28 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
}
}
}
- /* check other targets */
- for(k = packages; k && !found; k = k->next) {
- pmpkg_t *p = (pmpkg_t *)k->data;
- /* see if the package names match OR if p provides depend.name */
- if(!strcmp(p->name, depend.name) || _alpm_list_is_strin(depend.name, p->provides)) {
+ /* check database for provides matches */
+ if(!found) {
+ pmlist_t *m;
+ k = _alpm_db_whatprovides(db, depend.name);
+ for(m = k; m && !found; m = m->next) {
+ /* look for a match that isn't one of the packages we're trying
+ * to install. this way, if we match against a to-be-installed
+ * package, we'll defer to the NEW one, not the one already
+ * installed. */
+ pmpkg_t *p = m->data;
+ pmlist_t *n;
+ int skip = 0;
+ for(n = packages; n && !skip; n = n->next) {
+ pmpkg_t *ptp = n->data;
+ if(!strcmp(ptp->name, p->name)) {
+ skip = 1;
+ }
+ }
+ if(skip) {
+ continue;
+ }
+
if(depend.mod == PM_DEP_MOD_ANY) {
/* accept any version */
found = 1;
@@ -334,13 +351,13 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
FREE(ver);
}
}
+ FREELISTPTR(k);
}
- /* check database for provides matches */
- if(!found){
- k = _alpm_db_whatprovides(db, depend.name);
- if(k) {
- /* grab the first one (there should only really be one, anyway) */
- pmpkg_t *p = k->data;
+ /* check other targets */
+ for(k = packages; k && !found; k = k->next) {
+ pmpkg_t *p = (pmpkg_t *)k->data;
+ /* see if the package names match OR if p provides depend.name */
+ if(!strcmp(p->name, depend.name) || _alpm_list_is_strin(depend.name, p->provides)) {
if(depend.mod == PM_DEP_MOD_ANY) {
/* accept any version */
found = 1;
@@ -362,7 +379,6 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
}
FREE(ver);
}
- FREELISTPTR(k);
}
}
/* else if still not found... */
diff --git a/lib/libalpm/server.h b/lib/libalpm/server.h
index f3dad39b..218c172a 100644
--- a/lib/libalpm/server.h
+++ b/lib/libalpm/server.h
@@ -22,6 +22,7 @@
#define _ALPM_SERVER_H
#include "list.h"
+#include <time.h>
#include <ftplib.h>
#define FREESERVER(p) \