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
