libzypp  10.5.0
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  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 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.

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)

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)

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 341 of file RpmDb.h.

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

Definition at line 411 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.

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 417 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 218 of file RpmDb.cc.

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

Destructor.

Definition at line 240 of file RpmDb.cc.


Member Function Documentation

void zypp::target::rpm::RpmDb::dbsi_set ( DbStateInfoBits val_r,
const unsigned &  bits_r 
) const [inline, private]

Definition at line 75 of file RpmDb.h.

void zypp::target::rpm::RpmDb::dbsi_clr ( DbStateInfoBits val_r,
const unsigned &  bits_r 
) const [inline, private]

Definition at line 79 of file RpmDb.h.

bool zypp::target::rpm::RpmDb::dbsi_has ( const DbStateInfoBits val_r,
const unsigned &  bits_r 
) const [inline, private]

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 423 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::removeV4 ( const Pathname &  dbdir_r,
bool  v3backup_r 
) [static, private]

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

Definition at line 548 of file RpmDb.cc.

void zypp::target::rpm::RpmDb::removeV3 ( const Pathname &  dbdir_r,
bool  v3backup_r 
) [static, private]

Remove the rpm3 database in dbdir_r.

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

Definition at line 614 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 680 of file RpmDb.cc.

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

timestamp of the rpm database (last modification)

Definition at line 249 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 303 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 703 of file RpmDb.cc.

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

Rebuild the rpm database (rpm --rebuilddb).

Exceptions:
RpmException

Definition at line 750 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 918 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 996 of file RpmDb.cc.

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

Return the long ids of all installed public keys.

Definition at line 1071 of file RpmDb.cc.

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

Return the edition of all installed public keys.

Definition at line 1109 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 1133 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 1162 of file RpmDb.cc.

std::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.

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 1206 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 1220 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 1234 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::importZyppKeyRingTrustedKeys ( )

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

Definition at line 831 of file RpmDb.cc.

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

insert all rpm trusted keys into zypp trusted keyring

Definition at line 868 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 1429 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 1472 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 1546 of file RpmDb.cc.

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

Forcably kill the system process.

Definition at line 1569 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 1576 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 1309 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 1673 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 1848 of file RpmDb.cc.

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

get backup dir for rpm config files

Definition at line 465 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 1995 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 2137 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 500 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 1363 of file RpmDb.cc.

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

Dump debug info.

Reimplemented from zypp::base::ReferenceCounted.

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

Definition at line 1894 of file RpmDb.cc.

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

Definition at line 1703 of file RpmDb.cc.

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

Definition at line 768 of file RpmDb.cc.


Friends And Related Function Documentation

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

Member Data Documentation

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.

Directory that contains the rpmdb.

Definition at line 101 of file RpmDb.h.

The connection to the rpm process.

Definition at line 339 of file RpmDb.h.

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

Definition at line 376 of file RpmDb.h.

Error message from running rpm as external program.

Use only if something fail.

Definition at line 382 of file RpmDb.h.

/var/adm/backup

Definition at line 385 of file RpmDb.h.

create package backups?

Definition at line 388 of file RpmDb.h.

whether <_root>/<WARNINGMAILPATH> was already created

Definition at line 391 of file RpmDb.h.


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