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

Reply via email to