Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=a8c8df582bb7062302b7004b3b1472a8579bef62

commit a8c8df582bb7062302b7004b3b1472a8579bef62
Author: Michel Hermier <[email protected]>
Date:   Thu Aug 14 18:55:50 2014 +0200

libpacman: Use new pkg_local variable in _pacman_checkdeps, when when package 
represent a local package.

diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp
index 8bd4f0d..63f8ce3 100644
--- a/lib/libpacman/deps.cpp
+++ b/lib/libpacman/deps.cpp
@@ -226,21 +226,24 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned 
char op, pmlist_t *packag

for(i = packages; i; i = i->next) {
Package *tp = i->data;
+               Package *pkg_local;

if(tp == NULL) {
continue;
}

if(op == PM_TRANS_TYPE_UPGRADE) {
+                       pkg_local = _pacman_db_get_pkgfromcache(db_local, 
tp->name());
+               } else if (PM_TRANS_TYPE_REMOVE) {
+                       pkg_local = tp;
+               }
+
+               if(op == PM_TRANS_TYPE_UPGRADE) {
/* PM_TRANS_TYPE_UPGRADE handles the backwards dependencies, ie, the packages
* listed in the requiredby field.
*/
-                       Package *oldpkg;
-
-                       if((oldpkg = _pacman_db_get_pkgfromcache(db_local, 
tp->name())) == NULL) {
-                               continue;
-                       }
-                       for(j = oldpkg->requiredby(); j; j = j->next) {
+               if(pkg_local != NULL) {
+                       for(j = pkg_local->requiredby(); j; j = j->next) {
//char *ver;
Package *p;
found = 0;
@@ -255,9 +258,9 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
for(k = p->depends(); k; k = k->next) {
/* don't break any existing dependencies (possible provides) */
_pacman_splitdep(k->data, &depend);
-                                       if(_pacman_depcmp(oldpkg, &depend) && 
!_pacman_depcmp(tp, &depend)) {
+                                       if(_pacman_depcmp(pkg_local, &depend) 
&& !_pacman_depcmp(tp, &depend)) {
_pacman_log(PM_LOG_DEBUG, _("checkdeps: updated '%s' won't satisfy a dependency 
of '%s'"),
-                                                               oldpkg->name(), 
p->name());
+                                                               
pkg_local->name(), p->name());
miss = new __pmdepmissing_t(p->name(), PM_DEP_TYPE_DEPEND, depend.mod,
depend.name, depend.version);
baddeps = _pacman_depmisslist_add(baddeps, miss);
@@ -265,6 +268,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
}
}
}
+               }
if(op == PM_TRANS_TYPE_ADD || op == PM_TRANS_TYPE_UPGRADE) {
/* DEPENDENCIES -- look for unsatisfied dependencies */
for(j = tp->depends(); j; j = j->next) {
@@ -391,26 +395,26 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned 
char op, pmlist_t *packag
} else if(op == PM_TRANS_TYPE_REMOVE) {
/* check requiredby fields */
found=0;
-                       for(j = tp->requiredby(); j; j = j->next) {
+                       for(j = pkg_local->requiredby(); j; j = j->next) {
if(!_pacman_list_is_strin((char *)j->data, packages)) {
/* check if a package in trans->packages provides this package */
for(k=trans->packages; !found && k; k=k->next) {
Package *spkg = k->data;

-                                               if(spkg && 
spkg->provides(tp->name())) {
+                                               if(spkg && 
spkg->provides(pkg_local->name())) {
found=1;
}
}
for(k=trans->syncpkgs; !found && k; k=k->next) {
pmsyncpkg_t *ps = k->data;

-                                               
if(ps->pkg_new->provides(tp->name())) {
+                                               
if(ps->pkg_new->provides(pkg_local->name())) {
found=1;
}
}
if(!found) {
-                                               _pacman_log(PM_LOG_DEBUG, 
_("checkdeps: found %s which requires %s"), (char *)j->data, tp->name());
-                                               miss = new 
__pmdepmissing_t(tp->name(), PM_DEP_TYPE_REQUIRED, PM_DEP_MOD_ANY, (const char 
*)j->data, NULL);
+                                               _pacman_log(PM_LOG_DEBUG, 
_("checkdeps: found %s which requires %s"), (char *)j->data, pkg_local->name());
+                                               miss = new 
__pmdepmissing_t(pkg_local->name(), PM_DEP_TYPE_REQUIRED, PM_DEP_MOD_ANY, 
(const char *)j->data, NULL);
baddeps = _pacman_depmisslist_add(baddeps, miss);
}
}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to