revert pyhton3 part that was commit by mistake in #ab8b3ded
[platform/upstream/libsolv.git] / doc / libsolv-bindings.txt
index 8d273ff..eed9698 100644 (file)
@@ -36,7 +36,7 @@ accessed by treating the object as standard hash reference:
        $pool->{appdata} = 42;
        printf "appdata is %d\n", $pool->{appdata};
 
-An special exception to this are iterator objects, they are encapsulated as
+A special exception to this are iterator objects, they are encapsulated as
 tied arrays so that it is possible to iterate with a for() statement:
 
        my $iter = $pool->solvables_iter();
@@ -49,8 +49,8 @@ if a method returns an array it returns it on the stack:
 
        my @problems = $solver->solve(\@jobs);
 
-Due to a bug in swig, stringification does not work for libsolv's object.
-Instead you have to call the object's str() method.
+Due to a bug in swig, stringification does not work for libsolv's objects.
+Instead, you have to call the object's str() method.
 
        print $dep->str() . "\n";
 
@@ -82,7 +82,7 @@ Iterators also work as expected:
 
        for solvable in pool.solvables_iter():
 
-Arrays are passed an returned as list objects:
+Arrays are passed and returned as list objects:
 
        jobs = []
        problems = solver.solve(jobs)
@@ -120,7 +120,7 @@ Iterators also work as expected:
 
        for solvable in pool.solvables_iter() do ...
 
-Arrays are passed an returned as array objects:
+Arrays are passed and returned as array objects:
 
        jobs = []
        problems = solver.solve(jobs)
@@ -151,42 +151,42 @@ type but it contains some useful constants.
 Relational flag constants, the first three can be or-ed together
 
 *REL_LT*::
-  the ``less than'' bit
+the ``less than'' bit
 
 *REL_EQ*::
-  the ``equals to'' bit
+the ``equals to'' bit
 
 *REL_GT*::
-  the ``greater then'' bit
+the ``greater then'' bit
 
 *REL_ARCH*::
-  used for relations that describe an extra architecture filter, the
-  version part of the relation is interpreted as architecture.
+used for relations that describe an extra architecture filter, the
+version part of the relation is interpreted as architecture.
 
 Special Solvable Ids
 
 *SOLVID_META*::
-  Access the meta section of a repository or repodata area. This is
-  like an extra Solvable that has the Id SOLVID_META.
+Access the meta section of a repository or repodata area. This is
+like an extra Solvable that has the Id SOLVID_META.
 
 *SOLVID_POS*::
-  Use the data position stored inside of the pool instead of accessing
-  some solvable by Id. The bindings have the Datapos objects as an
-  abstraction mechanism, so you do not need this constant.
+Use the data position stored inside of the pool instead of accessing
+some solvable by Id. The bindings have the Datapos objects as an
+abstraction mechanism, so you do not need this constant.
 
 Constant string Ids
   
 *ID_NULL*::
-  Always zero
+Always zero
 
 *ID_EMPTY*::
-  Always one, describes the empty string
+Always one, describes the empty string
 
 *SOLVABLE_NAME*::
-  The keyname Id of the name of the solvable.
+The keyname Id of the name of the solvable.
 
 *...*::
-  see the libsolv-constantids manpage for a list of fixed Ids.
+see the libsolv-constantids manpage for a list of fixed Ids.
 
 
 The Pool Class
@@ -245,65 +245,64 @@ Return the last error string that was stored in the pool.
 === CONSTANTS ===
 
 *POOL_FLAG_PROMOTEEPOCH*::
-  Promote the epoch of the providing dependency to the requesting
-  dependency if it does not contain an epoch. Used at some time
-  in old rpm versions, modern systems should never need this.
+Promote the epoch of the providing dependency to the requesting
+dependency if it does not contain an epoch. Used at some time
+in old rpm versions, modern systems should never need this.
 
 *POOL_FLAG_FORBIDSELFCONFLICTS*::
-  Disallow the installation of packages that conflict with themselves.
-  Debian always allows self-conflicting packages, rpm used to forbid
-  them but switched to also allowing them recently.
+Disallow the installation of packages that conflict with themselves.
+Debian always allows self-conflicting packages, rpm used to forbid
+them but switched to also allowing them recently.
 
 *POOL_FLAG_OBSOLETEUSESPROVIDES*::
-  Make obsolete type dependency match against provides instead of
-  just the name and version of packages. Very old versions of rpm
-  used the name/version, then it got switched to provides and later
-  switched back again to just name/version.
+Make obsolete type dependency match against provides instead of
+just the name and version of packages. Very old versions of rpm
+used the name/version, then it got switched to provides and later
+switched back again to just name/version.
 
 *POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES*::
-  An implicit obsoletes is the internal mechanism to remove the
-  old package on an update. The default is to remove all packages
-  with the same name, rpm-5 switched to also removing packages
-  providing the same name.
+An implicit obsoletes is the internal mechanism to remove the
+old package on an update. The default is to remove all packages
+with the same name, rpm-5 switched to also removing packages
+providing the same name.
 
 *POOL_FLAG_OBSOLETEUSESCOLORS*::
-  Rpm's multilib implementation (used in RedHat and Fedora)
-  distinguishes between 32bit and 64bit packages (the terminology
-  is that they have a different color). If obsoleteusescolors is
-  set, packages with different colors will not obsolete each other.
+Rpm's multilib implementation (used in RedHat and Fedora)
+distinguishes between 32bit and 64bit packages (the terminology
+is that they have a different color). If obsoleteusescolors is
+set, packages with different colors will not obsolete each other.
 
 *POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS*::
-  Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if
-  packages of the same name can be installed in parallel. For
-  current Fedora systems, POOL_FLAG_OBSOLETEUSESCOLORS should be
-  false and POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS should be true
-  (this is the default if FEDORA is defined when libsolv is
-  compiled).
+Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if
+packages of the same name can be installed in parallel. For
+current Fedora systems, POOL_FLAG_OBSOLETEUSESCOLORS should be
+false and POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS should be true
+(this is the default if FEDORA is defined when libsolv is compiled).
 
 *POOL_FLAG_NOINSTALLEDOBSOLETES*::
-  New versions of rpm consider the obsoletes of installed packages
-  when checking for dependency, thus you may not install a package
-  that is obsoleted by some other installed package, unless you
-  also erase the other package.
+New versions of rpm consider the obsoletes of installed packages
+when checking for dependency, thus you may not install a package
+that is obsoleted by some other installed package, unless you
+also erase the other package.
 
 *POOL_FLAG_HAVEDISTEPOCH*::
-  Mandriva added a new field called distepoch that gets checked in
-  version comparison if the epoch/version/release of two packages
-  are the same.
+Mandriva added a new field called distepoch that gets checked in
+version comparison if the epoch/version/release of two packages
+are the same.
 
 *POOL_FLAG_NOOBSOLETESMULTIVERSION*::
-  If a package is installed in multiversionmode, rpm used to ignore
-  both the implicit obsoletes and the obsolete dependency of a
-  package. This was changed to ignoring just the implicit obsoletes,
-  thus you may install multiple versions of the same name, but
-  obsoleted packages still get removed.
+If a package is installed in multiversionmode, rpm used to ignore
+both the implicit obsoletes and the obsolete dependency of a
+package. This was changed to ignoring just the implicit obsoletes,
+thus you may install multiple versions of the same name, but
+obsoleted packages still get removed.
 
 *POOL_FLAG_ADDFILEPROVIDESFILTERED*::
-  Make the addfileprovides method only add files from the standard
-  locations (i.e. the ``bin'' and ``etc'' directories). This is
-  useful if you have only few packages that use non-standard file
-  dependencies, but you still wand the fast speed that addfileprovides()
-  generates.
+Make the addfileprovides method only add files from the standard
+locations (i.e. the ``bin'' and ``etc'' directories). This is
+useful if you have only few packages that use non-standard file
+dependencies, but you still wand the fast speed that addfileprovides()
+generates.
 
 === METHODS ===
 
@@ -567,7 +566,7 @@ desired solvable by Id.
 Lookup functions. Return the data element stored in the specified solvable.
 You should probably use the methods of the Solvable class instead.
 
-       Dataiterator Dataiterator(Id solvid, Id keyname, const char *match, int flags)
+       Dataiterator Dataiterator(Id solvid, Id keyname, const char *match = 0, int flags = 0)
        my $di = $pool->Dataiterator($solvid, $keyname, $match, $flags);
        di = pool.Dataiterator(solvid, keyname, match, flags)
        di = pool.Dataiterator(solvid, keyname, match, flags)
@@ -802,44 +801,45 @@ timestamp.
 === CONSTANTS ===
 
 *REPO_REUSE_REPODATA*::
-  Reuse the last repository data area (``repodata'') instead of creating a new
-  one.
+Reuse the last repository data area (``repodata'') instead of creating a
+new one.
 
 *REPO_NO_INTERNALIZE*::
-  Do not internalize the added repository data. This is useful if
-  you plan to add more data because internalization is a costly
-  operation.
+Do not internalize the added repository data. This is useful if
+you plan to add more data because internalization is a costly
+operation.
 
 *REPO_LOCALPOOL*::
-  Use the repodata's pool for Id storage instead of the global pool. Useful
-  if you don't want to pollute the global pool with many unneeded ids, like
-  when storing the filelist.
+Use the repodata's pool for Id storage instead of the global pool. Useful
+if you don't want to pollute the global pool with many unneeded ids, like
+when storing the filelist.
 
 *REPO_USE_LOADING*::
-  Use the repodata that is currently being loaded instead of creating a new one.
-  This only makes sense if used in a load callback.
+Use the repodata that is currently being loaded instead of creating a new
+one. This only makes sense if used in a load callback.
 
 *REPO_EXTEND_SOLVABLES*::
-  Do not create new solvables for the new data, but match existing solvables and
-  add the data to them. Repository metadata is often split into multiple parts,
-  with one primary file describing all packages and other parts holding
-  information that is normally not needed, like the changelog.
+Do not create new solvables for the new data, but match existing solvables
+and add the data to them. Repository metadata is often split into multiple
+parts, with one primary file describing all packages and other parts
+holding information that is normally not needed, like the changelog.
 
 *REPO_USE_ROOTDIR*::
-  Prepend the pool's rootdir to the path when doing file operations.
+Prepend the pool's rootdir to the path when doing file operations.
 
 *REPO_NO_LOCATION*::
-  Do not add a location element to the solvables. Useful if the solvables are
-  not in the final position, so you can add the correct location later in your code.
+Do not add a location element to the solvables. Useful if the solvables
+are not in the final position, so you can add the correct location later
+in your code.
 
 *SOLV_ADD_NO_STUBS*::
-  Do not create stubs for repository parts that can be downloaded on demand.
+Do not create stubs for repository parts that can be downloaded on demand.
 
 *SUSETAGS_RECORD_SHARES*::
-  This is specific to the add_susetags() method. Susetags allows to refer to already
-  read packages to save disk space. If this data sharing needs to work over multiple
-  calls to add_susetags, you need to specify this flag so that the share information
-  is made available to subsequent calls.
+This is specific to the add_susetags() method. Susetags allows to refer to
+already read packages to save disk space. If this data sharing needs to
+work over multiple calls to add_susetags, you need to specify this flag so
+that the share information is made available to subsequent calls.
 
 === METHODS ===
 
@@ -935,7 +935,7 @@ areas.
 
 Create a Selection consisting of all packages in the repository.
 
-       Dataiterator Dataiterator(Id p, Id key, const char *match, int flags)
+       Dataiterator Dataiterator(Id p, Id key, const char *match = 0, int flags = 0)
        my $di = $repo->Dataiterator($solvid, $keyname, $match, $flags);
        di = repo.Dataiterator(solvid, keyname, match, flags)
        di = repo.Dataiterator(solvid, keyname, match, flags)
@@ -1277,6 +1277,18 @@ Return a tuple containing the on-media location and an optional
 media number for multi-part repositories (e.g. repositories
 spawning multiple DVDs).
 
+       Dataiterator Dataiterator(Id keyname, const char *match = 0, int flags = 0)
+       my $di = $solvable->Dataiterator($keyname, $match, $flags);
+       di = solvable.Dataiterator(keyname, match, flags)
+       di = solvable.Dataiterator(keyname, match, flags)
+
+       for my $d (@$di)
+       for d in di:
+       for d in di
+
+Iterate over the matching data elements. See the Dataiterator class for more
+information.
+
        void add_deparray(Id keyname, DepId dep, Id marker = -1);
        $solvable->add_deparray($keyname, $dep);
        solvable.add_deparray(keyname, dep)
@@ -1284,6 +1296,13 @@ spawning multiple DVDs).
 
 Add a new dependency to the attributes stored in keyname.
 
+       void unset(Id keyname);
+       $solvable->unset($keyname);
+       solvable.unset(keyname)
+       solvable.unset(keyname)
+
+Delete data stored for the specific keyname.
+
        bool installable();
        $solvable->installable()
        solvable.installable()
@@ -1299,6 +1318,22 @@ are not installable if the system does not support their architecture.
 
 Return true if the solvable is installed on the system.
 
+       bool identical(Solvable *other)
+       $solvable->identical($other)
+       $solvable.identical(other)
+       $solvable.identical?(other)
+
+Return true if the two solvables are identical.
+
+       int evrcmp(Solvable *other)
+       $solvable->evrcmp(other)
+       $solvable.evrcmp(other)
+       $solvable.evrcmp(other)
+
+Returns -1 if the epoch/version/release of the solvable is less then the
+one from the other solvable, 1 if it is greater, and 0 if they are equal.
+Note that "equal" does not mean that the evr is identical.
+
        Selection Selection(int setflags = 0)
        my $sel = $solvable->Selection();
        sel = solvable.Selection()
@@ -1341,39 +1376,35 @@ the repository or the specific package.
 === CONSTANTS ===
 
 *SEARCH_STRING*::
-  Return a match if the search string matches the value.
+Return a match if the search string matches the value.
 
 *SEARCH_STRINGSTART*::
-  Return a match if the value starts with the search string.
+Return a match if the value starts with the search string.
 
 *SEARCH_STRINGEND*::
-  Return a match if the value ends with the search string.
+Return a match if the value ends with the search string.
 
 *SEARCH_SUBSTRING*::
-  Return a match if the search string can be matched somewhere
-  in the value.
+Return a match if the search string can be matched somewhere in the value.
 
 *SEARCH_GLOB*::
-  Do a glob match of the search string against the value.
+Do a glob match of the search string against the value.
 
 *SEARCH_REGEX*::
-  Do a regular expression match of the search string against
-  the value.
+Do a regular expression match of the search string against the value.
 
 *SEARCH_NOCASE*::
-  Ignore case when matching strings. Works for all the above
-  match types.
+Ignore case when matching strings. Works for all the above match types.
 
 *SEARCH_FILES*::
-  Match the complete filenames of the file list, not just the
-  base name.
+Match the complete filenames of the file list, not just the base name.
 
 *SEARCH_COMPLETE_FILELIST*::
-  When matching the file list, check every file of the package
-  not just the subset from the primary metadata.
+When matching the file list, check every file of the package not just the
+subset from the primary metadata.
 
 *SEARCH_CHECKSUMS*::
-  Allow the matching of checksum entries.
+Allow the matching of checksum entries.
 
 === METHODS ===
 
@@ -1535,51 +1566,49 @@ is probably the select() method in the Pool class.
 === CONSTANTS ===
 
 *SELECTION_NAME*::
-  Create the selection by matching package names
+Create the selection by matching package names.
 
 *SELECTION_PROVIDES*::
-  Create the selection by matching package provides
+Create the selection by matching package provides.
 
 *SELECTION_FILELIST*::
-  Create the selection by matching package files
+Create the selection by matching package files.
 
 *SELECTION_CANON*::
-  Create the selection by matching the canonical representation
-  of the package. This is normally a combination of the name,
-  the version, and the architecture of a package.
+Create the selection by matching the canonical representation
+of the package. This is normally a combination of the name,
+the version, and the architecture of a package.
 
 *SELECTION_DOTARCH*::
-  Allow an ``.<architecture>'' suffix when matching names or
-  provides.
+Allow an ``.<architecture>'' suffix when matching names or
+provides.
  
 *SELECTION_REL*::
-  Allow the specification of a relation when matching names
-  or provides, e.g. "name >= 1.2".
+Allow the specification of a relation when matching names
+or provides, e.g. "name >= 1.2".
 
 *SELECTION_INSTALLED_ONLY*::
-  Limit the package search to installed packages.
+Limit the package search to installed packages.
 
 *SELECTION_SOURCE_ONLY*::
-  Limit the package search to source packages only.
+Limit the package search to source packages only.
 
 *SELECTION_WITH_SOURCE*::
-  Extend the package search to also match source packages. The
-  default is only to match binary packages.
+Extend the package search to also match source packages. The default is
+only to match binary packages.
 
 *SELECTION_GLOB*::
-  Allow glob matching for package names, package provides, and
-  file names.
+Allow glob matching for package names, package provides, and file names.
 
 *SELECTION_NOCASE*::
-  Ignore case when matching package names, package provides,
-  and file names.
+Ignore case when matching package names, package provides, and file names.
 
 *SELECTION_FLAT*::
-  Return only one selection element describing the selected packages.
-  The default is to create multiple elements for all globbed packages.
-  Multiple elements are useful if you want to turn the selection into
-  an install job, in that case you want an install job for every
-  globbed package.
+Return only one selection element describing the selected packages.
+The default is to create multiple elements for all globbed packages.
+Multiple elements are useful if you want to turn the selection into
+an install job, in that case you want an install job for every
+globbed package.
 
 === ATTRIBUTES ===
 
@@ -1673,139 +1702,142 @@ Pool class.
 Selection constants:
 
 *SOLVER_SOLVABLE*::
-  The ``what'' part is the id of a solvable.
+The ``what'' part is the id of a solvable.
 
 *SOLVER_SOLVABLE_NAME*::
-  The ``what'' part is the id of a package name.
+The ``what'' part is the id of a package name.
 
 *SOLVER_SOLVABLE_PROVIDES*::
-  The ``what'' part is the id of a package provides.
+The ``what'' part is the id of a package provides.
 
 *SOLVER_SOLVABLE_ONE_OF*::
-  The ``what'' part is an offset into the ``whatprovides'' data, created
-  by calling the towhatprovides() pool method.
+The ``what'' part is an offset into the ``whatprovides'' data, created
+by calling the towhatprovides() pool method.
 
 *SOLVER_SOLVABLE_REPO*::
-  The ``what'' part is the id of a repository.
+The ``what'' part is the id of a repository.
 
 *SOLVER_SOLVABLE_ALL*::
-  The ``what'' part is ignored, all packages are selected.
+The ``what'' part is ignored, all packages are selected.
 
 *SOLVER_SOLVABLE_SELECTMASK*::
-  A mask containing all the above selection bits.
+A mask containing all the above selection bits.
 
 Action constants:
 
 *SOLVER_NOOP*::
-  Do nothing.
+Do nothing.
 
 *SOLVER_INSTALL*::
-  Install a package of the specified set of packages. It tries to install
-  the best matching package (i.e. the highest version of the packages from
-  the repositories with the highest priority).
+Install a package of the specified set of packages. It tries to install
+the best matching package (i.e. the highest version of the packages from
+the repositories with the highest priority).
 
 *SOLVER_ERASE*::
-  Erase all of the packages from the specified set. If a package is not
-  installed, erasing it will keep it from getting installed.
+Erase all of the packages from the specified set. If a package is not
+installed, erasing it will keep it from getting installed.
 
 *SOLVER_UPDATE*::
-  Update the matching installed packages to their best version. If none
-  of the specified packages are installed, try to update the installed
-  packages to the specified versions. See the section about targeted
-  updates about more information.
-  
+Update the matching installed packages to their best version. If none
+of the specified packages are installed, try to update the installed
+packages to the specified versions. See the section about targeted
+updates about more information.
 *SOLVER_WEAKENDEPS*::
-  Allow to break the dependencies of the matching packages. Handle with care.
+Allow to break the dependencies of the matching packages. Handle with care.
 
 *SOLVER_MULTIVERSION*::
-  Mark the matched packages for multiversion install. If they get to be installed
-  because of some other job, the installation will keep the old version of the
-  package installed (for rpm by using ``-i'' instead of ``-U'').
+Mark the matched packages for multiversion install. If they get to be
+installed because of some other job, the installation will keep the old
+version of the package installed (for rpm this is done by using ``-i''
+instead of ``-U'').
 
 *SOLVER_LOCK*::
-  Do not change the state of the matched packages, i.e. when they are installed
-  they stay installed, if not they are not selected for installation.
+Do not change the state of the matched packages, i.e. when they are
+installed they stay installed, if not they are not selected for
+installation.
 
 *SOLVER_DISTUPGRADE*::
-  Update the matching installed packages to the best version included in one
-  of the repositories. After this operation, all come from one of the available
-  repositories except orphaned packages. Orphaned packages are packages that
-  have no relation to the packages in the repositories, i.e. no package in the
-  repositories have the same name or obsolete the orphaned package.
-  This action brings the installed packages in sync with the ones in the
-  repository. It also turns of arch/vendor/version locking for the affected
-  packages to simulate a fresh installation. This means that distupgrade can
-  actually downgrade packages if only lower versions of a package are available
-  in the repositories.
+Update the matching installed packages to the best version included in one
+of the repositories. After this operation, all come from one of the available
+repositories except orphaned packages. Orphaned packages are packages that
+have no relation to the packages in the repositories, i.e. no package in the
+repositories have the same name or obsolete the orphaned package.
+This action brings the installed packages in sync with the ones in the
+repository. It also turns of arch/vendor/version locking for the affected
+packages to simulate a fresh installation. This means that distupgrade can
+actually downgrade packages if only lower versions of a package are available
+in the repositories.
 
 *SOLVER_DROP_ORPHANED*::
-  Erase all the matching installed packages if they are orphaned. This only makes
-  sense if there is a ``distupgrade all packages'' job. The default is to erase
-  orphaned packages only if they block the installation of other packages.
+Erase all the matching installed packages if they are orphaned. This only makes
+sense if there is a ``distupgrade all packages'' job. The default is to erase
+orphaned packages only if they block the installation of other packages.
 
 *SOLVER_VERIFY*::
-  Fix dependency problems of matching installed packages. The default is to ignore
-  dependency problems for installed packages.
+Fix dependency problems of matching installed packages. The default is to ignore
+dependency problems for installed packages.
 
 *SOLVER_USERINSTALLED*::
-  The matching installed packages are considered to be installed by a user, thus
-  not installed to fulfill some dependency. This is needed input for the calculation
-  of unneeded packages for jobs that have the SOLVER_CLEANDEPS flag set.
+The matching installed packages are considered to be installed by a user,
+thus not installed to fulfill some dependency. This is needed input for
+the calculation of unneeded packages for jobs that have the
+SOLVER_CLEANDEPS flag set.
 
 *SOLVER_JOBMASK*::
-  A mask containing all the above action bits.
+A mask containing all the above action bits.
 
 Action modifier constants:
 
 *SOLVER_WEAK*::
-  Makes the job a weak job. The solver tries to fulfill weak jobs, but does not
-  report a problem if it is not possible to do so.
+Makes the job a weak job. The solver tries to fulfill weak jobs, but does
+not report a problem if it is not possible to do so.
 
 *SOLVER_ESSENTIAL*::
-  Makes the job an essential job. If there is a problem with the job, the solver
-  will not propose to remove the job as one solution (unless all other solutions
-  are also to remove essential jobs).
+Makes the job an essential job. If there is a problem with the job, the
+solver will not propose to remove the job as one solution (unless all
+other solutions are also to remove essential jobs).
 
 *SOLVER_CLEANDEPS*::
-  The solver will try to also erase all packages dragged in through dependencies
-  when erasing the package. This needs SOLVER_USERINSTALLED jobs to maximize user
-  satisfaction.
+The solver will try to also erase all packages dragged in through
+dependencies when erasing the package. This needs SOLVER_USERINSTALLED
+jobs to maximize user satisfaction.
 
 *SOLVER_FORCEBEST*::
-  Insist on the best package for install, update, and distupgrade jobs. If this
-  flag is not used, the solver will use the second-best package if the best
-  package cannot be installed for some reason. When this flag is used, the solver
-  will generate a problem instead.
+Insist on the best package for install, update, and distupgrade jobs. If
+this flag is not used, the solver will use the second-best package if the
+best package cannot be installed for some reason. When this flag is used,
+the solver will generate a problem instead.
 
 *SOLVER_TARGETED*::
-  Forces targeted operation update and distupgrade jobs. See the section about
-  targeted updates about more information.
+Forces targeted operation update and distupgrade jobs. See the section
+about targeted updates about more information.
 
 Set constants.
 
 *SOLVER_SETEV*::
-  The job specified the exact epoch and version of the package set.
+The job specified the exact epoch and version of the package set.
 
 *SOLVER_SETEVR*::
-  The job specified the exact epoch, version, and release of the package set.
+The job specified the exact epoch, version, and release of the package set.
 
 *SOLVER_SETARCH*::
-  The job specified the exact architecture of the packages from the set.
+The job specified the exact architecture of the packages from the set.
 
 *SOLVER_SETVENDOR*::
-  The job specified the exact vendor of the packages from the set.
+The job specified the exact vendor of the packages from the set.
 
 *SOLVER_SETREPO*::
-  The job specified the exact repository of the packages from the set.
+The job specified the exact repository of the packages from the set.
 
 *SOLVER_SETNAME*::
-  The job specified the exact name of the packages from the set.
+The job specified the exact name of the packages from the set.
 
 *SOLVER_NOAUTOSET*::
-  Turn of automatic set flag generation for SOLVER_SOLVABLE jobs.
+Turn of automatic set flag generation for SOLVER_SOLVABLE jobs.
 
 *SOLVER_SETMASK*::
-  A mask containing all the above set bits.
+A mask containing all the above set bits.
 
 See the section about set bits for more information.
 
@@ -1936,236 +1968,279 @@ re-use the dependency rules it already computed.
 Flags to modify some of the solver's behavior:
 
 *SOLVER_FLAG_ALLOW_DOWNGRADE*::
-  Allow the solver to downgrade packages without asking for confirmation
-  (i.e. reporting a problem).
+Allow the solver to downgrade packages without asking for confirmation
+(i.e. reporting a problem).
 
 *SOLVER_FLAG_ALLOW_ARCHCHANGE*::
-  Allow the solver to change the architecture of an installed package
-  without asking for confirmation. Note that changes to/from noarch
-  are always considered to be allowed.
+Allow the solver to change the architecture of an installed package
+without asking for confirmation. Note that changes to/from noarch
+are always considered to be allowed.
   
 *SOLVER_FLAG_ALLOW_VENDORCHANGE*::
-  Allow the solver to change the vendor of an installed package
-  without asking for confirmation. Each vendor is part of one or more
-  vendor equivalence classes, normally installed packages may only
-  change their vendor if the new vendor shares at least one equivalence
-  class.
+Allow the solver to change the vendor of an installed package
+without asking for confirmation. Each vendor is part of one or more
+vendor equivalence classes, normally installed packages may only
+change their vendor if the new vendor shares at least one equivalence
+class.
 
 *SOLVER_FLAG_ALLOW_NAMECHANGE*::
-  Allow the solver to change the name of an installed package, i.e.
-  install a package with a different name that obsoletes the installed
-  package. This option is on by default.
+Allow the solver to change the name of an installed package, i.e.
+install a package with a different name that obsoletes the installed
+package. This option is on by default.
 
 *SOLVER_FLAG_ALLOW_UNINSTALL*::
-  Allow the solver to erase installed packages to fulfill the jobs.
-  This flag also includes the above flags. You may want to set this
-  flag if you only have SOLVER_ERASE jobs, as in that case it's
-  better for the user to check the transaction overview instead of
-  approving every single package that needs to be erased.
+Allow the solver to erase installed packages to fulfill the jobs.
+This flag also includes the above flags. You may want to set this
+flag if you only have SOLVER_ERASE jobs, as in that case it's
+better for the user to check the transaction overview instead of
+approving every single package that needs to be erased.
 
 *SOLVER_FLAG_NO_UPDATEPROVIDE*::
-  If multiple packages obsolete an installed package, the solver checks
-  the provides of every such package and ignores all packages that
-  do not provide the installed package name. Thus, you can have an
-  official update candidate that provides the old name, and other
-  packages that also obsolete the package but are not considered for
-  updating. If you cannot use this feature, you can turn it off
-  by setting this flag.
+If multiple packages obsolete an installed package, the solver checks
+the provides of every such package and ignores all packages that
+do not provide the installed package name. Thus, you can have an
+official update candidate that provides the old name, and other
+packages that also obsolete the package but are not considered for
+updating. If you cannot use this feature, you can turn it off
+by setting this flag.
 
 *SOLVER_FLAG_SPLITPROVIDES*::
-  Make the solver aware of special provides of the form
-  ``<packagename>:<path>'' used in SUSE systems to support package
-  splits.
+Make the solver aware of special provides of the form
+``<packagename>:<path>'' used in SUSE systems to support package
+splits.
 
 *SOLVER_FLAG_IGNORE_RECOMMENDED*::
-  Do not process optional (aka weak) dependencies.
+Do not process optional (aka weak) dependencies.
 
 *SOLVER_FLAG_ADD_ALREADY_RECOMMENDED*::
-  Install recommended or supplemented packages even if they have no
-  connection to the current transaction. You can use this feature
-  to implement a simple way for the user to install new recommended
-  packages that were not available in the past.
+Install recommended or supplemented packages even if they have no
+connection to the current transaction. You can use this feature
+to implement a simple way for the user to install new recommended
+packages that were not available in the past.
   
 *SOLVER_FLAG_NO_INFARCHCHECK*::
-  Turn off the inferior architecture checking that is normally done
-  by the solver. Normally, the solver allows only the installation
-  of packages from the "best" architecture if a package is available
-  for multiple architectures.
+Turn off the inferior architecture checking that is normally done
+by the solver. Normally, the solver allows only the installation
+of packages from the "best" architecture if a package is available
+for multiple architectures.
 
 *SOLVER_FLAG_BEST_OBEY_POLICY*::
-  Make the SOLVER_FORCEBEST job option consider only packages that
-  meet the policies for installed packages, i.e. no downgrades,
-  no architecture change, no vendor change (see the first flags
-  of this section). If the flag is not specified, the solver will
-  enforce the installation of the best package ignoring the
-  installed packages, which may conflict with the set policy.
+Make the SOLVER_FORCEBEST job option consider only packages that
+meet the policies for installed packages, i.e. no downgrades,
+no architecture change, no vendor change (see the first flags
+of this section). If the flag is not specified, the solver will
+enforce the installation of the best package ignoring the
+installed packages, which may conflict with the set policy.
 
 *SOLVER_FLAG_NO_AUTOTARGET*::
-  Do not enable auto-targeting up update and distupgrade jobs. See
-  the section on targeted updates for more information.
+Do not enable auto-targeting up update and distupgrade jobs. See
+the section on targeted updates for more information.
 
 Basic rule types:
 
 *SOLVER_RULE_UNKNOWN*::
-  A rule of an unknown class. You should never encounter those.
+A rule of an unknown class. You should never encounter those.
 
 *SOLVER_RULE_RPM*::
-  A package dependency rule, called rpm rule for historical reasons.
+A package dependency rule, called rpm rule for historical reasons.
 
 *SOLVER_RULE_UPDATE*::
-  A rule to implement the update policy of installed packages. Every
-  installed package has an update rule that consists of the packages
-  that may replace the installed package.
+A rule to implement the update policy of installed packages. Every
+installed package has an update rule that consists of the packages
+that may replace the installed package.
 
 *SOLVER_RULE_FEATURE*::
-  Feature rules are fallback rules used when a update rule is disabled.
-  They include all packages that may replace the installed package
-  ignoring the update policy, i.e. they contain downgrades, arch
-  changes and so on. Without them, the solver would simply erase
-  installed packages if their update rule gets disabled.
+Feature rules are fallback rules used when a update rule is disabled. They
+include all packages that may replace the installed package ignoring the
+update policy, i.e. they contain downgrades, arch changes and so on.
+Without them, the solver would simply erase installed packages if their
+update rule gets disabled.
 
 *SOLVER_RULE_JOB*::
-  Job rules implement the job given to the solver.
+Job rules implement the job given to the solver.
 
 *SOLVER_RULE_DISTUPGRADE*::
-  This are simple negative assertions that make sure that only packages
-  are kept that are also available in one of the repositories.
+This are simple negative assertions that make sure that only packages
+are kept that are also available in one of the repositories.
 
 *SOLVER_RULE_INFARCH*::
-  Infarch rules are also negative assertions, they disallow the installation
-  of packages when there are packages of the same name but with a better
-  architecture.
+Infarch rules are also negative assertions, they disallow the installation
+of packages when there are packages of the same name but with a better
+architecture.
 
 *SOLVER_RULE_CHOICE*::
-  Choice rules are used to make sure that the solver prefers updating to
-  installing different packages when some dependency is provided by
-  multiple packages with different names. The solver may always break
-  choice rules, so you will not see them when a problem is found.
+Choice rules are used to make sure that the solver prefers updating to
+installing different packages when some dependency is provided by
+multiple packages with different names. The solver may always break
+choice rules, so you will not see them when a problem is found.
 
 *SOLVER_RULE_LEARNT*::
-  These rules are generated by the solver to keep it from running into
-  the same problem multiple times when it has to backtrack. They are
-  the main reason why a sat solver is faster then other dependency solver
-  implementations.
+These rules are generated by the solver to keep it from running into
+the same problem multiple times when it has to backtrack. They are
+the main reason why a sat solver is faster then other dependency solver
+implementations.
 
 Special dependency rule types:
 
 *SOLVER_RULE_RPM_NOT_INSTALLABLE*::
-  This rule was added to prevent the installation of a package of an
-  architecture that does not work on the system.
+This rule was added to prevent the installation of a package of an
+architecture that does not work on the system.
 
 *SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP*::
-  The package contains a required dependency which was not provided by
-  any package.
+The package contains a required dependency which was not provided by
+any package.
 
 *SOLVER_RULE_RPM_PACKAGE_REQUIRES*::
-  Similar to SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP, but in this case
-  some packages provided the dependency but none of them could be
-  installed due to other dependency issues.
+Similar to SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP, but in this case
+some packages provided the dependency but none of them could be
+installed due to other dependency issues.
 
 *SOLVER_RULE_RPM_SELF_CONFLICT*::
-  The package conflicts with itself. This is not allowed by older rpm
-  versions.
+The package conflicts with itself. This is not allowed by older rpm
+versions.
 
 *SOLVER_RULE_RPM_PACKAGE_CONFLICT*::
-  To fulfill the dependencies two packages need to be installed, but
-  one of the packages contains a conflict with the other one.
+To fulfill the dependencies two packages need to be installed, but
+one of the packages contains a conflict with the other one.
 
 *SOLVER_RULE_RPM_SAME_NAME*::
-  The dependencies can only be fulfilled by multiple versions of
-  a package, but installing multiple versions of the same package
-  is not allowed.
+The dependencies can only be fulfilled by multiple versions of
+a package, but installing multiple versions of the same package
+is not allowed.
 
 *SOLVER_RULE_RPM_PACKAGE_OBSOLETES*::
-  To fulfill the dependencies two packages need to be installed, but
-  one of the packages obsoletes the other one.
+To fulfill the dependencies two packages need to be installed, but
+one of the packages obsoletes the other one.
 
 *SOLVER_RULE_RPM_IMPLICIT_OBSOLETES*::
-  To fulfill the dependencies two packages need to be installed, but
-  one of the packages has provides a dependency that is obsoleted
-  by the other one. See the POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES
-  flag.
+To fulfill the dependencies two packages need to be installed, but
+one of the packages has provides a dependency that is obsoleted
+by the other one. See the POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES
+flag.
 
 *SOLVER_RULE_RPM_INSTALLEDPKG_OBSOLETES*::
-  To fulfill the dependencies a package needs to be installed that is
-  obsoleted by an installed package. See the POOL_FLAG_NOINSTALLEDOBSOLETES
-  flag.
+To fulfill the dependencies a package needs to be installed that is
+obsoleted by an installed package. See the POOL_FLAG_NOINSTALLEDOBSOLETES
+flag.
 
 *SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP*::
-  The user asked for installation of a package providing a specific
-  dependency, but no available package provides it.
+The user asked for installation of a package providing a specific
+dependency, but no available package provides it.
 
 *SOLVER_RULE_JOB_UNKNOWN_PACKAGE*::
-  The user asked for installation of a package with a specific name,
-  but no available package has that name.
+The user asked for installation of a package with a specific name,
+but no available package has that name.
 
 *SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM*::
-  The user asked for the erasure of a dependency that is provided by the
-  system (i.e. for special hardware or language dependencies), this
-  cannot be done with a job.
+The user asked for the erasure of a dependency that is provided by the
+system (i.e. for special hardware or language dependencies), this
+cannot be done with a job.
 
 *SOLVER_RULE_JOB_UNSUPPORTED*::
-  The user asked for something that is not yet implemented, e.g. the
-  installation of all packages at once.
+The user asked for something that is not yet implemented, e.g. the
+installation of all packages at once.
 
 Policy error constants
 
 *POLICY_ILLEGAL_DOWNGRADE*::
-  The solver ask for permission before downgrading packages.
+The solver ask for permission before downgrading packages.
 
 *POLICY_ILLEGAL_ARCHCHANGE*::
-  The solver ask for permission before changing the architecture of installed
-  packages.
+The solver ask for permission before changing the architecture of installed
+packages.
 
 *POLICY_ILLEGAL_VENDORCHANGE*::
-  The solver ask for permission before changing the vendor of installed
-  packages.
+The solver ask for permission before changing the vendor of installed
+packages.
 
 *POLICY_ILLEGAL_NAMECHANGE*::
-  The solver ask for permission before replacing an installed packages with
-  a package that has a different name.
+The solver ask for permission before replacing an installed packages with
+a package that has a different name.
 
 Solution element type constants
 
 *SOLVER_SOLUTION_JOB*::
-  The problem can be solved by removing the specified job.
+The problem can be solved by removing the specified job.
 
 *SOLVER_SOLUTION_POOLJOB*::
-  The problem can be solved by removing the specified job that is defined in the pool.
+The problem can be solved by removing the specified job that is defined
+in the pool.
 
 *SOLVER_SOLUTION_INFARCH*::
-  The problem can be solved by allowing the installation of the specified package
-  with an inferior architecture.
+The problem can be solved by allowing the installation of the specified
+package with an inferior architecture.
 
 *SOLVER_SOLUTION_DISTUPGRADE*::
-  The problem can be solved by allowing to keep the specified package installed.
+The problem can be solved by allowing to keep the specified package
+installed.
 
 *SOLVER_SOLUTION_BEST*::
-  The problem can be solved by allowing to install the specified package that is
-  not the best available package.
+The problem can be solved by allowing to install the specified package
+that is not the best available package.
 
 *SOLVER_SOLUTION_ERASE*::
-  The problem can be solved by allowing to erase the specified package.
+The problem can be solved by allowing to erase the specified package.
 
 *SOLVER_SOLUTION_REPLACE*::
-  The problem can be solved by allowing to replace the package with some other
-  package.
+The problem can be solved by allowing to replace the package with some
+other package.
 
 *SOLVER_SOLUTION_REPLACE_DOWNGRADE*::
-  The problem can be solved by allowing to replace the package with some other
-  package that has a lower version.
+The problem can be solved by allowing to replace the package with some
+other package that has a lower version.
 
 *SOLVER_SOLUTION_REPLACE_ARCHCHANGE*::
-  The problem can be solved by allowing to replace the package with some other
-  package that has a different architecture.
+The problem can be solved by allowing to replace the package with some
+other package that has a different architecture.
 
 *SOLVER_SOLUTION_REPLACE_VENDORCHANGE*::
-  The problem can be solved by allowing to replace the package with some other
-  package that has a different vendor.
+The problem can be solved by allowing to replace the package with some
+other package that has a different vendor.
 
 *SOLVER_SOLUTION_REPLACE_NAMECHANGE*::
-  The problem can be solved by allowing to replace the package with some other
-  package that has a different name.
+The problem can be solved by allowing to replace the package with some
+other package that has a different name.
+
+
+Reason constants
+
+*SOLVER_REASON_UNRELATED*::
+The package status did not change as it was not related to any job.
+
+*SOLVER_REASON_UNIT_RULE*::
+The package was installed/erased/kept because of a unit rule, i.e. a rule
+where all literals but one were false.
+
+*SOLVER_REASON_KEEP_INSTALLED*::
+The package was chosen when trying to keep as many packages installed as
+possible.
+
+*SOLVER_REASON_RESOLVE_JOB*::
+The decision happened to fulfill a job rule.
+
+*SOLVER_REASON_UPDATE_INSTALLED*::
+The decision happened to fulfill a package update request.
+
+*SOLVER_REASON_CLEANDEPS_ERASE*::
+The package was erased when cleaning up dependencies from other erased
+packages.
+
+*SOLVER_REASON_RESOLVE*::
+The package was installed to fulfill package dependencies.
+
+*SOLVER_REASON_WEAKDEP*::
+The package was installed because of a weak dependency (Recommends or
+Supplements).
+
+*SOLVER_REASON_RESOLVE_ORPHAN*::
+The decision about the package was made when deciding the fate of orphaned
+packages.
+
+*SOLVER_REASON_RECOMMENDED*::
+This is a special case of SOLVER_REASON_WEAKDEP.
+
+*SOLVER_REASON_SUPPLEMENTED*::
+This is a special case of SOLVER_REASON_WEAKDEP.
 
 
 === ATTRIBUTES ===
@@ -2180,14 +2255,14 @@ Back pointer to pool.
 === METHODS ===
 
        int set_flag(int flag, int value)
-       my $oldvalue = $pool->set_flag($flag, $value);
-       oldvalue = pool.set_flag(flag, value)
-       oldvalue = pool.set_flag(flag, value)
+       my $oldvalue = $solver->set_flag($flag, $value);
+       oldvalue = solver.set_flag(flag, value)
+       oldvalue = solver.set_flag(flag, value)
 
        int get_flag(int flag)
-       my $value = $pool->get_flag($flag);
-       value = pool.get_flag(flag)
-       value = pool.get_flag(flag)
+       my $value = $solver->get_flag($flag);
+       value = solver.get_flag(flag)
+       value = solver.get_flag(flag)
 
 Set/get a solver specific flag. The flags define the policies the solver has
 to obey. The flags are explained in the CONSTANTS section of this class.
@@ -2211,6 +2286,14 @@ Return the transaction to implement the calculated package changes. A transactio
 is available even if problems were found, this is useful for interactive user
 interfaces that show both the job result and the problems.
 
+       int reason = describe_decision(Solvable *s, Rule *OUTPUT)
+       my ($reason, $rule) = $solver->describe_decision($solvable);
+       (reason, rule) = solver.describe_decision(solvable)
+       (reason, rule) = solver.describe_decision(solvable)
+
+Return the reason why a specific solvable was installed or erased. For most of
+the reasons the rule that triggered the decision is also returned.
+
 The Problem Class
 -----------------
 Problems are the way of the solver to interact with the user. You can simply list
@@ -2270,6 +2353,15 @@ the solution class for more information.
 
 Return the number of solutions without creating solution objects.
 
+       <stringification>
+       my $str = $problem->str;
+       str = str(problem)
+       str = problem.to_s
+
+Return a string describing the problem. This is a convenience function, it is
+a shorthand for calling findproblemrule(), then ruleinfo() on the problem
+rule and problemstr() on the ruleinfo object.
+
 The Rule Class
 --------------
 Rules are the basic block of sat solving. Each package dependency gets translated
@@ -2552,114 +2644,114 @@ way.
 Transaction element types, both active and passive
 
 *SOLVER_TRANSACTION_IGNORE*::
-  This element does nothing. Used to map element types that do not
-  match the view mode.
+This element does nothing. Used to map element types that do not match
+the view mode.
 
 *SOLVER_TRANSACTION_INSTALL*::
-  This element installs a package.
+This element installs a package.
 
 *SOLVER_TRANSACTION_ERASE*::
-  This element erases a package.
+This element erases a package.
 
 *SOLVER_TRANSACTION_MULTIINSTALL*::
-  This element installs a package with a different version keeping the
-  other versions installed.
+This element installs a package with a different version keeping the other
+versions installed.
 
 *SOLVER_TRANSACTION_MULTIREINSTALL*::
-  This element reinstalls a installed package keeping the other versions
-  installed.
+This element reinstalls a installed package keeping the other versions
+installed.
 
 Transaction element types, active view
 
 *SOLVER_TRANSACTION_REINSTALL*::
-  This element re-installs a package, i.e. installs the same package again.
+This element re-installs a package, i.e. installs the same package again.
 
 *SOLVER_TRANSACTION_CHANGE*::
-  This element installs a package with same name, version, architecture but
-  different content.
+This element installs a package with same name, version, architecture but
+different content.
 
 *SOLVER_TRANSACTION_UPGRADE*::
-  This element installs a newer version of an installed package.
+This element installs a newer version of an installed package.
 
 *SOLVER_TRANSACTION_DOWNGRADE*::
-  This element installs a older version of an installed package.
+This element installs a older version of an installed package.
 
 *SOLVER_TRANSACTION_OBSOLETES*::
-  This element installs a package that obsoletes an installed package.
+This element installs a package that obsoletes an installed package.
 
 Transaction element types, passive view
 
 *SOLVER_TRANSACTION_REINSTALLED*::
-  This element re-installs a package, i.e. installs the same package again.
+This element re-installs a package, i.e. installs the same package again.
 
 *SOLVER_TRANSACTION_CHANGED*::
-  This element replaces an installed package with one of the same name,
-  version, architecture but different content.
+This element replaces an installed package with one of the same name,
+version, architecture but different content.
 
 *SOLVER_TRANSACTION_UPGRADED*::
-  This element replaces an installed package with a new version.
+This element replaces an installed package with a new version.
 
 *SOLVER_TRANSACTION_DOWNGRADED*::
-  This element replaces an installed package with an old version.
+This element replaces an installed package with an old version.
 
 *SOLVER_TRANSACTION_OBSOLETED*::
-  This element replaces an installed package with a package that obsoletes
-  it.
+This element replaces an installed package with a package that obsoletes
+it.
 
 Pseudo element types for showing extra information used by classify()
 
 *SOLVER_TRANSACTION_ARCHCHANGE*::
-  This element replaces an installed package with a package of a different
-  architecture.
+This element replaces an installed package with a package of a different
+architecture.
 
 *SOLVER_TRANSACTION_VENDORCHANGE*::
-  This element replaces an installed package with a package of a different
-  vendor.
+This element replaces an installed package with a package of a different
+vendor.
 
 Transaction mode flags
 
 *SOLVER_TRANSACTION_SHOW_ACTIVE*::
-  Filter for active view types. The default is to return passive view type,
-  i.e. to show how the installed packages get changed.
+Filter for active view types. The default is to return passive view type,
+i.e. to show how the installed packages get changed.
 
 *SOLVER_TRANSACTION_SHOW_OBSOLETES*::
-  Do not map the obsolete view type into INSTALL/ERASE elements.
+Do not map the obsolete view type into INSTALL/ERASE elements.
 
 *SOLVER_TRANSACTION_SHOW_ALL*::
-  If multiple packages replace an installed package, only the best of them
-  is kept as OBSOLETE element, the other ones are mapped to INSTALL/ERASE
-  elements. This is because most applications want to show just one package
-  replacing the installed one. The SOLVER_TRANSACTION_SHOW_ALL makes the
-  library keep all OBSOLETE elements.
+If multiple packages replace an installed package, only the best of them
+is kept as OBSOLETE element, the other ones are mapped to INSTALL/ERASE
+elements. This is because most applications want to show just one package
+replacing the installed one. The SOLVER_TRANSACTION_SHOW_ALL makes the
+library keep all OBSOLETE elements.
 
 *SOLVER_TRANSACTION_SHOW_MULTIINSTALL*::
-  The library maps MULTIINSTALL elements to simple INSTALL elements. This
-  flag can be used to disable the mapping.
+The library maps MULTIINSTALL elements to simple INSTALL elements. This
+flag can be used to disable the mapping.
 
 *SOLVER_TRANSACTION_CHANGE_IS_REINSTALL*::
-  Use this flag if you want to map CHANGE elements to the REINSTALL type.
+Use this flag if you want to map CHANGE elements to the REINSTALL type.
 
 *SOLVER_TRANSACTION_OBSOLETE_IS_UPGRADE*::
-  Use this flag if you want to map OBSOLETE elements to the UPGRADE type.
+Use this flag if you want to map OBSOLETE elements to the UPGRADE type.
 
 *SOLVER_TRANSACTION_MERGE_ARCHCHANGES*::
-  Do not add extra categories for every architecture change, instead cumulate
-  them in one category.
+Do not add extra categories for every architecture change, instead cumulate
+them in one category.
   
 *SOLVER_TRANSACTION_MERGE_VENDORCHANGES*::
-  Do not add extra categories for every vendor change, instead cumulate
-  them in one category.
+Do not add extra categories for every vendor change, instead cumulate
+them in one category.
 
 *SOLVER_TRANSACTION_RPM_ONLY*::
-  Special view mode that just returns IGNORE, ERASE, INSTALL, MULTIINSTALL
-  elements. Useful if you want to find out what to feed to the underlying
-  package manager.
+Special view mode that just returns IGNORE, ERASE, INSTALL, MULTIINSTALL
+elements. Useful if you want to find out what to feed to the underlying
+package manager.
 
 Transaction order flags
 
 *SOLVER_TRANSACTION_KEEP_ORDERDATA*::
-  Do not throw away the dependency graph used for ordering the transaction.
-  This flag is needed if you want to do manual ordering.
+Do not throw away the dependency graph used for ordering the transaction.
+This flag is needed if you want to do manual ordering.
 
 === ATTRIBUTES ===
 
@@ -3037,7 +3129,7 @@ Back pointer to repository object.
 
 The id of the repodata area. Repodata ids of different repositories overlap.
 
-=== METHODS ====
+=== METHODS ===
 
        internalize();
        $data->internalize();
@@ -3233,6 +3325,18 @@ Return the delta rpm sequence from the structure describing a delta rpm.
 Lookup functions. Note that the returned Ids are always translated into
 the Ids of the global pool even if the repodata area contains its own pool.
 
+       Dataiterator Dataiterator(Id keyname, const char *match = 0, int flags = 0)
+       my $di = $datapos->Dataiterator($keyname, $match, $flags);
+       di = datapos.Dataiterator(keyname, match, flags)
+       di = datapos.Dataiterator(keyname, match, flags)
+
+       for my $d (@$di)
+       for d in di:
+       for d in di
+
+Iterate over the matching data elements. See the Dataiterator class for more
+information.
+
 Author
 ------
 Michael Schroeder <mls@suse.de>