Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=cde52189e597f42ab81dc78312b81f433f28bfd0
commit cde52189e597f42ab81dc78312b81f433f28bfd0 Author: Michel Hermier <herm...@frugalware.org> Date: Sun Jul 31 13:37:16 2011 +0200 libpacman: Adapt to pmtrans_ops_t. diff --git a/lib/libpacman/add.c b/lib/libpacman/add.c index 6c30536..a5ab9b5 100644 --- a/lib/libpacman/add.c +++ b/lib/libpacman/add.c @@ -105,13 +105,14 @@ static int add_faketarget(pmtrans_t *trans, const char *name) return(0); } -int _pacman_add_loadtarget(pmtrans_t *trans, pmdb_t *db, const char *name) +int _pacman_add_addtarget(pmtrans_t *trans, const char *name) { pmpkg_t *info = NULL; pmpkg_t *dummy; pmlist_t *i; pmpkg_t *local; struct stat buf; + pmdb_t *db = trans->handle->db_local; ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); @@ -201,12 +202,13 @@ error: return(-1); } -int _pacman_add_prepare(pmtrans_t *trans, pmdb_t *db, pmlist_t **data) +int _pacman_add_prepare(pmtrans_t *trans, pmlist_t **data) { pmlist_t *lp; pmlist_t *rmlist = NULL; char rm_fname[PATH_MAX]; pmpkg_t *info = NULL; + pmdb_t *db = trans->handle->db_local; ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); @@ -298,7 +300,7 @@ int _pacman_add_prepare(pmtrans_t *trans, pmdb_t *db, pmlist_t **data) return(0); } -int _pacman_add_commit(pmtrans_t *trans, pmdb_t *db) +int _pacman_add_commit(pmtrans_t *trans, pmlist_t **data) { int i, ret = 0, errors = 0, needdisp = 0; int remain, howmany, archive_ret; @@ -309,6 +311,7 @@ int _pacman_add_commit(pmtrans_t *trans, pmdb_t *db) unsigned char cb_state; time_t t; pmlist_t *targ, *lp; + pmdb_t *db = trans->handle->db_local; ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); @@ -373,13 +376,13 @@ int _pacman_add_commit(pmtrans_t *trans, pmdb_t *db) FREETRANS(tr); RET_ERR(PM_ERR_TRANS_ABORT, -1); } - if(_pacman_remove_loadtarget(tr, db, info->name) == -1) { + if(_pacman_remove_addtarget(tr, info->name) == -1) { FREETRANS(tr); RET_ERR(PM_ERR_TRANS_ABORT, -1); } /* copy the skiplist over */ tr->skiplist = _pacman_list_strdup(trans->skiplist); - if(_pacman_remove_commit(tr, db) == -1) { + if(_pacman_remove_commit(tr, NULL) == -1) { FREETRANS(tr); RET_ERR(PM_ERR_TRANS_ABORT, -1); } @@ -834,4 +837,10 @@ int _pacman_add_commit(pmtrans_t *trans, pmdb_t *db) return(0); } +const pmtrans_ops_t _pacman_add_pmtrans_opts = { + .addtarget = _pacman_add_addtarget, + .prepare = _pacman_add_prepare, + .commit = _pacman_add_commit +}; + /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/add.h b/lib/libpacman/add.h index e59a32a..416f465 100644 --- a/lib/libpacman/add.h +++ b/lib/libpacman/add.h @@ -21,13 +21,9 @@ #ifndef _PACMAN_ADD_H #define _PACMAN_ADD_H -#include "list.h" -#include "db.h" #include "trans.h" -int _pacman_add_loadtarget(pmtrans_t *trans, pmdb_t *db, const char *name); -int _pacman_add_prepare(pmtrans_t *trans, pmdb_t *db, pmlist_t **data); -int _pacman_add_commit(pmtrans_t *trans, pmdb_t *db); +const pmtrans_ops_t _pacman_add_pmtrans_opts; #endif /* _PACMAN_ADD_H */ diff --git a/lib/libpacman/remove.c b/lib/libpacman/remove.c index 5a80396..e4c4348 100644 --- a/lib/libpacman/remove.c +++ b/lib/libpacman/remove.c @@ -58,9 +58,10 @@ #include "handle.h" #include "pacman.h" -int _pacman_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, const char *name) +int _pacman_remove_addtarget(pmtrans_t *trans, const char *name) { pmpkg_t *info; + pmdb_t *db = trans->handle->db_local; ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); @@ -90,9 +91,10 @@ int _pacman_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, const char *name) return(0); } -int _pacman_remove_prepare(pmtrans_t *trans, pmdb_t *db, pmlist_t **data) +int _pacman_remove_prepare(pmtrans_t *trans, pmlist_t **data) { pmlist_t *lp; + pmdb_t *db = trans->handle->db_local; ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); @@ -155,13 +157,14 @@ static int str_cmp(const void *s1, const void *s2) return(strcmp(s1, s2)); } -int _pacman_remove_commit(pmtrans_t *trans, pmdb_t *db) +int _pacman_remove_commit(pmtrans_t *trans, pmlist_t **data) { pmpkg_t *info; struct stat buf; pmlist_t *targ, *lp; char line[PATH_MAX+1]; int howmany, remain; + pmdb_t *db = trans->handle->db_local; ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); @@ -351,4 +354,10 @@ int _pacman_remove_commit(pmtrans_t *trans, pmdb_t *db) return(0); } +const pmtrans_ops_t _pacman_remove_pmtrans_opts = { + .addtarget = _pacman_remove_addtarget, + .prepare = _pacman_remove_prepare, + .commit = _pacman_remove_commit +}; + /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/remove.h b/lib/libpacman/remove.h index cd18282..717fa94 100644 --- a/lib/libpacman/remove.h +++ b/lib/libpacman/remove.h @@ -21,13 +21,13 @@ #ifndef _PACMAN_REMOVE_H #define _PACMAN_REMOVE_H -#include "list.h" -#include "db.h" #include "trans.h" -int _pacman_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, const char *name); -int _pacman_remove_prepare(pmtrans_t *trans, pmdb_t *db, pmlist_t **data); -int _pacman_remove_commit(pmtrans_t *trans, pmdb_t *db); +int _pacman_remove_addtarget(pmtrans_t *trans, const char *name); +int _pacman_remove_commit(pmtrans_t *trans, pmlist_t **data); + +const pmtrans_ops_t _pacman_remove_pmtrans_opts; + #endif /* _PACMAN_REMOVE_H */ diff --git a/lib/libpacman/sync.c b/lib/libpacman/sync.c index c4f82b9..d018c4d 100644 --- a/lib/libpacman/sync.c +++ b/lib/libpacman/sync.c @@ -259,7 +259,7 @@ error: return(-1); } -int _pacman_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sync, const char *name) +int _pacman_sync_addtarget(pmtrans_t *trans, const char *name) { char targline[PKG_FULLNAME_LEN]; char *targ; @@ -268,6 +268,8 @@ int _pacman_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_syn pmpkg_t *spkg = NULL; pmsyncpkg_t *ps; int cmp; + pmdb_t *db_local = trans->handle->db_local; + pmlist_t *dbs_sync = trans->handle->dbs_sync; ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); @@ -400,7 +402,7 @@ static int check_olddelay(void) return(0); } -int _pacman_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sync, pmlist_t **data) +int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) { pmlist_t *deps = NULL; pmlist_t *list = NULL; /* list allowing checkdeps usage with data from trans->packages */ @@ -408,6 +410,8 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sync, pmlist_t *asked = NULL; pmlist_t *i, *j, *k, *l; int ret = 0; + pmdb_t *db_local = trans->handle->db_local; + pmlist_t *dbs_sync = trans->handle->dbs_sync; ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); @@ -777,7 +781,7 @@ cleanup: return(ret); } -int _pacman_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data) +int _pacman_sync_commit(pmtrans_t *trans, pmlist_t **data) { pmlist_t *i, *j, *files = NULL; pmtrans_t *tr = NULL; @@ -785,6 +789,7 @@ int _pacman_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data) char ldir[PATH_MAX]; int varcache = 1; int tries = 0, doremove; + pmdb_t *db_local = trans->handle->db_local; ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); @@ -1103,4 +1108,10 @@ error: return(-1); } +const pmtrans_ops_t _pacman_sync_pmtrans_opts = { + .addtarget = _pacman_sync_addtarget, + .prepare = _pacman_sync_prepare, + .commit = _pacman_sync_commit +}; + /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/sync.h b/lib/libpacman/sync.h index 4e7a8ce..cd28992 100644 --- a/lib/libpacman/sync.h +++ b/lib/libpacman/sync.h @@ -39,9 +39,8 @@ pmsyncpkg_t *_pacman_sync_new(int type, pmpkg_t *spkg, void *data); void _pacman_sync_free(void *data); int _pacman_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sync); -int _pacman_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sync, const char *name); -int _pacman_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sync, pmlist_t **data); -int _pacman_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data); + +const pmtrans_ops_t _pacman_sync_pmtrans_opts; #endif /* _PACMAN_SYNC_H */ diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c index 0a09fe3..1b47d45 100644 --- a/lib/libpacman/trans.c +++ b/lib/libpacman/trans.c @@ -95,6 +95,26 @@ int _pacman_trans_init(pmtrans_t *trans, pmtranstype_t type, unsigned int flags, /* Sanity checks */ ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + switch(type) { + case PM_TRANS_TYPE_ADD: + case PM_TRANS_TYPE_UPGRADE: + trans->ops = &_pacman_add_pmtrans_opts; + break; + case PM_TRANS_TYPE_REMOVE: + trans->ops = &_pacman_remove_pmtrans_opts; + break; + case PM_TRANS_TYPE_SYNC: + trans->ops = &_pacman_sync_pmtrans_opts; + break; + default: + trans->ops = NULL; + // Be more verbose about the trans type + _pacman_log(PM_LOG_ERROR, + _("could not initialize transaction: Unknown Transaction Type %d"), type); + return(-1); + } + + trans->handle = handle; trans->type = type; trans->flags = flags; trans->cb_event = event; @@ -119,32 +139,17 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char *target) { /* Sanity checks */ ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->ops != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->ops->addtarget != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); ASSERT(target != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); if(_pacman_list_is_strin(target, trans->targets)) { RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1); } - switch(trans->type) { - case PM_TRANS_TYPE_ADD: - case PM_TRANS_TYPE_UPGRADE: - if(_pacman_add_loadtarget(trans, handle->db_local, target) == -1) { - /* pm_errno is set by _pacman_add_loadtarget() */ - return(-1); - } - break; - case PM_TRANS_TYPE_REMOVE: - if(_pacman_remove_loadtarget(trans, handle->db_local, target) == -1) { - /* pm_errno is set by remove_loadtarget() */ - return(-1); - } - break; - case PM_TRANS_TYPE_SYNC: - if(_pacman_sync_addtarget(trans, handle->db_local, handle->dbs_sync, target) == -1) { - /* pm_errno is set by sync_loadtarget() */ - return(-1); - } - break; + if(trans->ops->addtarget(trans, target) == -1) { + /* pm_errno is set by trans->ops->addtarget() */ + return(-1); } trans->targets = _pacman_list_add(trans->targets, strdup(target)); @@ -154,36 +159,22 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char *target) int _pacman_trans_prepare(pmtrans_t *trans, pmlist_t **data) { - *data = NULL; - /* Sanity checks */ ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->ops != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->ops->prepare != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(data != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + + *data = NULL; /* If there's nothing to do, return without complaining */ if(trans->packages == NULL) { return(0); } - switch(trans->type) { - case PM_TRANS_TYPE_ADD: - case PM_TRANS_TYPE_UPGRADE: - if(_pacman_add_prepare(trans, handle->db_local, data) == -1) { - /* pm_errno is set by _pacman_add_prepare() */ - return(-1); - } - break; - case PM_TRANS_TYPE_REMOVE: - if(_pacman_remove_prepare(trans, handle->db_local, data) == -1) { - /* pm_errno is set by _pacman_remove_prepare() */ - return(-1); - } - break; - case PM_TRANS_TYPE_SYNC: - if(_pacman_sync_prepare(trans, handle->db_local, handle->dbs_sync, data) == -1) { - /* pm_errno is set by _pacman_sync_prepare() */ - return(-1); - } - break; + if(trans->ops->prepare(trans, data) == -1) { + /* pm_errno is set by trans->ops->prepare() */ + return(-1); } trans->state = STATE_PREPARED; @@ -193,11 +184,13 @@ int _pacman_trans_prepare(pmtrans_t *trans, pmlist_t **data) int _pacman_trans_commit(pmtrans_t *trans, pmlist_t **data) { - if(data!=NULL) - *data = NULL; - /* Sanity checks */ ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->ops != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->ops->prepare != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + + if(data!=NULL) + *data = NULL; /* If there's nothing to do, return without complaining */ if(trans->packages == NULL) { @@ -206,26 +199,9 @@ int _pacman_trans_commit(pmtrans_t *trans, pmlist_t **data) trans->state = STATE_COMMITING; - switch(trans->type) { - case PM_TRANS_TYPE_ADD: - case PM_TRANS_TYPE_UPGRADE: - if(_pacman_add_commit(trans, handle->db_local) == -1) { - /* pm_errno is set by _pacman_add_prepare() */ - return(-1); - } - break; - case PM_TRANS_TYPE_REMOVE: - if(_pacman_remove_commit(trans, handle->db_local) == -1) { - /* pm_errno is set by _pacman_remove_prepare() */ - return(-1); - } - break; - case PM_TRANS_TYPE_SYNC: - if(_pacman_sync_commit(trans, handle->db_local, data) == -1) { - /* pm_errno is set by _pacman_sync_commit() */ - return(-1); - } - break; + if(trans->ops->commit(trans, data) == -1) { + /* pm_errno is set by trans->ops->commit() */ + return(-1); } trans->state = STATE_COMMITED; _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git