[pacman-dev] CVS update of pacman-lib/lib/libalpm (package.c trans.c)
Dan McGee
dan at archlinux.org
Mon Mar 12 00:47:58 EDT 2007
Date: Monday, March 12, 2007 @ 00:47:58
Author: dan
Path: /home/cvs-pacman/pacman-lib/lib/libalpm
Modified: package.c (1.85 -> 1.86) trans.c (1.44 -> 1.45)
* Fix an issue where the same dependency was recorded multiple times in the
'required by' field.
-----------+
package.c | 27 ++++++++++++++++++---------
trans.c | 33 ++++++++++++++++++++++-----------
2 files changed, 40 insertions(+), 20 deletions(-)
Index: pacman-lib/lib/libalpm/package.c
diff -u pacman-lib/lib/libalpm/package.c:1.85 pacman-lib/lib/libalpm/package.c:1.86
--- pacman-lib/lib/libalpm/package.c:1.85 Wed Mar 7 02:45:30 2007
+++ pacman-lib/lib/libalpm/package.c Mon Mar 12 00:47:58 2007
@@ -540,6 +540,7 @@
void _alpm_pkg_update_requiredby(pmpkg_t *pkg)
{
alpm_list_t *i, *j, *k;
+ const char *pkgname = alpm_pkg_get_name(pkg);
pmdb_t *localdb = alpm_option_get_localdb();
for(i = _alpm_db_get_pkgcache(localdb); i; i = i->next) {
@@ -547,6 +548,8 @@
continue;
}
pmpkg_t *cachepkg = i->data;
+ const char *cachepkgname = alpm_pkg_get_name(cachepkg);
+
for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) {
pmdepend_t *dep;
if(!j->data) {
@@ -558,23 +561,29 @@
}
/* check the actual package itself */
- if(strcmp(dep->name, alpm_pkg_get_name(pkg)) == 0) {
- _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"),
- cachepkg->name, pkg->name);
+ if(strcmp(dep->name, pkgname) == 0) {
alpm_list_t *reqs = alpm_pkg_get_requiredby(pkg);
- reqs = alpm_list_add(reqs, strdup(alpm_pkg_get_name(cachepkg)));
- pkg->requiredby = reqs;
+
+ if(!alpm_list_find_str(reqs, cachepkgname)) {
+ _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"),
+ cachepkgname, pkg->name);
+ reqs = alpm_list_add(reqs, strdup(cachepkgname));
+ pkg->requiredby = reqs;
+ }
}
/* check for provisions as well */
for(k = alpm_pkg_get_provides(pkg); k; k = k->next) {
const char *provname = k->data;
if(strcmp(dep->name, provname) == 0) {
- _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s' (provides: %s)"),
- alpm_pkg_get_name(cachepkg), alpm_pkg_get_name(pkg), provname);
alpm_list_t *reqs = alpm_pkg_get_requiredby(pkg);
- reqs = alpm_list_add(reqs, strdup(alpm_pkg_get_name(cachepkg)));
- pkg->requiredby = reqs;
+
+ if(!alpm_list_find_str(reqs, cachepkgname)) {
+ _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s' (provides: %s)"),
+ cachepkgname, pkgname, provname);
+ reqs = alpm_list_add(reqs, strdup(cachepkgname));
+ pkg->requiredby = reqs;
+ }
}
}
free(dep);
Index: pacman-lib/lib/libalpm/trans.c
diff -u pacman-lib/lib/libalpm/trans.c:1.44 pacman-lib/lib/libalpm/trans.c:1.45
--- pacman-lib/lib/libalpm/trans.c:1.44 Wed Mar 7 02:45:30 2007
+++ pacman-lib/lib/libalpm/trans.c Mon Mar 12 00:47:58 2007
@@ -254,6 +254,7 @@
{
alpm_list_t *i, *j;
alpm_list_t *depends = NULL;
+ const char *pkgname;
pmdb_t *localdb;
ALPM_LOG_FUNC;
@@ -262,10 +263,12 @@
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(pkg != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1));
+ pkgname = alpm_pkg_get_name(pkg);
depends = alpm_pkg_get_depends(pkg);
+
if(depends) {
_alpm_log(PM_LOG_DEBUG, _("updating dependency packages 'requiredby' fields for %s-%s"),
- pkg->name, pkg->version);
+ pkgname, pkg->version);
} else {
_alpm_log(PM_LOG_DEBUG, _("package has no dependencies, no other packages to update"));
}
@@ -302,16 +305,20 @@
found_provides = 1;
/* this is cheating... we call this function to populate the package */
- alpm_pkg_get_requiredby(deppkg);
+ alpm_list_t *rqdby = alpm_pkg_get_requiredby(deppkg);
- _alpm_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"), alpm_pkg_get_name(deppkg));
+ _alpm_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"),
+ alpm_pkg_get_name(deppkg));
if(trans->type == PM_TRANS_TYPE_REMOVE) {
void *data = NULL;
- deppkg->requiredby = alpm_list_remove(deppkg->requiredby,
- alpm_pkg_get_name(pkg), _alpm_str_cmp, &data);
+ rqdby = alpm_list_remove(rqdby, pkgname, _alpm_str_cmp, &data);
FREE(data);
+ deppkg->requiredby = rqdby;
} else {
- deppkg->requiredby = alpm_list_add(deppkg->requiredby, strdup(alpm_pkg_get_name(pkg)));
+ if(!alpm_list_find_str(rqdby, pkgname)) {
+ rqdby = alpm_list_add(rqdby, strdup(pkgname));
+ deppkg->requiredby = rqdby;
+ }
}
if(_alpm_db_write(localdb, deppkg, INFRQ_DEPENDS)) {
@@ -328,16 +335,20 @@
}
/* this is cheating... we call this function to populate the package */
- alpm_pkg_get_requiredby(deppkg);
+ alpm_list_t *rqdby = alpm_pkg_get_requiredby(deppkg);
- _alpm_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"), deppkg->name);
+ _alpm_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"),
+ alpm_pkg_get_name(deppkg));
if(trans->type == PM_TRANS_TYPE_REMOVE) {
void *data = NULL;
- deppkg->requiredby = alpm_list_remove(deppkg->requiredby,
- alpm_pkg_get_name(pkg), _alpm_str_cmp, &data);
+ rqdby = alpm_list_remove(rqdby, pkgname, _alpm_str_cmp, &data);
FREE(data);
+ deppkg->requiredby = rqdby;
} else {
- deppkg->requiredby = alpm_list_add(deppkg->requiredby, strdup(alpm_pkg_get_name(pkg)));
+ if(!alpm_list_find_str(rqdby, pkgname)) {
+ rqdby = alpm_list_add(rqdby, strdup(pkgname));
+ deppkg->requiredby = rqdby;
+ }
}
if(_alpm_db_write(localdb, deppkg, INFRQ_DEPENDS)) {
More information about the pacman-dev
mailing list