#include <librpmDb.h>
Classes | |
class | D |
librpmDb internal database handle More... | |
class | db_const_iterator |
Subclass to retrieve database content. More... | |
class | DbDirInfo |
Collect info about what kind of rpmdb seems to be present by looking at paths and filenames. More... | |
Public Types | |
typedef intrusive_ptr< librpmDb > | Ptr |
typedef intrusive_ptr< const librpmDb > | constPtr |
Public Member Functions | |
virtual | ~librpmDb () |
Destructor. | |
const Pathname & | root () const |
const Pathname & | dbPath () const |
shared_ptr< RpmException > | error () const |
Return any database error. | |
bool | valid () const |
bool | empty () const |
unsigned | size () const |
void * | dont_call_it () const |
Dont call it ;) It's for development and testing only. | |
virtual std::ostream & | dumpOn (std::ostream &str) const |
Dump debug info. | |
Static Public Member Functions | |
static bool | globalInit () |
Initialize lib librpm (read configfiles etc. | |
static std::string | expand (const std::string ¯o_r) |
static std::string | stringPath (const Pathname &root_r, const Pathname &sub_r) |
static const Pathname & | defaultRoot () |
static const Pathname & | defaultDbPath () |
static void | dbAccess (const Pathname &root_r, const Pathname &dbPath_r) |
Adjust access to the given database location, making it the new default location on success. | |
static void | dbAccess (librpmDb::constPtr &ptr_r) |
Same as &ref dbAccess(), but returns the database handle if avaialble, otherwise NULL. | |
static unsigned | dbRelease (bool force_r=false) |
If there are no outstanding references to the database (e.g. | |
static unsigned | blockAccess () |
Blocks further access to rpmdb. | |
static void | unblockAccess () |
Allow access to rpmdb e.g. | |
static bool | isBlocked () |
static std::ostream & | dumpState (std::ostream &str) |
Dump debug info. | |
Protected Member Functions | |
librpmDb (const Pathname &root_r, const Pathname &dbPath_r, bool readonly_r) | |
Private constructor! librpmDb objects are to be created via static interface only. | |
virtual void | unref_to (unsigned refCount_r) const |
Trigger from Rep, after refCount was decreased. | |
Static Private Member Functions | |
static void | dbAccess (librpmDb::Ptr &ptr_r) |
INTENTIONALLY UNDEFINED<> because of bug in Ptr classes which allows implicit conversion from librpmDb::Ptr to librpmDb::constPtr. | |
static librpmDb * | newLibrpmDb (Pathname root_r, Pathname dbPath_r, bool readonly_r) |
For internal use. | |
static void | dbAccess () |
Access the database at the current default location. | |
Private Attributes | |
D & | _d |
Static Private Attributes | |
static Pathname | _defaultRoot |
Current root directory for all operations. | |
static Pathname | _defaultDbPath |
Current directory (below root) that contains the rpmdb. | |
static librpmDb::constPtr | _defaultDb |
Current rpmdb handle. | |
static bool | _dbBlocked |
Wheter access is blocked (no _defaultDb will be available). |
Definition at line 38 of file librpmDb.h.
typedef intrusive_ptr<librpmDb> zypp::target::rpm::librpmDb::Ptr |
Definition at line 41 of file librpmDb.h.
typedef intrusive_ptr<const librpmDb> zypp::target::rpm::librpmDb::constPtr |
Definition at line 42 of file librpmDb.h.
zypp::target::rpm::librpmDb::librpmDb | ( | const Pathname & | root_r, | |
const Pathname & | dbPath_r, | |||
bool | readonly_r | |||
) | [protected] |
Private constructor! librpmDb objects are to be created via static interface only.
Definition at line 369 of file librpmDb.cc.
Referenced by newLibrpmDb().
zypp::target::rpm::librpmDb::~librpmDb | ( | ) | [virtual] |
void zypp::target::rpm::librpmDb::dbAccess | ( | librpmDb::Ptr & | ptr_r | ) | [static, private] |
INTENTIONALLY UNDEFINED<> because of bug in Ptr classes which allows implicit conversion from librpmDb::Ptr to librpmDb::constPtr.
Currently we don't want to provide non const handles, as the database is opened READONLY.
RpmException |
Definition at line 263 of file librpmDb.cc.
References _defaultDb, dbAccess(), ZYPP_CAUGHT, and ZYPP_RETHROW.
librpmDb * zypp::target::rpm::librpmDb::newLibrpmDb | ( | Pathname | root_r, | |
Pathname | dbPath_r, | |||
bool | readonly_r | |||
) | [static, private] |
For internal use.
Pointer returned should immediately be wrapped into librpmDb::Ptr.
RpmException |
Definition at line 174 of file librpmDb.cc.
References globalInit(), librpmDb(), ZYPP_CAUGHT, ZYPP_RETHROW, and ZYPP_THROW.
Referenced by dbAccess().
void zypp::target::rpm::librpmDb::dbAccess | ( | ) | [static, private] |
Access the database at the current default location.
If necessary (eg. after dbRelease), the database is opened. This just creates the internal handle. Once the handle is passed to e.g. some db_const_iterator, the database will be closed if the last outstanding reference goes out of scope. If no external reference is created, you'll have to explicitly call dbRelease to close the database.
RpmException |
Definition at line 243 of file librpmDb.cc.
References _dbBlocked, _defaultDb, _defaultDbPath, _defaultRoot, newLibrpmDb(), and ZYPP_THROW.
Referenced by zypp::target::rpm::librpmDb::db_const_iterator::D::D(), dbAccess(), and zypp::target::rpm::RpmDb::internal_initDatabase().
bool zypp::target::rpm::librpmDb::globalInit | ( | ) | [static] |
Initialize lib librpm (read configfiles etc.
). It's called on demand but you may call it anytime.
Definition at line 123 of file librpmDb.cc.
References ERR, MIL, and OUTVAL.
Referenced by expand(), newLibrpmDb(), zypp::target::rpm::RpmHeader::readPackage(), and zypp::target::rpm::RpmDb::RpmDb().
std::string zypp::target::rpm::librpmDb::expand | ( | const std::string & | macro_r | ) | [static] |
Definition at line 154 of file librpmDb.cc.
References globalInit().
static std::string zypp::target::rpm::librpmDb::stringPath | ( | const Pathname & | root_r, | |
const Pathname & | sub_r | |||
) | [inline, static] |
Definition at line 127 of file librpmDb.h.
Referenced by dbAccess(), and zypp::target::rpm::stringPath().
static const Pathname& zypp::target::rpm::librpmDb::defaultRoot | ( | ) | [inline, static] |
Definition at line 137 of file librpmDb.h.
References _defaultRoot.
static const Pathname& zypp::target::rpm::librpmDb::defaultDbPath | ( | ) | [inline, static] |
Definition at line 145 of file librpmDb.h.
References _defaultDbPath.
void zypp::target::rpm::librpmDb::dbAccess | ( | const Pathname & | root_r, | |
const Pathname & | dbPath_r | |||
) | [static] |
Adjust access to the given database location, making it the new default location on success.
No relative Pathnames are allowed.
It's not possible to access a database while access is blocked (see blockAccess), but valid Pathnames provided will be stored as new default location.
It's not allowed to switch to another location while a database is accessed. Use dbRelease to force releasing the database first.
RpmException |
Definition at line 210 of file librpmDb.cc.
References _defaultDb, _defaultDbPath, _defaultRoot, dbAccess(), MIL, stringPath(), and ZYPP_THROW.
static void zypp::target::rpm::librpmDb::dbAccess | ( | librpmDb::constPtr & | ptr_r | ) | [static] |
Same as &ref dbAccess(), but returns the database handle if avaialble, otherwise NULL.
This creates an external reference, thus it should not be used longer than necessary. Be prepared that the handle might become invalid (see dbRelease) later.
RpmException |
unsigned zypp::target::rpm::librpmDb::dbRelease | ( | bool | force_r = false |
) | [static] |
If there are no outstanding references to the database (e.g.
by db_const_iterator), the database is closed. Subsequent calls to dbAccess may however open the database again.
If forced, the internal reference is dropped and it will look like the database was closed. But physically the database will be closed after all outstanding references are gone.
Definition at line 284 of file librpmDb.cc.
References _defaultDb, and DBG.
Referenced by blockAccess(), zypp::target::rpm::RpmDb::initDatabase(), zypp::target::rpm::RpmDb::run_rpm(), and unref_to().
unsigned zypp::target::rpm::librpmDb::blockAccess | ( | ) | [static] |
Blocks further access to rpmdb.
Basically the same as dbRelease( true ), but subsequent calls to dbAccess will fail returning E_RpmDB_access_blocked.
Definition at line 321 of file librpmDb.cc.
References _dbBlocked, dbRelease(), and MIL.
Referenced by zypp::target::rpm::RpmDb::closeDatabase(), and zypp::target::rpm::RpmDb::initDatabase().
void zypp::target::rpm::librpmDb::unblockAccess | ( | ) | [static] |
Allow access to rpmdb e.g.
after blockAccess. Subsequent calls to dbAccess will perform.
NOTE: Initially we're in blocked mode. So you must call unblockAccess unblockAccess at least once. Othwise nothing will happen.
Definition at line 334 of file librpmDb.cc.
References _dbBlocked, and MIL.
Referenced by zypp::target::rpm::RpmDb::initDatabase().
static bool zypp::target::rpm::librpmDb::isBlocked | ( | ) | [inline, static] |
Definition at line 215 of file librpmDb.h.
References _dbBlocked.
static std::ostream& zypp::target::rpm::librpmDb::dumpState | ( | std::ostream & | str | ) | [static] |
void zypp::target::rpm::librpmDb::unref_to | ( | unsigned | refCount_r | ) | const [protected, virtual] |
Trigger from Rep, after refCount was decreased.
Reimplemented from zypp::base::ReferenceCounted.
Definition at line 392 of file librpmDb.cc.
References dbRelease().
const Pathname & zypp::target::rpm::librpmDb::root | ( | ) | const |
Definition at line 406 of file librpmDb.cc.
References _d, and zypp::target::rpm::librpmDb::D::_root.
Referenced by zypp::target::rpm::librpmDb::D::D().
const Pathname & zypp::target::rpm::librpmDb::dbPath | ( | ) | const |
Definition at line 417 of file librpmDb.cc.
References _d, and zypp::target::rpm::librpmDb::D::_dbPath.
shared_ptr< RpmException > zypp::target::rpm::librpmDb::error | ( | ) | const |
Return any database error.
Usg. if the database was blocked by calling dbRelease(true) or blockAccess.
Definition at line 428 of file librpmDb.cc.
References _d, and zypp::target::rpm::librpmDb::D::_error.
Referenced by valid().
bool zypp::target::rpm::librpmDb::valid | ( | ) | const [inline] |
bool zypp::target::rpm::librpmDb::empty | ( | ) | const |
Definition at line 439 of file librpmDb.cc.
References valid().
unsigned zypp::target::rpm::librpmDb::size | ( | ) | const |
Definition at line 450 of file librpmDb.cc.
References _d, zypp::target::rpm::librpmDb::D::_db, and valid().
void * zypp::target::rpm::librpmDb::dont_call_it | ( | ) | const |
Dont call it ;) It's for development and testing only.
Definition at line 496 of file librpmDb.cc.
References _d, and zypp::target::rpm::librpmDb::D::_db.
virtual std::ostream& zypp::target::rpm::librpmDb::dumpOn | ( | std::ostream & | str | ) | const [virtual] |
Pathname zypp::target::rpm::librpmDb::_defaultRoot [static, private] |
Current root directory for all operations.
(initialy /)
Definition at line 68 of file librpmDb.h.
Referenced by dbAccess(), and defaultRoot().
Pathname zypp::target::rpm::librpmDb::_defaultDbPath [static, private] |
Current directory (below root) that contains the rpmdb.
(initialy /var/lib/rpm)
Definition at line 74 of file librpmDb.h.
Referenced by dbAccess(), and defaultDbPath().
librpmDb::constPtr zypp::target::rpm::librpmDb::_defaultDb [static, private] |
Current rpmdb handle.
Definition at line 79 of file librpmDb.h.
Referenced by dbAccess(), and dbRelease().
bool zypp::target::rpm::librpmDb::_dbBlocked [static, private] |
Wheter access is blocked (no _defaultDb will be available).
Definition at line 84 of file librpmDb.h.
Referenced by blockAccess(), dbAccess(), isBlocked(), and unblockAccess().
D& zypp::target::rpm::librpmDb::_d [private] |
Definition at line 248 of file librpmDb.h.
Referenced by dbPath(), dont_call_it(), error(), root(), size(), and ~librpmDb().