[pacman-dev] questions about pmhandle and pmtrans
Xavier
shiningxc at gmail.com
Thu Jul 16 05:41:43 EDT 2009
The handle contains the current transaction and the local database :
typedef struct _pmhandle_t {
/* internal usage */
pmdb_t *db_local; /* local db pointer */
alpm_list_t *dbs_sync; /* List of (pmdb_t *) */
FILE *logstream; /* log file stream pointer */
int lckfd; /* lock file descriptor if one exists */
pmtrans_t *trans;
Yet we pass the trans or db_local param to many many functions :
$ egrep "pmtrans_t|db_local" lib/libalpm/*.h
lib/libalpm/add.h:int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t
*db, char *name);
lib/libalpm/add.h:int _alpm_upgrade_packages(pmtrans_t *trans, pmdb_t *db);
lib/libalpm/alpm.h:typedef struct __pmtrans_t pmtrans_t;
lib/libalpm/conflict.h:alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t
*db, pmtrans_t *trans,
lib/libalpm/handle.h: pmdb_t *db_local; /* local db pointer */
lib/libalpm/handle.h: pmtrans_t *trans;
lib/libalpm/remove.h:int _alpm_remove_loadtarget(pmtrans_t *trans,
pmdb_t *db, char *name);
lib/libalpm/remove.h:int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t
*db, alpm_list_t **data);
lib/libalpm/remove.h:int _alpm_remove_commit(pmtrans_t *trans, pmdb_t *db);
lib/libalpm/remove.h:int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db);
lib/libalpm/sync.h:int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t
*db_local, alpm_list_t *dbs_sync, int enable_downgrade);
lib/libalpm/sync.h:int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t
*db_local, alpm_list_t *dbs_sync, char *name);
lib/libalpm/sync.h:int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t
*db_local, alpm_list_t *dbs_sync, alpm_list_t **data);
lib/libalpm/sync.h:int _alpm_sync_commit(pmtrans_t *trans, pmdb_t
*db_local, alpm_list_t **data);
lib/libalpm/trans.h:struct __pmtrans_t {
lib/libalpm/trans.h:pmtrans_t *_alpm_trans_new(void);
lib/libalpm/trans.h:void _alpm_trans_free(pmtrans_t *trans);
lib/libalpm/trans.h:int _alpm_trans_init(pmtrans_t *trans, pmtransflag_t flags,
lib/libalpm/trans.h:int _alpm_trans_prepare(pmtrans_t *trans,
alpm_list_t **data);
lib/libalpm/trans.h:int _alpm_trans_commit(pmtrans_t *trans,
alpm_list_t **data);
lib/libalpm/trans.h: const char *oldver,
pmtrans_t *trans);
So what is the preferred way here? Since we use handle->trans or
handle->db_local in some places, why not everywhere?
Another thing I am wondering, why these 3 callbacks are part of pmtrans :
alpm_trans_cb_event cb_event;
alpm_trans_cb_conv cb_conv;
alpm_trans_cb_progress cb_progress;
and the other callbacks are in pmhandle :
/* callback functions */
alpm_cb_log logcb; /* Log callback function */
alpm_cb_download dlcb; /* Download callback function */
alpm_cb_totaldl totaldlcb; /* Total download callback function */
Why not having all callbacks in the handle?
At least in pacman frontend, cb_event, cb_conv and cb_progress are the
same for all transactions.
More information about the pacman-dev
mailing list