Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=ca0ed72ce3fa7bddabe31bdad6579a823db2e091
commit ca0ed72ce3fa7bddabe31bdad6579a823db2e091 Author: Michel Hermier <[email protected]> Date: Thu Aug 14 17:29:09 2014 +0200 libpacman: Change pacman_trans_addtarget API signature to allow mixed mode transactions in the future. diff --git a/doc/libpacman-changes.txt b/doc/libpacman-changes.txt index 40e1c88..01a6e83 100644 --- a/doc/libpacman-changes.txt +++ b/doc/libpacman-changes.txt @@ -38,6 +38,8 @@ pacman_trans_cb_download: pacman_trans_cb_progress: Make 'pkgname' argument a constant. +pacman_trans_addtarget: Change method signature to make the API more versatile in the future. This should allow mixed mode targets with addition, removal and upgrades in the the same transaction. + PM_PKG_SCRIPTLET: Remove typo to PM_PKG_SCRIPLET (compatibility symbol is provided). ==== Symbols added: diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp index 31b27c9..ec2f134 100644 --- a/lib/libpacman/pacman.cpp +++ b/lib/libpacman/pacman.cpp @@ -1109,22 +1109,22 @@ int pacman_trans_sysupgrade() } /** Add a target to the transaction. + * @param trans the transaction + * @param transtype the current type of transaction to perform to the target + * @param flags the flags used to help to interpret the target * @param target the name of the target to add * @return 0 on success, -1 on error (pm_errno is set accordingly) */ -int pacman_trans_addtarget(const char *target) +int pacman_trans_addtarget(pmtrans_t *trans, pmtranstype_t transtype, const char *target, int flags) { - pmtrans_t *trans; - /* Sanity checks */ - ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - ASSERT(!_pacman_strempty(target), RET_ERR(PM_ERR_WRONG_ARGS, -1)); - - trans = handle->trans; ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); ASSERT(trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); + ASSERT(transtype == trans->m_type, RET_ERR(PM_ERR_WRONG_ARGS, -1)); // FIXME: Only identical transtype is supported for now + ASSERT(!_pacman_strempty(target), RET_ERR(PM_ERR_WRONG_ARGS, -1)); + ASSERT(flags == trans->flags, RET_ERR(PM_ERR_WRONG_ARGS, -1)); // FIXME: Only identical flags are supported for now - return trans->add(target, trans->m_type, trans->flags); + return trans->add(target, transtype, flags); } /** Prepare a transaction. diff --git a/lib/libpacman/pacman.h b/lib/libpacman/pacman.h index 6f0722e..546e5ee 100644 --- a/lib/libpacman/pacman.h +++ b/lib/libpacman/pacman.h @@ -369,7 +369,7 @@ enum { void *pacman_trans_getinfo(unsigned char parm); int pacman_trans_init(unsigned char type, unsigned int flags, pacman_trans_cb_event cb_event, pacman_trans_cb_conv conv, pacman_trans_cb_progress cb_progress); int pacman_trans_sysupgrade(void); -int pacman_trans_addtarget(const char *target); +int pacman_trans_addtarget(pmtrans_t *trans, pmtranstype_t transtype, const char *target, int flags); int pacman_trans_prepare(pmlist_t **data); int pacman_trans_commit(pmlist_t **data); int pacman_trans_release(void); diff --git a/src/pacman-g2/deptest.c b/src/pacman-g2/deptest.c index 64678a7..e5a7e06 100644 --- a/src/pacman-g2/deptest.c +++ b/src/pacman-g2/deptest.c @@ -84,7 +84,7 @@ int deptestpkg(list_t *targets) strcat(str, i->data); } vprint(_("add target %s\n"), str); - if(pacman_trans_addtarget(str) == -1) { + if(pacman_trans_addtarget(pacman_get_trans, PM_TRANS_TYPE_ADD, str, 0) == -1) { FREE(str); ERR(NL, _("could not add target (%s)\n"), pacman_strerror(pm_errno)); retval = 1; diff --git a/src/pacman-g2/sync.c b/src/pacman-g2/sync.c index 30ee2ba..9f2b39d 100644 --- a/src/pacman-g2/sync.c +++ b/src/pacman-g2/sync.c @@ -361,7 +361,7 @@ int syncpkg(list_t *targets) } return(1); } - if(pacman_trans_addtarget("pacman-g2") == -1) { + if(pacman_trans_addtarget(pacman_get_trans(), PM_TRANS_TYPE_SYNC, "pacman-g2", config->flags) == -1) { ERR(NL, _("could not add target '%s': %s\n"), "pacman-g2", pacman_strerror(pm_errno)); retval = 1; goto cleanup; @@ -374,7 +374,7 @@ int syncpkg(list_t *targets) /* process targets */ for(i = targets; i; i = i->next) { char *targ = i->data; - if(pacman_trans_addtarget(targ) == -1) { + if(pacman_trans_addtarget(pacman_get_trans(), PM_TRANS_TYPE_SYNC, targ, config->flags) == -1) { PM_GRP *grp = NULL; list_t *j; int found=0; diff --git a/src/pacman-g2/trans.c b/src/pacman-g2/trans.c index fcef7af..4b6698a 100644 --- a/src/pacman-g2/trans.c +++ b/src/pacman-g2/trans.c @@ -452,7 +452,7 @@ int trans_commit(pmtranstype_t transtype, list_t *targets) /* and add targets to it */ MSG(NL, _("loading package data... ")); for(i = finaltargs; i; i = i->next) { - if(pacman_trans_addtarget(i->data) == -1) { + if(pacman_trans_addtarget(pacman_get_trans(), transtype, i->data, config->flags) == -1) { int match = 0; switch (transtype) { @@ -466,8 +466,9 @@ int trans_commit(pmtranstype_t transtype, list_t *targets) char *pkgname = pacman_pkg_getinfo(p, PM_PKG_NAME); match = pacman_reg_match(pkgname, i->data); - if(match > 0) { - pacman_trans_addtarget(pkgname); + if(match > 0 && + pacman_trans_addtarget(pacman_get_trans(), transtype, pkgname, config->flags) == -1) { + match = 0; } } } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
