Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=efbbae48ea846b28ff8a0902d7c9d6c75b2e6073
commit efbbae48ea846b28ff8a0902d7c9d6c75b2e6073 Author: Michel Hermier <[email protected]> Date: Thu May 16 10:54:07 2013 +0200 libpacman: Move removal of PM_TRANS_FLAG_DEPENDSONLY transpkg to _pacman_trans_resolvedeps. diff --git a/lib/libpacman/deps.c b/lib/libpacman/deps.c index 1b8eb82..cdbeb49 100644 --- a/lib/libpacman/deps.c +++ b/lib/libpacman/deps.c @@ -522,6 +522,15 @@ void _pacman_removedeps(pmtrans_t *trans) } } +static +int _pacman_transpkg_remove_dependsonly (pmtrans_t *trans) { + FList *excludes = NULL; + + f_list_exclude (&trans->packages, &excludes, (FDetectFunc)_pacman_transpkg_has_flags, (void*)PM_TRANS_FLAG_DEPENDSONLY); + f_list_delete (excludes, NULL, NULL); + return 0; +} + /* populates *trans with packages that need to be installed to satisfy all * dependencies (recursive) for syncpkg */ @@ -618,10 +627,12 @@ static int _pacman_transpkg_resolvedeps (pmtrans_t *trans, pmtranspkg_t *transpkg, pmlist_t **data) { pmlist_t *deps = NULL; - if (_pacman_transpkg_checkdeps (trans, transpkg, &deps) != 0) { + if (_pacman_transpkg_checkdeps (trans, transpkg, &deps) != 0 || + _pacman_resolvedeps (trans, deps, data) != 0) { + /* pm_errno is allready set */ return -1; } - return _pacman_resolvedeps (trans, deps, data); + return 0; } int _pacman_trans_resolvedeps (pmtrans_t *trans, pmlist_t **data) { @@ -631,11 +642,13 @@ int _pacman_trans_resolvedeps (pmtrans_t *trans, pmlist_t **data) { return(-1); } - if (_pacman_trans_checkdeps (trans, &deps) != 0) { - /* pm_errno is set by checkdeps */ + if (_pacman_trans_checkdeps (trans, &deps) != 0 || + _pacman_resolvedeps (trans, deps, data) != 0 || + _pacman_transpkg_remove_dependsonly (trans) != 0) { + /* pm_errno is allready set */ return -1; } - return _pacman_resolvedeps (trans, deps, data); + return 0; } /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c index 0ef4d58..e18699b 100644 --- a/lib/libpacman/trans.c +++ b/lib/libpacman/trans.c @@ -96,6 +96,10 @@ int __pacman_transpkg_detect_name (pmtranspkg_t *transpkg, const char *package) return strcmp (__pacman_transpkg_name (transpkg), package); } +int _pacman_transpkg_has_flags (pmtranspkg_t *transpkg, int flagsmask) { + return (transpkg->flags & flagsmask) == flagsmask ? 0 : 1; +} + static int check_oldcache(pmtrans_t *trans) { @@ -587,18 +591,6 @@ int _pacman_sync_prepare (pmtrans_t *trans, pmlist_t **data) goto cleanup; } - for (i = trans->_packages; i; i = i->next) { - /* add the dependencies found by resolvedeps to the transaction set */ - pmpkg_t *spkg = i->data; - if(__pacman_trans_get_trans_pkg(trans, spkg->name) != NULL) { - /* remove the original targets from the list if requested */ - if((trans->flags & PM_TRANS_FLAG_DEPENDSONLY)) { - /* they are just pointers so we don't have to free them */ - trans->packages = _pacman_list_remove(trans->packages, spkg, pkg_cmp, NULL); - } - } - } - _pacman_sortbydeps(trans, PM_TRANS_TYPE_ADD); EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_DONE, NULL, NULL); diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h index 20335bc..ce8831c 100644 --- a/lib/libpacman/trans.h +++ b/lib/libpacman/trans.h @@ -121,6 +121,7 @@ void __pacman_trans_pkg_delete (pmsyncpkg_t *pkg); const char *__pacman_transpkg_name (pmtranspkg_t *transpkg); int __pacman_transpkg_cmp (pmtranspkg_t *transpkg1, pmtranspkg_t *transpkg2); int __pacman_transpkg_detect_name (pmtranspkg_t *transpkg, const char *package); +int _pacman_transpkg_has_flags (pmtranspkg_t *transpkg, int flagsmask); /* Implementation details */ int __pacman_trans_init(pmtrans_t *trans, pmtranstype_t type, unsigned int flags, pmtrans_cbs_t cbs); _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
