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

commit 895ff569f66f8b42df42adfe833c70a155c84b4e
Author: Michel Hermier <[email protected]>
Date:   Fri Apr 26 10:29:48 2013 +0200

libpacman: Move duplicate adding override to _pacman_trans_add.

diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c
index 47748e3..862338b 100644
--- a/lib/libpacman/trans.c
+++ b/lib/libpacman/trans.c
@@ -295,7 +295,27 @@ int _pacman_trans_add (pmtrans_t *trans, pmtranspkg_t 
*transpkg) {
pmtranspkg_t *transpkg_in;

pkgname = __pacman_transpkg_name (transpkg);
+       /* Check if an older version of said package is already in transaction 
packages. */
if ((transpkg_in = __pacman_trans_get_trans_pkg(trans, pkgname)) != NULL) {
+               /* if so, replace it in the list */
+               /* FIXME: check that transtype are equivalent */
+               if (trans->type & PM_TRANS_TYPE_ADD) {
+                       if (_pacman_versioncmp(transpkg_in->pkg_new->version, 
transpkg->pkg_new->version) < 0) {
+                               _pacman_log (PM_LOG_WARNING, _("replacing older 
version %s-%s by %s in target list"),
+                                               transpkg_in->pkg_new->name, 
transpkg_in->pkg_new->version, transpkg->pkg_new->version);
+                               _pacman_list_find (trans->_packages, 
transpkg_in->pkg_new)->data = transpkg->pkg_new;
+                               FREEPKG(transpkg_in->pkg_new);
+                               transpkg_in->pkg_new = transpkg->pkg_new;
+                               /* FIXME: use
+                               f_ptrswap (&transpkg_in->pkg_new, 
&transpkg->pkg_new);
+                               __pacman_trans_pkg_delete (transpkg);
+                               */
+                       } else {
+                               _pacman_log(PM_LOG_WARNING, _("newer version 
%s-%s is in the target list -- skipping"),
+                                               transpkg_in->pkg_new->name, 
transpkg_in->pkg_new->version, transpkg->pkg_new->version);
+                       }
+                       return 0;
+               }
RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1);
} else {
_pacman_log(PM_LOG_FLOW2, _("adding target '%s' to the transaction set"), 
pkgname);
@@ -432,29 +452,6 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char 
*target, pmtranstype_t
goto error;
}
}
-
-               /* check if an older version of said package is already in 
transaction packages.
-               * if so, replace it in the list */
-               for(i = trans->_packages; i; i = i->next) {
-                       pmpkg_t *pkg = i->data;
-                       if(strcmp(pkg->name, 
_pacman_pkg_getinfo(trans_pkg->pkg_new, PM_PKG_NAME)) == 0) {
-                               if(_pacman_versioncmp(pkg->version, 
trans_pkg->pkg_new->version) < 0) {
-                                       pmpkg_t *newpkg;
-                                       _pacman_log(PM_LOG_WARNING, 
_("replacing older version %s-%s by %s in target list"),
-                                               pkg->name, pkg->version, 
trans_pkg->pkg_new->version);
-                                       if((newpkg = 
_pacman_pkg_load(pkg_name)) == NULL) {
-                                               /* pm_errno is already set by 
pkg_load() */
-                                               goto error;
-                                       }
-                                       FREEPKG(i->data);
-                                       i->data = newpkg;
-                               } else {
-                                       _pacman_log(PM_LOG_WARNING, _("newer 
version %s-%s is in the target list -- skipping"),
-                                               pkg->name, pkg->version, 
trans_pkg->pkg_new->version);
-                               }
-                               return(0);
-                       }
-               }
goto out;
}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to