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
