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

commit 110d1edd1cc603e756fa92c9c690a1f7524f887e
Author: Michel Hermier <[email protected]>
Date:   Thu May 8 14:47:57 2014 +0200

libpacman: Replace _pacman_db_register with Handle::getDatabase.

diff --git a/lib/libpacman/config_parser.cpp b/lib/libpacman/config_parser.cpp
index 017a7f6..e6d2e73 100644
--- a/lib/libpacman/config_parser.cpp
+++ b/lib/libpacman/config_parser.cpp
@@ -87,7 +87,7 @@ int _pacman_parse_config(const char *file, 
pacman_cb_db_register callback, const
RET_ERR(PM_ERR_CONF_LOCAL, -1);
}
if(strcmp(section, "options")) {
-                       db = _pacman_db_register(section, callback);
+                       db = handle->getDatabase(section, callback);
}
} else {
FREELIST(handle->ignorepkg);
@@ -117,7 +117,7 @@ int _pacman_parse_config(const char *file, 
pacman_cb_db_register callback, const
RET_ERR(PM_ERR_CONF_LOCAL, -1);
}
if(strcmp(section, "options")) {
-                               db = _pacman_db_register(section, callback);
+                               db = handle->getDatabase(section, callback);
if(db == NULL) {
/* pm_errno is set by pacman_db_register */
return(-1);
diff --git a/lib/libpacman/db.cpp b/lib/libpacman/db.cpp
index b600996..40744c1 100644
--- a/lib/libpacman/db.cpp
+++ b/lib/libpacman/db.cpp
@@ -221,48 +221,4 @@ int _pacman_db_setlastupdate(Database *db, const char *ts)
return(0);
}

-Database *_pacman_db_register(const char *treename, pacman_cb_db_register 
callback)
-{
-       Database *db;
-
-       if(strcmp(treename, "local") == 0) {
-               if(handle->db_local != NULL) {
-                       _pacman_log(PM_LOG_WARNING, _("attempt to re-register 
the 'local' DB\n"));
-                       RET_ERR(PM_ERR_DB_NOT_NULL, NULL);
-               }
-       } else {
-               pmlist_t *i;
-               for(i = handle->dbs_sync; i; i = i->next) {
-                       Database *sdb = i->data;
-                       if(strcmp(treename, sdb->treename) == 0) {
-                               _pacman_log(PM_LOG_DEBUG, _("attempt to 
re-register the '%s' database, using existing\n"), sdb->treename);
-                               return sdb;
-                       }
-               }
-       }
-
-       _pacman_log(PM_LOG_FLOW1, _("registering database '%s'"), treename);
-
-       db = strcmp(treename, "local") == 0 ? (Database *)new 
LocalDatabase(handle, treename) : new SyncDatabase(handle, treename);
-       if(db == NULL) {
-               RET_ERR(PM_ERR_DB_CREATE, NULL);
-       }
-
-       _pacman_log(PM_LOG_DEBUG, _("opening database '%s'"), db->treename);
-       if(db->open(0) == -1) {
-               delete db;
-               RET_ERR(PM_ERR_DB_OPEN, NULL);
-       }
-
-       /* Only call callback on NEW registration. */
-       if(callback) callback(treename, c_cast(db));
-
-       if(strcmp(treename, "local") == 0) {
-               handle->db_local = db;
-       } else {
-               handle->dbs_sync = _pacman_list_add(handle->dbs_sync, db);
-       }
-       return(db);
-}
-
/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h
index 31c1c14..d732159 100644
--- a/lib/libpacman/db.h
+++ b/lib/libpacman/db.h
@@ -85,8 +85,6 @@ private:

int _pacman_db_cmp(const void *db1, const void *db2);

-libpacman::Database *_pacman_db_register(const char *treename, 
pacman_cb_db_register callback);
-
#endif /* _PACMAN_DB_H */

/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/handle.cpp b/lib/libpacman/handle.cpp
index fe4de13..986acdd 100644
--- a/lib/libpacman/handle.cpp
+++ b/lib/libpacman/handle.cpp
@@ -25,9 +25,12 @@

#include "handle.h"

+#include "db/localdb.h"
+#include "db/syncdb.h"
#include "error.h"
#include "trans.h"
#include "pacman.h"
+#include "pacman_p.h"
#include "server.h"
#include "util.h"

@@ -118,20 +121,63 @@ int Handle::lock()
char lckpath[PATH_MAX];

snprintf(lckpath, PATH_MAX, "%s/%s", root, PM_LOCK);
-       return (handle->filelock = f_filelock_aquire(lckpath, 
F_FILELOCK_CREATE_HOLD_DIR | F_FILELOCK_EXCLUSIVE | 
F_FILELOCK_UNLINK_ON_CLOSE)) != NULL ? 0: -1;
+       return (filelock = f_filelock_aquire(lckpath, 
F_FILELOCK_CREATE_HOLD_DIR | F_FILELOCK_EXCLUSIVE | 
F_FILELOCK_UNLINK_ON_CLOSE)) != NULL ? 0: -1;
}

int Handle::unlock()
{
int ret = 0;

-       ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
-
-       if(handle->filelock != NULL) {
-               ret = f_filelock_release(handle->filelock);
-               handle->filelock = NULL;
+       if(filelock != NULL) {
+               ret = f_filelock_release(filelock);
+               filelock = NULL;
}
return ret;
}

+Database *Handle::getDatabase(const char *treename, pacman_cb_db_register 
callback)
+{
+       Database *db;
+
+       if(strcmp(treename, "local") == 0) {
+               if(db_local != NULL) {
+                       _pacman_log(PM_LOG_WARNING, _("attempt to re-register 
the 'local' DB\n"));
+                       RET_ERR(PM_ERR_DB_NOT_NULL, NULL);
+               }
+       } else {
+               pmlist_t *i;
+               for(i = dbs_sync; i; i = i->next) {
+                       Database *sdb = i->data;
+                       if(strcmp(treename, sdb->treename) == 0) {
+                               _pacman_log(PM_LOG_DEBUG, _("attempt to 
re-register the '%s' database, using existing\n"), sdb->treename);
+                               return sdb;
+                       }
+               }
+       }
+
+       _pacman_log(PM_LOG_FLOW1, _("registering database '%s'"), treename);
+
+       db = strcmp(treename, "local") == 0 ? (Database *)new 
LocalDatabase(this, treename) : new SyncDatabase(this, treename);
+       if(db == NULL) {
+               RET_ERR(PM_ERR_DB_CREATE, NULL);
+       }
+
+       _pacman_log(PM_LOG_DEBUG, _("opening database '%s'"), db->treename);
+       if(db->open(0) == -1) {
+               delete db;
+               RET_ERR(PM_ERR_DB_OPEN, NULL);
+       }
+
+       /* Only call callback on NEW registration. */
+       if(callback) callback(treename, c_cast(db));
+
+       if(strcmp(treename, "local") == 0) {
+               db_local = db;
+       } else {
+               dbs_sync = _pacman_list_add(dbs_sync, db);
+       }
+       return(db);
+}
+
/* vim: set ts=2 sw=2 noet: */
+
diff --git a/lib/libpacman/handle.h b/lib/libpacman/handle.h
index f9a44bf..437abdb 100644
--- a/lib/libpacman/handle.h
+++ b/lib/libpacman/handle.h
@@ -55,6 +55,8 @@ public:
int lock();
int unlock();

+       libpacman::Database *getDatabase(const char *treename, 
pacman_cb_db_register callback);
+
pmaccess_t access;
uid_t uid;
libpacman::Database *db_local;
diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp
index 16b0dd7..f55cdd4 100644
--- a/lib/libpacman/pacman.cpp
+++ b/lib/libpacman/pacman.cpp
@@ -383,7 +383,7 @@ pmdb_t *pacman_db_register(const char *treename)
/* Do not register a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL));

-       return c_cast(_pacman_db_register(treename, NULL));
+       return c_cast(handle->getDatabase(treename, NULL));
}

/** Unregister a package database
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to