libzypp  11.13.5
zypp::target::rpm::RpmDb Class Reference

Interface to the rpm program. More...

#include <RpmDb.h>

Inheritance diagram for zypp::target::rpm::RpmDb:

List of all members.

Public Types

enum  SyncTrustedKeyBits { SYNC_TO_KEYRING = 1<<0, SYNC_FROM_KEYRING = 1<<1, SYNC_BOTH = SYNC_TO_KEYRING | SYNC_FROM_KEYRING }
 Sync mode for syncTrustedKeys. More...
enum  checkPackageResult {
  CHK_OK = 0, CHK_NOTFOUND = 1, CHK_FAIL = 2, CHK_NOTTRUSTED = 3,
  CHK_NOKEY = 4, CHK_ERROR = 5
}
 checkPackage result More...
typedef class InstTargetError Error
 Default error class.
typedef std::set< std::string > FileList

Public Member Functions

 RpmDb ()
 Constructor.
 ~RpmDb ()
 Destructor.
Date timestamp () const
 timestamp of the rpm database (last modification)
const Pathname & root () const
const Pathname & dbPath () const
bool initialized () const
void initDatabase (Pathname root_r=Pathname(), Pathname dbPath_r=Pathname(), bool doRebuild_r=false)
 Prepare access to the rpm database.
void closeDatabase ()
 Block further access to the rpm database and go back to uninitialized state.
void rebuildDatabase ()
 Rebuild the rpm database (rpm –rebuilddb).
void importPubkey (const PublicKey &pubkey_r)
 Import ascii armored public key in file pubkey_r.
void removePubkey (const PublicKey &pubkey_r)
 Remove a public key from the rpm database.
std::list< PublicKeypubkeys () const
 Return the long ids of all installed public keys.
std::set< EditionpubkeyEditions () const
 Return the edition of all installed public keys.
std::list< FileInfofileList (const std::string &name_r, const Edition &edition_r) const
 return complete file list for installed package name_r (in FileInfo.filename) if edition_r != Edition::noedition, check for exact edition if full==true, fill all attributes of FileInfo
bool hasFile (const std::string &file_r, const std::string &name_r="") const
 Return true if at least one package owns a certain file (name_r empty) Return true if package name_r owns file file_r (name_r nonempty).
std::string whoOwnsFile (const std::string &file_r) const
 Return name of package owning file or empty string if no installed package owns file.
bool hasProvides (const std::string &tag_r) const
 Return true if at least one package provides a certain tag.
bool hasRequiredBy (const std::string &tag_r) const
 Return true if at least one package requires a certain tag.
bool hasConflicts (const std::string &tag_r) const
 Return true if at least one package conflicts with a certain tag.
bool hasPackage (const std::string &name_r) const
 Return true if package is installed.
bool hasPackage (const std::string &name_r, const Edition &ed_r) const
 Return true if package is installed in a certain edition.
void getData (const std::string &name_r, RpmHeader::constPtr &result_r) const
 Get an installed packages data from rpmdb.
void getData (const std::string &name_r, const Edition &ed_r, RpmHeader::constPtr &result_r) const
 Get an installed packages data from rpmdb.
void syncTrustedKeys (SyncTrustedKeyBits mode_r=SYNC_BOTH)
 Sync trusted keys stored in rpm database and zypp trusted keyring.
void importZyppKeyRingTrustedKeys ()
 iterates through zypp keyring and import all non existant keys into rpm keyring
void exportTrustedKeysInZyppKeyRing ()
 insert all rpm trusted keys into zypp trusted keyring
checkPackageResult checkPackage (const Pathname &path_r)
 Check signature of rpm file on disk.
void installPackage (const Pathname &filename, RpmInstFlags flags=RPMINST_NONE)
 install rpm package
void removePackage (const std::string &name_r, RpmInstFlags flags=RPMINST_NONE)
 remove rpm package
void removePackage (Package::constPtr package, RpmInstFlags flags=RPMINST_NONE)
Pathname getBackupPath (void)
 get backup dir for rpm config files
bool backupPackage (const std::string &packageName)
 create tar.gz of all changed files in a Package
bool backupPackage (const Pathname &filename)
 queries file for name and then calls above backupPackage function.
void setBackupPath (const Pathname &path)
 set path where package backups are stored
void createPackageBackups (bool yes)
 whether to create package backups during install or removal
bool queryChangedFiles (FileList &fileList, const std::string &packageName)
 determine which files of an installed package have been modified.
virtual std::ostream & dumpOn (std::ostream &str) const
 Dump debug info.
- Public Member Functions inherited from zypp::base::ReferenceCounted
 ReferenceCounted ()
 Default ctor.
 ReferenceCounted (const ReferenceCounted &rhs)
 Copy ctor.
virtual ~ReferenceCounted ()
 Dtor.
ReferenceCountedoperator= (const ReferenceCounted &)
 Assignment.
unsigned refCount () const
 Return reference counter value.
void ref () const
 Add a reference.
void unref () const
 Release a reference.

Protected Member Functions

void doRemovePackage (const std::string &name_r, RpmInstFlags flags, callback::SendReport< RpmRemoveReport > &report)
void doInstallPackage (const Pathname &filename, RpmInstFlags flags, callback::SendReport< RpmInstallReport > &report)
void doRebuildDatabase (callback::SendReport< RebuildDBReport > &report)
- Protected Member Functions inherited from zypp::base::ReferenceCounted
virtual void ref_to (unsigned) const
 Trigger derived classes after refCount was increased.
virtual void unref_to (unsigned) const
 Trigger derived classes after refCount was decreased.

Private Types

enum  DbStateInfoBits {
  DbSI_NO_INIT = 0x0000, DbSI_HAVE_V4 = 0x0001, DbSI_MADE_V4 = 0x0002, DbSI_MODIFIED_V4 = 0x0004,
  DbSI_HAVE_V3 = 0x0008, DbSI_HAVE_V3TOV4 = 0x0010, DbSI_MADE_V3TOV4 = 0x0020
}
typedef std::vector< const char * > RpmArgVec

Private Member Functions

void dbsi_set (DbStateInfoBits &val_r, const unsigned &bits_r) const
void dbsi_clr (DbStateInfoBits &val_r, const unsigned &bits_r) const
bool dbsi_has (const DbStateInfoBits &val_r, const unsigned &bits_r) const
void internal_initDatabase (const Pathname &root_r, const Pathname &dbPath_r, DbStateInfoBits &info_r)
 Internal helper for initDatabase.
void modifyDatabase ()
 Called before the database is modified by installPackage/removePackage.
void run_rpm (const RpmArgVec &options, ExternalProgram::Stderr_Disposition stderr_disp=ExternalProgram::Stderr_To_Stdout)
 Run rpm with the specified arguments and handle stderr.
bool systemReadLine (std::string &line)
 Read a line from the general rpm query.
int systemStatus ()
 Return the exit status of the general rpm process, closing the connection if not already done.
void systemKill ()
 Forcably kill the system process.
void processConfigFiles (const std::string &line, const std::string &name, const char *typemsg, const char *difffailmsg, const char *diffgenmsg)
 handle rpm messages like "/etc/testrc saved as /etc/testrc.rpmorig"

Static Private Member Functions

static void removeV4 (const Pathname &dbdir_r, bool v3backup_r)
 Remove the rpm4 database in dbdir_r and optionally any backup created on conversion.
static void removeV3 (const Pathname &dbdir_r, bool v3backup_r)
 Remove the rpm3 database in dbdir_r.

Private Attributes

DbStateInfoBits _dbStateInfo
 Internal state info.
Pathname _root
 Root directory for all operations.
Pathname _dbPath
 Directory that contains the rpmdb.
ExternalProgramprocess
 The connection to the rpm process.
int exit_code
 The exit code of the rpm process, or -1 if not yet known.
std::string error_message
 Error message from running rpm as external program.
Pathname _backuppath
 /var/adm/backup
bool _packagebackups
 create package backups?
bool _warndirexists
 whether <_root>/<WARNINGMAILPATH> was already created

Friends

std::ostream & operator<< (std::ostream &str, const DbStateInfoBits &obj)

Additional Inherited Members

- Static Public Member Functions inherited from zypp::base::ReferenceCounted
static void add_ref (const ReferenceCounted *ptr_r)
 Called by zypp::intrusive_ptr to add a reference.
static void release (const ReferenceCounted *ptr_r)
 Called by zypp::intrusive_ptr to add a reference.

Detailed Description

Interface to the rpm program.

Definition at line 47 of file RpmDb.h.


Member Typedef Documentation

typedef class InstTargetError zypp::target::rpm::RpmDb::Error

Default error class.

Definition at line 54 of file RpmDb.h.

typedef std::vector<const char*> zypp::target::rpm::RpmDb::RpmArgVec
private

Definition at line 353 of file RpmDb.h.

typedef std::set<std::string> zypp::target::rpm::RpmDb::FileList

Definition at line 423 of file RpmDb.h.


Member Enumeration Documentation

Enumerator:
DbSI_NO_INIT 
DbSI_HAVE_V4 
DbSI_MADE_V4 
DbSI_MODIFIED_V4 
DbSI_HAVE_V3 
DbSI_HAVE_V3TOV4 
DbSI_MADE_V3TOV4 

Definition at line 63 of file RpmDb.h.

Sync mode for syncTrustedKeys.

Enumerator:
SYNC_TO_KEYRING 
SYNC_FROM_KEYRING 

export rpm trusted keys into zypp trusted keyring

SYNC_BOTH 

import zypp trusted keys into rpm database.

Definition at line 327 of file RpmDb.h.

checkPackage result

See also:
checkPackage
Enumerator:
CHK_OK 

Signature is OK.

CHK_NOTFOUND 

Signature is unknown type.

CHK_FAIL 

Signature does not verify.

CHK_NOTTRUSTED 

Signature is OK, but key is not trusted.

CHK_NOKEY 

Public key is unavailable.

CHK_ERROR 

File does not exist or can't be opened.

Definition at line 429 of file RpmDb.h.


Constructor & Destructor Documentation

zypp::target::rpm::RpmDb::RpmDb ( )

Constructor.

There's no rpmdb access until initDatabase was called.

Definition at line 222 of file RpmDb.cc.

zypp::target::rpm::RpmDb::~RpmDb ( )

Destructor.

Definition at line 244 of file RpmDb.cc.


Member Function Documentation

void zypp::target::rpm::RpmDb::dbsi_set ( DbStateInfoBits val_r,
const unsigned &  bits_r 
) const
inlineprivate

Definition at line 75 of file RpmDb.h.

void zypp::target::rpm::RpmDb::dbsi_clr ( DbStateInfoBits val_r,
const unsigned &  bits_r 
) const
inlineprivate

Definition at line 79 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::dbsi_has ( const DbStateInfoBits val_r,
const unsigned &  bits_r 
) const
inlineprivate

Definition at line 83 of file RpmDb.h.

void zypp::target::rpm::RpmDb::internal_initDatabase ( const Pathname &  root_r,
const Pathname &  dbPath_r,
DbStateInfoBits info_r 
)
private

Internal helper for initDatabase.

Exceptions:
RpmException

Definition at line 425 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::removeV4 ( const Pathname &  dbdir_r,
bool  v3backup_r 
)
staticprivate

Remove the rpm4 database in dbdir_r and optionally any backup created on conversion.

Definition at line 550 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::removeV3 ( const Pathname &  dbdir_r,
bool  v3backup_r 
)
staticprivate

Remove the rpm3 database in dbdir_r.

Create a backup copy named packages.rpm3 if it does not already exist.

Definition at line 616 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::modifyDatabase ( )
private

Called before the database is modified by installPackage/removePackage.

Invalidates Packages list and moves away any old database.

Definition at line 682 of file RpmDb.cc.

Date zypp::target::rpm::RpmDb::timestamp ( ) const

timestamp of the rpm database (last modification)

Definition at line 253 of file RpmDb.cc.

const Pathname& zypp::target::rpm::RpmDb::root ( ) const
inline
Returns:
Root directory for all operations (empty if not initialized).

Definition at line 151 of file RpmDb.h.

const Pathname& zypp::target::rpm::RpmDb::dbPath ( ) const
inline
Returns:
Directory that contains the rpmdb (empty if not initialized).

Definition at line 159 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::initialized ( ) const
inline
Returns:
Whether we are initialized.

Definition at line 167 of file RpmDb.h.

void zypp::target::rpm::RpmDb::initDatabase ( Pathname  root_r = Pathname(),
Pathname  dbPath_r = Pathname(),
bool  doRebuild_r = false 
)

Prepare access to the rpm database.

Optional arguments may denote the root directory for all operations and the directory (below root) that contains the rpmdb (usg. you won't need to set this).

On empty Pathnames the default is used:

     root:   /
     dbPath: /var/lib/rpm
 

Calling initDatabase a second time with different arguments will return an error but leave the database in it's original state.

Converting an old batabase is done if necessary. On update: The converted database will be removed by closeDatabase, if it was not modified (no packages were installed or deleted). Otherwise the new database is kept, and the old one is removed.

If the database alredy exists and doRebuild_r is true, rebuildDatabase is called.

Exceptions:
RpmException

Definition at line 307 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::closeDatabase ( )

Block further access to the rpm database and go back to uninitialized state.

On update: Decides what to do with any converted database (see initDatabase).

Exceptions:
RpmException

Definition at line 705 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::rebuildDatabase ( )

Rebuild the rpm database (rpm –rebuilddb).

Exceptions:
RpmException

Definition at line 752 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::importPubkey ( const PublicKey pubkey_r)

Import ascii armored public key in file pubkey_r.

Exceptions:
RpmException

Definition at line 1012 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::removePubkey ( const PublicKey pubkey_r)

Remove a public key from the rpm database.

Exceptions:
RpmException

Definition at line 1116 of file RpmDb.cc.

list< PublicKey > zypp::target::rpm::RpmDb::pubkeys ( ) const

Return the long ids of all installed public keys.

Definition at line 1187 of file RpmDb.cc.

set< Edition > zypp::target::rpm::RpmDb::pubkeyEditions ( ) const

Return the edition of all installed public keys.

Definition at line 1225 of file RpmDb.cc.

list< FileInfo > zypp::target::rpm::RpmDb::fileList ( const std::string &  name_r,
const Edition edition_r 
) const

return complete file list for installed package name_r (in FileInfo.filename) if edition_r != Edition::noedition, check for exact edition if full==true, fill all attributes of FileInfo

Definition at line 1249 of file RpmDb.cc.

bool zypp::target::rpm::RpmDb::hasFile ( const std::string &  file_r,
const std::string &  name_r = "" 
) const

Return true if at least one package owns a certain file (name_r empty) Return true if package name_r owns file file_r (name_r nonempty).

Definition at line 1278 of file RpmDb.cc.

string zypp::target::rpm::RpmDb::whoOwnsFile ( const std::string &  file_r) const

Return name of package owning file or empty string if no installed package owns file.

Definition at line 1304 of file RpmDb.cc.

bool zypp::target::rpm::RpmDb::hasProvides ( const std::string &  tag_r) const

Return true if at least one package provides a certain tag.

Definition at line 1322 of file RpmDb.cc.

bool zypp::target::rpm::RpmDb::hasRequiredBy ( const std::string &  tag_r) const

Return true if at least one package requires a certain tag.

Definition at line 1336 of file RpmDb.cc.

bool zypp::target::rpm::RpmDb::hasConflicts ( const std::string &  tag_r) const

Return true if at least one package conflicts with a certain tag.

Definition at line 1350 of file RpmDb.cc.

bool zypp::target::rpm::RpmDb::hasPackage ( const std::string &  name_r) const

Return true if package is installed.

bool zypp::target::rpm::RpmDb::hasPackage ( const std::string &  name_r,
const Edition ed_r 
) const

Return true if package is installed in a certain edition.

void zypp::target::rpm::RpmDb::getData ( const std::string &  name_r,
RpmHeader::constPtr result_r 
) const

Get an installed packages data from rpmdb.

Package is identified by name. Data returned via result are NULL, if packge is not installed (PMError is not set), or RPM database could not be read (PMError is set).

Exceptions:
RpmExceptionFIXME this and following comment
void zypp::target::rpm::RpmDb::getData ( const std::string &  name_r,
const Edition ed_r,
RpmHeader::constPtr result_r 
) const

Get an installed packages data from rpmdb.

Package is identified by name and edition. Data returned via result are NULL, if packge is not installed (PMError is not set), or RPM database could not be read (PMError is set).

Exceptions:
RpmException
void zypp::target::rpm::RpmDb::syncTrustedKeys ( SyncTrustedKeyBits  mode_r = SYNC_BOTH)

Sync trusted keys stored in rpm database and zypp trusted keyring.

Definition at line 941 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::importZyppKeyRingTrustedKeys ( )

iterates through zypp keyring and import all non existant keys into rpm keyring

Definition at line 1000 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::exportTrustedKeysInZyppKeyRing ( )

insert all rpm trusted keys into zypp trusted keyring

Definition at line 1003 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::run_rpm ( const RpmArgVec options,
ExternalProgram::Stderr_Disposition  stderr_disp = ExternalProgram::Stderr_To_Stdout 
)
private

Run rpm with the specified arguments and handle stderr.

Parameters:
n_optsThe number of arguments
optionsArray of the arguments, n_opts elements
stderr_dispHow to handle stderr, merged with stdout by default
Exceptions:
RpmException

Definition at line 1545 of file RpmDb.cc.

bool zypp::target::rpm::RpmDb::systemReadLine ( std::string &  line)
private

Read a line from the general rpm query.

Definition at line 1588 of file RpmDb.cc.

int zypp::target::rpm::RpmDb::systemStatus ( )
private

Return the exit status of the general rpm process, closing the connection if not already done.

Definition at line 1662 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::systemKill ( )
private

Forcably kill the system process.

Definition at line 1685 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::processConfigFiles ( const std::string &  line,
const std::string &  name,
const char *  typemsg,
const char *  difffailmsg,
const char *  diffgenmsg 
)
private

handle rpm messages like "/etc/testrc saved as /etc/testrc.rpmorig"

Parameters:
linerpm output starting with warning:
namename of package, appears in subject line
typemsg" saved as " or " created as "
difffailmsgwhat to put into mail if diff failed, must contain two s for the two files
diffgenmsgwhat to put into mail if diff succeeded, must contain two s for the two files

Definition at line 1692 of file RpmDb.cc.

RpmDb::checkPackageResult zypp::target::rpm::RpmDb::checkPackage ( const Pathname &  path_r)

Check signature of rpm file on disk.

Parameters:
filenamewhich file to check
Returns:
checkPackageResult

Definition at line 1425 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::installPackage ( const Pathname &  filename,
RpmInstFlags  flags = RPMINST_NONE 
)

install rpm package

Parameters:
filenamefile to install
flagswhich rpm options to use
Returns:
success
Exceptions:
RpmException

Definition at line 1789 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::removePackage ( const std::string &  name_r,
RpmInstFlags  flags = RPMINST_NONE 
)

remove rpm package

Parameters:
name_rName of the rpm package to remove.
iflagswhich rpm options to use
Returns:
success
Exceptions:
RpmException
void zypp::target::rpm::RpmDb::removePackage ( Package::constPtr  package,
RpmInstFlags  flags = RPMINST_NONE 
)

Definition at line 1960 of file RpmDb.cc.

Pathname zypp::target::rpm::RpmDb::getBackupPath ( void  )
inline

get backup dir for rpm config files

Definition at line 477 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::backupPackage ( const std::string &  packageName)

create tar.gz of all changed files in a Package

Parameters:
packageNamename of the Package to backup
See also:
setBackupPath
bool zypp::target::rpm::RpmDb::backupPackage ( const Pathname &  filename)

queries file for name and then calls above backupPackage function.

For convenience.

Parameters:
filenamerpm file that is about to be installed

Definition at line 2107 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::setBackupPath ( const Pathname &  path)

set path where package backups are stored

See also:
backupPackage

Definition at line 2249 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::createPackageBackups ( bool  yes)
inline

whether to create package backups during install or removal

Parameters:
yestrue or false

Definition at line 512 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::queryChangedFiles ( FileList fileList,
const std::string &  packageName 
)

determine which files of an installed package have been modified.

Parameters:
fileList(output) where to store modified files
packageNamename of package to query
Returns:
false if package couln't be queried for some reason

Definition at line 1479 of file RpmDb.cc.

ostream & zypp::target::rpm::RpmDb::dumpOn ( std::ostream &  str) const
virtual

Dump debug info.

Reimplemented from zypp::base::ReferenceCounted.

Definition at line 276 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::doRemovePackage ( const std::string &  name_r,
RpmInstFlags  flags,
callback::SendReport< RpmRemoveReport > &  report 
)
protected

Definition at line 2006 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::doInstallPackage ( const Pathname &  filename,
RpmInstFlags  flags,
callback::SendReport< RpmInstallReport > &  report 
)
protected

Definition at line 1819 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::doRebuildDatabase ( callback::SendReport< RebuildDBReport > &  report)
protected

Definition at line 770 of file RpmDb.cc.


Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  str,
const DbStateInfoBits obj 
)
friend

Member Data Documentation

DbStateInfoBits zypp::target::rpm::RpmDb::_dbStateInfo
private

Internal state info.

Definition at line 91 of file RpmDb.h.

Pathname zypp::target::rpm::RpmDb::_root
private

Root directory for all operations.

Definition at line 96 of file RpmDb.h.

Pathname zypp::target::rpm::RpmDb::_dbPath
private

Directory that contains the rpmdb.

Definition at line 101 of file RpmDb.h.

ExternalProgram* zypp::target::rpm::RpmDb::process
private

The connection to the rpm process.

Definition at line 351 of file RpmDb.h.

int zypp::target::rpm::RpmDb::exit_code
private

The exit code of the rpm process, or -1 if not yet known.

Definition at line 388 of file RpmDb.h.

std::string zypp::target::rpm::RpmDb::error_message
private

Error message from running rpm as external program.

Use only if something fail.

Definition at line 394 of file RpmDb.h.

Pathname zypp::target::rpm::RpmDb::_backuppath
private

/var/adm/backup

Definition at line 397 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::_packagebackups
private

create package backups?

Definition at line 400 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::_warndirexists
private

whether <_root>/<WARNINGMAILPATH> was already created

Definition at line 403 of file RpmDb.h.


The documentation for this class was generated from the following files: