X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=doc%2Flibsolv-bindings.txt;h=2b5163516bba5e6fc7f0636a82042d829d7d67af;hb=8a7ffe4fc2b44b84fb045f80c1a016b3f200aa8b;hp=f6709aa3bab97685275ed234d5f36ff1afb9eaee;hpb=5e4dfcf63fcc8accee5ea2056d75f0e0bd286123;p=platform%2Fupstream%2Flibsolv.git diff --git a/doc/libsolv-bindings.txt b/doc/libsolv-bindings.txt index f6709aa..2b51635 100644 --- a/doc/libsolv-bindings.txt +++ b/doc/libsolv-bindings.txt @@ -1,15 +1,15 @@ -LIBSOLV-BINDINGS(3) +Libsolv-Bindings(3) =================== :man manual: LIBSOLV :man source: libsolv -NAME +Name ---- libsolv-bindings - access libsolv from perl/python/ruby -DESCRIPTION +Description ----------- Libsolv's language bindings offer an abstract, object orientated interface to the library. The supported languages are currently perl, python, and ruby. @@ -18,7 +18,7 @@ the ``C-ish'' interface, then the syntax for perl, python, and ruby (in that order). -PERL SPECIFICS +Perl Specifics -------------- Libsolv's perl bindings can be loaded with the following statement: @@ -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"; @@ -61,7 +61,7 @@ constant. Also do not forget to prepend the namespace of the constant: $pool->set_flag($solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1); -PYTHON SPECIFICS +Python Specifics ---------------- The python bindings can be loaded with: @@ -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) @@ -98,7 +98,7 @@ Constants are attributes of the classes: pool.set_flag(solv.Pool.POOL_FLAG_OBSOLETEUSESCOLORS, 1); -RUBY SPECIFICS +Ruby Specifics -------------- The ruby bindings can be loaded with: @@ -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) @@ -138,10 +138,10 @@ Constants live in the namespace of the class they belong to: Note that boolean methods have an added trailing ``?'', to be consistent with other ruby modules: - puts "empty repo" if repo.isempty? + puts "empty" if repo.isempty? -THE SOLV CLASS +The Solv Class -------------- This is the main namespace of the library, you cannot create objects of this type but it contains some useful constants. @@ -151,45 +151,45 @@ 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 +The Pool Class -------------- The pool is libsolv's central resource manager. A pool consists of Solvables, Repositories, Dependencies, each indexed by Ids. @@ -201,8 +201,10 @@ Repositories, Dependencies, each indexed by Ids. pool = solv.Pool() pool = Solv::Pool.new() -Create a new pool instance. In most cases you just need -one pool. +Create a new pool instance. In most cases you just need one pool. +Note that the returned object "owns" the pool, i.e. if the object is +freed, the pool is also freed. You can use the disown method to +break this ownership relation. === ATTRIBUTES === @@ -235,68 +237,74 @@ Look up a Repository by its id. Define which repository contains all the installed packages. + const char *errstr; /* read only */ + my $err = $pool->{errstr}; + err = pool.errstr + err = pool.errstr + +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 obsolteusescolors 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 === @@ -305,9 +313,18 @@ Define which repository contains all the installed packages. pool.free() pool.free() -Free a pool. This is currently done with a method instead of relying on -reference counting or garbage collection because it's hard to track every -reference to a pool. +Force a free of the pool. After this call, you must not access any object +that still references the pool. + + void disown() + $pool->disown(); + pool.disown() + pool.disown() + +Break the ownership relation betwen the binding object and the pool. After +this call, the pool will not get freed even if the object goes out of +scope. This also means that you must manually call the free method to free +the pool data. void setdebuglevel(int level) $pool->setdebuglevel($level); @@ -560,7 +577,12 @@ 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 keyname, const char *match = 0, int flags = 0) + my $di = $pool->Dataiterator($keyname, $match, $flags); + di = pool.Dataiterator(keyname, match, flags) + di = pool.Dataiterator(keyname, match, flags) + + Dataiterator Dataiterator_solvid(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) @@ -570,7 +592,8 @@ You should probably use the methods of the Solvable class instead. for d in di Iterate over the matching data elements. See the Dataiterator class for more -information. +information. The Dataiterator method iterates over all solvables in the pool, +whereas the Dataiterator_solvid only iterates over the specified solvable. === ID METHODS === @@ -648,7 +671,7 @@ function has the same effect as id2str(). For relational dependencies, the result is the correct ``name relation evr'' string. -THE DEPENDENCY CLASS +The Dependency Class -------------------- The dependency class is an object orientated way to work with strings and dependencies. Internally, dependencies are represented as Ids, i.e. simple @@ -721,7 +744,7 @@ The dependencies are equal if they are part of the same pool and have the same ids. -THE REPOSITORY CLASS +The Repository Class -------------------- A Repository describes a group of packages, normally coming from the same source. Repositories are created by the Pool's add_repo() method. @@ -795,44 +818,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 === @@ -928,17 +952,24 @@ areas. Create a Selection consisting of all packages in the repository. - Dataiterator Dataiterator(Id p, Id key, const char *match, int flags) - my $di = $repo->Dataiterator($solvid, $keyname, $match, $flags); - di = repo.Dataiterator(solvid, keyname, match, flags) - di = repo.Dataiterator(solvid, keyname, match, flags) + Dataiterator Dataiterator(Id key, const char *match = 0, int flags = 0) + my $di = $repo->Dataiterator($keyname, $match, $flags); + di = repo.Dataiterator(keyname, match, flags) + di = repo.Dataiterator(keyname, match, flags) + + Dataiterator Dataiterator_meta(Id key, const char *match = 0, int flags = 0) + my $di = $repo->Dataiterator_meta($keyname, $match, $flags); + di = repo.Dataiterator_meta(keyname, match, flags) + di = repo.Dataiterator_meta(keyname, match, flags) for my $d (@$di) for d in di: for d in di Iterate over the matching data elements in this repository. See the -Dataiterator class for more information. +Dataiterator class for more information. The Dataiterator() method +iterates over all solvables in a repository, whereas the Dataiterator_meta +method only iterates over the repository's meta data. my $str = $repo->str; @@ -965,37 +996,37 @@ Add a single empty solvable to the repository. Returns a Solvable object, see the Solvable class for more information. bool add_solv(const char *name, int flags = 0) - $repo->add_solv($name, $flags); - repo.add_solv(name, flags) - repo.add_solv(name, flags) + $repo->add_solv($name); + repo.add_solv(name) + repo.add_solv(name) bool add_solv(FILE *fp, int flags = 0) - $repo->add_solv($fp, $flags); - repo.add_solv(fp, flags) - repo.add_solv(fp, flags) + $repo->add_solv($fp); + repo.add_solv(fp) + repo.add_solv(fp) Read a ``solv'' file and add its contents to the repository. These files can be written with the write() method and are normally used as fast cache for repository metadata. bool add_rpmdb(int flags = 0) - $repo->add_rpmdb($flags); - repo.add_rpmdb(flags) - repo.add_rpmdb(flags) + $repo->add_rpmdb(); + repo.add_rpmdb() + repo.add_rpmdb() bool add_rpmdb_reffp(FILE *reffp, int flags = 0) - $repo->add_rpmdb_reffp($reffp, $flags); - repo.add_rpmdb_reffp($reffp, flags) - repo.add_rpmdb_reffp($reffp, flags) + $repo->add_rpmdb_reffp($reffp); + repo.add_rpmdb_reffp(reffp) + repo.add_rpmdb_reffp(reffp) Add the contents of the rpm database to the repository. If a solv file containing an old version of the database is available, it can be passed as reffp to speed up reading. - bool add_rpm(const char *name, int flags = 0) - $repo->add_rpm($name, $flags); - repo.add_rpm(name, flags) - repo.add_rpm(name, flags) + Solvable add_rpm(const char *filename, int flags = 0) + my $solvable = $repo->add_rpm($filename); + solvable = repo.add_rpm(filename) + solvable = repo.add_rpm(filename) Add the metadata of a single rpm package to the repository. @@ -1008,17 +1039,17 @@ Add all pubkeys contained in the rpm database to the repository. Note that newer rpm versions also allow to store the pubkeys in some directory instead of the rpm database. - bool add_pubkey(const char *keyfile, int flags = 0) - $repo->add_pubkey($keyfile); - repo.add_pubkey($keyfile) - repo.add_pubkey($keyfile) + Solvable add_pubkey(const char *keyfile, int flags = 0) + my $solvable = $repo->add_pubkey($keyfile); + solvable = repo.add_pubkey(keyfile) + solvable = repo.add_pubkey(keyfile) Add a pubkey from a file to the repository. bool add_rpmmd(FILE *fp, const char *language, int flags = 0) - $repo->add_rpmmd($fp, $language); - repo.add_rpmmd(fp, language) - repo.add_rpmmd(fp, language) + $repo->add_rpmmd($fp, undef); + repo.add_rpmmd(fp, None) + repo.add_rpmmd(fp, nil) Add metadata stored in the "rpm-md" format (i.e. from files in the ``repodata'' directory) to a repository. Supported files are "primary", "filelists", @@ -1070,41 +1101,41 @@ Add the contents of the debian installed package database to the repository. Add the contents of the debian repository metadata (the "packages" file) to the repository. - bool add_deb(const char *filename, int flags = 0) - $repo->add_deb($filename); - repo.add_deb(filename) - repo.add_deb(filename) + Solvable add_deb(const char *filename, int flags = 0) + my $solvable = $repo->add_deb($filename); + solvable = repo.add_deb(filename) + solvable = repo.add_deb(filename) Add the metadata of a single deb package to the repository. bool add_mdk(FILE *fp, int flags = 0) $repo->add_mdk($fp); - repo.add_mdk($fp) - repo.add_mdk($fp) + repo.add_mdk(fp) + repo.add_mdk(fp) Add the contents of the mageia/mandriva repository metadata (the "synthesis.hdlist" file) to the repository. bool add_mdk_info(FILE *fp, int flags = 0) $repo->add_mdk($fp); - repo.add_mdk($fp) - repo.add_mdk($fp) + repo.add_mdk(fp) + repo.add_mdk(fp) Extend the packages from the synthesis file with the info.xml and files.xml data. Do not forget to specify *REPO_EXTEND_SOLVABLES*. bool add_arch_repo(FILE *fp, int flags = 0) $repo->add_arch_repo($fp); - repo.add_arch_repo($fp) - repo.add_arch_repo($fp) + repo.add_arch_repo(fp) + repo.add_arch_repo(fp) Add the contents of the archlinux repository metadata (the ".db.tar" file) to the repository. bool add_arch_local(const char *dir, int flags = 0) $repo->add_arch_local($dir); - repo.add_arch_local($dir) - repo.add_arch_local($dir) + repo.add_arch_local(dir) + repo.add_arch_local(dir) Add the contents of the archlinux installed package database to the repository. The _dir_ parameter is usually set to "/var/lib/pacman/local". @@ -1138,7 +1169,7 @@ Add the installed SUSE products database to the repository. The _dir_ parameter is usually "/etc/products.d". -THE SOLVABLE CLASS +The Solvable Class ------------------ A solvable describes all the information of one package. Each solvable belongs to one repository, it can be added and filled manually but in @@ -1270,6 +1301,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) @@ -1277,6 +1320,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() @@ -1292,6 +1342,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() @@ -1323,7 +1389,7 @@ Two solvables are equal if they are part of the same pool and have the same ids. -THE DATAITERATOR CLASS +The Dataiterator Class ---------------------- Dataiterators can be used to do complex string searches or to iterate over arrays. They can be created via the @@ -1334,39 +1400,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 === @@ -1393,7 +1455,7 @@ one. Iterate through the matches. If there is a match, the object in d will be of type Datamatch. -THE DATAMATCH CLASS +The Datamatch Class ------------------- Objects of this type will be created for every value matched by a dataiterator. @@ -1428,67 +1490,75 @@ The solvable containing the value that was matched. The id of the solvable that matched. -=== METHODS === - - Id key_id(); - $d->key_id() - d.key_id() - d.key_id() + Id key_id; + $d->{key_id} + d.key_id + d.key_id - const char *key_idstr(); - $d->key_idstr() - d.key_idstr() - d.key_idstr() + const char *key_idstr; + $d->{key_idstr} + d.key_idstr + d.key_idstr The keyname that matched, either as id or string. - Id type_id(); - $d->type_id() - d.type_id() - d.type_id() + Id type_id; + $d->{type_id} + d.type_id + d.type_id - const char *type_idstr(); - $d->type_idstr(); - d.type_idstr() - d.type_idstr() + const char *type_idstr; + $d->{type_idstr}; + d.type_idstr + d.type_idstr The key type of the value that was matched, either as id or string. - Id id(); - $d->id() - d.id() - d.id() + Id id; + $d->{id} + d.id + d.id - Id idstr(); - $d->idstr() - d.idstr() - d.idstr() + Id idstr; + $d->{idstr} + d.idstr + d.idstr The Id of the value that was matched (only valid for id types), either as id or string. - const char *str(); - $d->str() - d.str() - d.str() + const char *str; + $d->{str} + d.str + d.str The string value that was matched (only valid for string types). - unsigned long long num(); - $d->num() - d.num() - d.num() + unsigned long long num; + $d->{num} + d.num + d.num The numeric value that was matched (only valid for numeric types). - unsigned int num2(); - $d->num2() - d.num2() - d.num2() + unsigned int num2; + $d->{num2} + d.num2 + d.num2 The secondary numeric value that was matched (only valid for types containing two values). + unsigned int binary; + $d->{binary} + d.binary + d.binary + +The value in binary form, useful for checksums and other data +that cannot be represented as a string. + +=== METHODS === + Datapos pos(); my $pos = $d->pos(); pos = d.pos() @@ -1519,7 +1589,7 @@ it will return an empty string unless SEARCH_CHECKSUMS is used. Numeric values are currently stringified to an empty string. -THE SELECTION CLASS +The Selection Class ------------------- Selections are a way to easily deal with sets of packages. There are multiple constructors to create them, the most useful @@ -1528,51 +1598,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 ``.'' suffix when matching names or - provides. +Allow an ``.'' 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 === @@ -1654,7 +1722,7 @@ Convert a selection into an array of Solvable objects. Return a string describing the selection. -THE JOB CLASS +The Job Class ------------- Jobs are the way to specify to the dependency solver what to do. Most of the times jobs will get created by calling the jobs() method @@ -1666,139 +1734,143 @@ 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. By default 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. You can tweak this behavior with the SOLVER_FLAG_DUP_ +solver flags. *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. @@ -1917,7 +1989,7 @@ different architecture. When using the Selection class to create jobs the set bits are automatically added, e.g. selecting ``screen.i586'' will automatically add SOLVER_SETARCH, and thus no problem will be reported. -THE SOLVER CLASS +The Solver Class ---------------- Dependency solving is what this library is about. A solver object is needed for solving to store the result of the solver run. The solver object can be @@ -1929,236 +2001,306 @@ 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_DUP_ALLOW_DOWNGRADE*:: +Like SOLVER_FLAG_ALLOW_DOWNGRADE, but used in distupgrade mode. + +*SOLVER_FLAG_DUP_ALLOW_ARCHCHANGE*:: +Like SOLVER_FLAG_ALLOW_ARCHCHANGE, but used in distupgrade mode. + +*SOLVER_FLAG_DUP_ALLOW_VENDORCHANGE*:: +Like SOLVER_FLAG_ALLOW_VENDORCHANGE, but used in distupgrade mode. + +*SOLVER_FLAG_DUP_ALLOW_NAMECHANGE*:: +Like SOLVER_FLAG_ALLOW_NAMECHANGE, but used in distupgrade mode. *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 - ``:'' used in SUSE systems to support package - splits. +Make the solver aware of special provides of the form +``:'' 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. + +*SOLVER_FLAG_KEEP_ORPHANS*:: +Do not allow orphaned packages to be deinstalled if they get +in the way of resolving other packages. + +*SOLVER_FLAG_BREAK_ORPHANS*:: +Ignore dependencies of orphaned packages that get in the way +of resolving non-orphaned ones. Setting the flag might result +in no longer working packages in case they are orphaned. + +*SOLVER_FLAG_FOCUS_INSTALLED*:: +Resolve installed packages before resolving the given job. +Setting this flag means that the solver will prefer picking +a package version that fits the other installed packages +over updating installed packages. 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. +*SOLVER_RULE_PKG*:: +A package dependency rule. *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. +*SOLVER_RULE_PKG_NOT_INSTALLABLE*:: +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. +*SOLVER_RULE_PKG_NOTHING_PROVIDES_DEP*:: +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. +*SOLVER_RULE_PKG_REQUIRES*:: +Similar to SOLVER_RULE_PKG_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. +*SOLVER_RULE_PKG_SELF_CONFLICT*:: +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. +*SOLVER_RULE_PKG_CONFLICTS*:: +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. +*SOLVER_RULE_PKG_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. -*SOLVER_RULE_RPM_PACKAGE_OBSOLETES*:: - To fulfill the dependencies two packages need to be installed, but - one of the packages obsoletes the other one. +*SOLVER_RULE_PKG_OBSOLETES*:: +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. +*SOLVER_RULE_PKG_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. -*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. +*SOLVER_RULE_PKG_INSTALLED_OBSOLETES*:: +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 === @@ -2173,14 +2315,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. @@ -2204,7 +2346,15 @@ 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. -THE PROBLEM CLASS + 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 all problems and terminate your program, but a better way is to present solutions to @@ -2263,7 +2413,16 @@ the solution class for more information. Return the number of solutions without creating solution objects. -THE RULE CLASS + + 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 into one or multiple rules. @@ -2317,7 +2476,7 @@ an array of all infos about a rule. Two rules are equal if they belong to the same solver and have the same id. -THE RULEINFO CLASS +The Ruleinfo Class ------------------ A Ruleinfo describes one reason why a rule was created. @@ -2375,7 +2534,7 @@ the dependency for conflicts. A string describing the ruleinfo from a problem perspective. This probably only makes sense if the rule is part of a problem. -THE SOLUTION CLASS +The Solution Class ------------------ A solution solves one specific problem. It consists of multiple solution elements that all need to be executed. @@ -2425,7 +2584,7 @@ count does not match the number of objects returned by the elements() method of expandreplaces is set to true. -THE SOLUTIONELEMENT CLASS +The Solutionelement Class ------------------------- A solution element describes a single action of a solution. The action is always either to remove one specific job or to add a new job that installs or erases @@ -2531,7 +2690,7 @@ you should replace the old job with the new one. A string describing the change the solution element consists of. -THE TRANSACTION CLASS +The Transaction Class --------------------- Transactions describe the output of a solver run. A transaction contains a number of transaction elements, each either the installation of a new @@ -2545,114 +2704,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 === @@ -2781,7 +2940,7 @@ in active mode. If the mode contains SOLVER_TRANSACTION_SHOW_ALL, the passive mode list will be unchanged but the active mode list will just contain A-2-1. -THE TRANSACTIONCLASS CLASS +The Transactionclass Class -------------------------- Objects of this type are returned by the classify() Transaction method. @@ -2845,7 +3004,7 @@ The id of the new vendor or architecture. Return the solvables for all transaction elements in the class. -CHECKSUMS +Checksums --------- Checksums (also called hashes) are used to make sure that downloaded data is not corrupt and also as a fingerprint mechanism to check if data has changed. @@ -2927,6 +3086,13 @@ result can contain NUL bytes or unprintable characters. Finalize the checksum and return the result as hex string. + const char *typestr() + my $typestr = $chksum->typestr(); + typestr = chksum.typestr + typestr = chksum.typestr + +Return the type of the checksum as a string, e.g. "sha256". + if ($chksum1 == $chksum2) if chksum1 == chksum2: @@ -2944,7 +3110,7 @@ If the checksum is finished, the checksum is returned as ":" string. Otherwise ":unfinished" is returned. -FILE MANAGEMENT +File Management --------------- This functions were added because libsolv uses standard *FILE* pointers to read/write files, but languages like perl have their own implementation of @@ -3005,7 +3171,7 @@ style to close open files so that the file descriptors are freed right away. Returns false if there was an error. -THE REPODATA CLASS +The Repodata Class ------------------ The Repodata stores attributes for packages and the repository itself, each repository can have multiple repodata areas. You normally only need to @@ -3030,7 +3196,7 @@ Back pointer to repository object. The id of the repodata area. Repodata ids of different repositories overlap. -=== METHODS ==== +=== METHODS === internalize(); $data->internalize(); @@ -3150,7 +3316,7 @@ handle as solvid to fill the structure with data and call add_flexarray to put the structure in an array. -THE DATAPOS CLASS +The Datapos Class ----------------- Datapos objects describe a specific position in the repository data area. Thus they are only valid until the repository is modified in some way. @@ -3226,6 +3392,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