[pacman-dev] questions about pmhandle and pmtrans
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.
On Thu, Jul 16, 2009 at 11:41 AM, Xavier<shiningxc@gmail.com> wrote:
So what is the preferred way here? Since we use handle->trans or handle->db_local in some places, why not everywhere?
Also it is worth noticing that in many cases, it works this way : int SYMEXPORT alpm_trans_sysupgrade(int enable_downgrade) { .... return(_alpm_sync_sysupgrade(handle->trans, handle->db_local, handle->dbs_sync, enable_downgrade)); } So it is just the public function using the handle. But why not just renaming _alpm_sync_sysupgrade(handle->trans, handle->db_local, handle->dbs_sync, enable_downgrade)); to alpm_trans_sysupgrade(int enable_downgrade) ? I never understood what was the point of having all public functions just stupid wrapper to internal ones.
participants (1)
-
Xavier