Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=aa3f66fa98abce1c1d7012a7f3a9c8cb57a5c961

commit aa3f66fa98abce1c1d7012a7f3a9c8cb57a5c961
Author: Michel Hermier <[email protected]>
Date:   Sun Apr 21 12:52:03 2013 +0200

libpacman: Move _pacman_sync_addtarget to trans.c.

diff --git a/lib/libpacman/sync.c b/lib/libpacman/sync.c
index 275ac31..5869526 100644
--- a/lib/libpacman/sync.c
+++ b/lib/libpacman/sync.c
@@ -57,122 +57,6 @@
#include "server.h"
#include "packages_transaction.h"

-static
-pmpkg_t *_pacman_db_search_provider(pmdb_t *db, const char *name) {
-       pmlist_t *p;
-       pmpkg_t *pkg;
-
-       _pacman_log(PM_LOG_FLOW2, _("looking for provisions of '%s' in database 
'%s'"), name, db->treename);
-       p = _pacman_db_whatprovides(db, name);
-       if (p == NULL) {
-               RET_ERR(PM_ERR_PKG_NOT_FOUND, NULL);
-       }
-       pkg = _pacman_pkg_dup(p->data);
-       FREELISTPTR(p);
-       _pacman_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s' in 
database '%S'"), pkg->name, name, db->treename);
-       return pkg;
-}
-
-static
-pmpkg_t *_pacman_db_list_get_pkg(pmlist_t *db_list, const char *pkg_name) {
-       pmlist_t *i;
-       pmpkg_t *pkg = NULL;
-
-       for (i = db_list; i && !pkg; i = i->next) {
-               pmdb_t *db = i->data;
-               pkg = _pacman_db_get_pkgfromcache(db, pkg_name);
-       }
-       if (pkg == NULL) {
-               _pacman_log(PM_LOG_FLOW2, _("target '%s' not found -- looking 
for provisions"), pkg_name);
-               for (i = db_list; i && !pkg; i = i->next) {
-                       pmdb_t *db = i->data;
-                       pkg = _pacman_db_search_provider (db, pkg_name);
-               }
-       }
-       if (pkg == NULL) {
-               RET_ERR(PM_ERR_PKG_NOT_FOUND, NULL);
-       }
-       return pkg;
-}
-
-int _pacman_sync_addtarget(pmtrans_t *trans, const char *name)
-{
-       char targline[PKG_FULLNAME_LEN];
-       char *targ;
-       pmpkg_t *local;
-       pmpkg_t *spkg = NULL;
-       pmsyncpkg_t *ps;
-       int cmp;
-       pmdb_t *db_local = trans->handle->db_local;
-       pmlist_t *dbs_search = NULL;
-
-       ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
-       ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
-       ASSERT(name != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
-
-       STRNCPY(targline, name, PKG_FULLNAME_LEN);
-       targ = strchr(targline, '/');
-       if(targ) {
-               pmdb_t *dbs;
-               *targ = '\0';
-               targ++;
-               dbs = _pacman_handle_get_db_sync (trans->handle, targline);
-               if (dbs != NULL) {
-                       /* FIXME: the list is leaked in this case */
-                       dbs_search = _pacman_list_add (dbs_search, dbs);
-                       if(dbs_search == NULL) {
-                               return -1;
-                       }
-               }
-       } else {
-               targ = targline;
-               dbs_search = trans->handle->dbs_sync;
-       }
-       spkg = _pacman_db_list_get_pkg (dbs_search, targ);
-       if(spkg == NULL) {
-               return -1;
-       }
-
-       local = _pacman_db_get_pkgfromcache(db_local, spkg->name);
-       if(local) {
-               cmp = _pacman_versioncmp(local->version, spkg->version);
-               if(cmp > 0) {
-                       /* local version is newer -- get confirmation before 
adding */
-                       int resp = 0;
-                       QUESTION(trans, PM_TRANS_CONV_LOCAL_NEWER, local, NULL, 
NULL, &resp);
-                       if(!resp) {
-                               _pacman_log(PM_LOG_WARNING, _("%s-%s: local 
version is newer -- skipping"), local->name, local->version);
-                               return(0);
-                       }
-               } else if(cmp == 0) {
-                       /* versions are identical -- get confirmation before 
adding */
-                       int resp = 0;
-                       QUESTION(trans, PM_TRANS_CONV_LOCAL_UPTODATE, local, 
NULL, NULL, &resp);
-                       if(!resp) {
-                               _pacman_log(PM_LOG_WARNING, _("%s-%s is up to 
date -- skipping"), local->name, local->version);
-                               return(0);
-                       }
-               }
-       }
-
-       /* add the package to the transaction */
-       if(!__pacman_trans_get_trans_pkg(trans, spkg->name)) {
-               ps = __pacman_trans_pkg_new(PM_TRANS_TYPE_UPGRADE, spkg);
-               if(ps == NULL) {
-                       goto error;
-               }
-               ps->flags = PM_TRANS_FLAG_EXPLICIT;
-               ps->pkg_local = local;
-               _pacman_log(PM_LOG_FLOW2, _("adding target '%s' to the 
transaction set"), spkg->name);
-               trans->packages = _pacman_list_add(trans->packages, ps);
-       }
-
-       return(0);
-
-error:
-       return -1;
-}
-
static int pkg_cmp(const void *p1, const void *p2)
{
return(strcmp(((pmpkg_t *)p1)->name, ((pmsyncpkg_t *)p2)->pkg_new->name));
@@ -927,16 +811,7 @@ error:
return(-1);
}

-#if 0
-const pmtrans_ops_t _pacman_sync_pmtrans_opts = {
-       .addtarget = _pacman_sync_addtarget,
-       .prepare = _pacman_sync_prepare,
-       .commit = _pacman_sync_commit
-};
-#endif
-
const pmtrans_ops_t _pacman_sync_pmtrans_opts = {
-       .addtarget = _pacman_sync_addtarget,
.prepare = _pacman_sync_prepare,
.commit = _pacman_trans_download_commit
};
diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c
index 2b3d7c0..54a125c 100644
--- a/lib/libpacman/trans.c
+++ b/lib/libpacman/trans.c
@@ -207,6 +207,44 @@ int _pacman_trans_sysupgrade(pmtrans_t *trans)
}

static
+pmpkg_t *_pacman_db_search_provider(pmdb_t *db, const char *name) {
+       pmlist_t *p;
+       pmpkg_t *pkg;
+
+       _pacman_log(PM_LOG_FLOW2, _("looking for provisions of '%s' in database 
'%s'"), name, db->treename);
+       p = _pacman_db_whatprovides(db, name);
+       if (p == NULL) {
+               RET_ERR(PM_ERR_PKG_NOT_FOUND, NULL);
+       }
+       pkg = _pacman_pkg_dup(p->data);
+       FREELISTPTR(p);
+       _pacman_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s' in 
database '%S'"), pkg->name, name, db->treename);
+       return pkg;
+}
+
+static
+pmpkg_t *_pacman_db_list_get_pkg(pmlist_t *db_list, const char *pkg_name) {
+       pmlist_t *i;
+       pmpkg_t *pkg = NULL;
+
+       for (i = db_list; i && !pkg; i = i->next) {
+               pmdb_t *db = i->data;
+               pkg = _pacman_db_get_pkgfromcache(db, pkg_name);
+       }
+       if (pkg == NULL) {
+               _pacman_log(PM_LOG_FLOW2, _("target '%s' not found -- looking 
for provisions"), pkg_name);
+               for (i = db_list; i && !pkg; i = i->next) {
+                       pmdb_t *db = i->data;
+                       pkg = _pacman_db_search_provider (db, pkg_name);
+               }
+       }
+       if (pkg == NULL) {
+               RET_ERR(PM_ERR_PKG_NOT_FOUND, NULL);
+       }
+       return pkg;
+}
+
+static
pmpkg_t *fakepkg_create(const char *name)
{
char *ptr, *p;
@@ -284,6 +322,84 @@ int _pacman_trans_add (pmtrans_t *trans, pmtranspkg_t 
*transpkg) {
return 0;
}

+int _pacman_sync_addtarget(pmtrans_t *trans, const char *name)
+{
+       char targline[PKG_FULLNAME_LEN];
+       char *targ;
+       pmpkg_t *local;
+       pmpkg_t *spkg = NULL;
+       pmsyncpkg_t *ps;
+       int cmp;
+       pmdb_t *db_local = trans->handle->db_local;
+       pmlist_t *dbs_search = NULL;
+
+       ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
+       ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
+       ASSERT(name != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
+
+       STRNCPY(targline, name, PKG_FULLNAME_LEN);
+       targ = strchr(targline, '/');
+       if(targ) {
+               pmdb_t *dbs;
+               *targ = '\0';
+               targ++;
+               dbs = _pacman_handle_get_db_sync (trans->handle, targline);
+               if (dbs != NULL) {
+                       /* FIXME: the list is leaked in this case */
+                       dbs_search = _pacman_list_add (dbs_search, dbs);
+                       if(dbs_search == NULL) {
+                               return -1;
+                       }
+               }
+       } else {
+               targ = targline;
+               dbs_search = trans->handle->dbs_sync;
+       }
+       spkg = _pacman_db_list_get_pkg (dbs_search, targ);
+       if(spkg == NULL) {
+               return -1;
+       }
+
+       local = _pacman_db_get_pkgfromcache(db_local, spkg->name);
+       if(local) {
+               cmp = _pacman_versioncmp(local->version, spkg->version);
+               if(cmp > 0) {
+                       /* local version is newer -- get confirmation before 
adding */
+                       int resp = 0;
+                       QUESTION(trans, PM_TRANS_CONV_LOCAL_NEWER, local, NULL, 
NULL, &resp);
+                       if(!resp) {
+                               _pacman_log(PM_LOG_WARNING, _("%s-%s: local 
version is newer -- skipping"), local->name, local->version);
+                               return(0);
+                       }
+               } else if(cmp == 0) {
+                       /* versions are identical -- get confirmation before 
adding */
+                       int resp = 0;
+                       QUESTION(trans, PM_TRANS_CONV_LOCAL_UPTODATE, local, 
NULL, NULL, &resp);
+                       if(!resp) {
+                               _pacman_log(PM_LOG_WARNING, _("%s-%s is up to 
date -- skipping"), local->name, local->version);
+                               return(0);
+                       }
+               }
+       }
+
+       /* add the package to the transaction */
+       if(!__pacman_trans_get_trans_pkg(trans, spkg->name)) {
+               ps = __pacman_trans_pkg_new(PM_TRANS_TYPE_UPGRADE, spkg);
+               if(ps == NULL) {
+                       goto error;
+               }
+               ps->flags = PM_TRANS_FLAG_EXPLICIT;
+               ps->pkg_local = local;
+               _pacman_log(PM_LOG_FLOW2, _("adding target '%s' to the 
transaction set"), spkg->name);
+               trans->packages = _pacman_list_add(trans->packages, ps);
+       }
+
+       return(0);
+
+error:
+       return -1;
+}
+
int _pacman_trans_addtarget(pmtrans_t *trans, const char *target, pmtranstype_t 
type, unsigned int flags)
{
char *pkg_name;
@@ -306,8 +422,8 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char 
*target, pmtranstype_t
RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1);
}

-       if(trans->ops != NULL && trans->ops->addtarget != NULL) {
-               ret = trans->ops->addtarget(trans, target);
+       if(trans->ops == &_pacman_sync_pmtrans_opts) {
+               ret = _pacman_sync_addtarget (trans, target);
} else {

if (type & PM_TRANS_TYPE_ADD) {
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to