X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=doc%2Flibsolv-bindings.3;h=14bf96c437ed9ecb76561c0c4390b45ed5bee08d;hb=refs%2Ftags%2Fupstream%2F0.6.15;hp=9e0fea10967a1cb131f7ca4f88cd701dcf3f3f39;hpb=65fc23b007331aa3c2634c549b70ac2ba2cdb4da;p=platform%2Fupstream%2Flibsolv.git diff --git a/doc/libsolv-bindings.3 b/doc/libsolv-bindings.3 index 9e0fea1..14bf96c 100644 --- a/doc/libsolv-bindings.3 +++ b/doc/libsolv-bindings.3 @@ -1,13 +1,13 @@ '\" t -.\" Title: libsolv-bindings +.\" Title: Libsolv-Bindings .\" Author: [see the "Author" section] -.\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 06/05/2013 +.\" Generator: DocBook XSL Stylesheets v1.78.0 +.\" Date: 12/14/2015 .\" Manual: LIBSOLV .\" Source: libsolv .\" Language: English .\" -.TH "LIBSOLV\-BINDINGS" "3" "06/05/2013" "libsolv" "LIBSOLV" +.TH "LIBSOLV\-BINDINGS" "3" "12/14/2015" "libsolv" "LIBSOLV" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -31,8 +31,441 @@ libsolv-bindings \- access libsolv from perl/python/ruby .SH "DESCRIPTION" .sp -bla bla bla -.SH "THE POOL" +Libsolv\(cqs language bindings offer an abstract, object orientated interface to the library\&. The supported languages are currently perl, python, and ruby\&. All example code (except in the specifics sections, of course) lists first the \(lqC\-ish\(rq interface, then the syntax for perl, python, and ruby (in that order)\&. +.SH "PERL SPECIFICS" +.sp +Libsolv\(cqs perl bindings can be loaded with the following statement: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBuse solv\fR; +.fi +.if n \{\ +.RE +.\} +.sp +Objects are either created by calling the new() method on a class or they are returned by calling methods on other objects\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +my \fI$pool\fR \fB= solv::Pool\->new()\fR; +my \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->add_repo("my_first_repo")\fR; +.fi +.if n \{\ +.RE +.\} +.sp +Swig encapsulates all objects as tied hashes, thus the attributes can be accessed by treating the object as standard hash reference: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fI$pool\fR\fB\->{appdata} = 42\fR; +\fBprintf "appdata is %d\en",\fR \fI$pool\fR\fB\->{appdata}\fR; +.fi +.if n \{\ +.RE +.\} +.sp +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: +.sp +.if n \{\ +.RS 4 +.\} +.nf +my \fI$iter\fR \fB=\fR \fI$pool\fR\fB\->solvables_iter()\fR; +\fBfor my\fR \fI$solvable\fR \fB(\fR\fI@$iter\fR\fB) { \&.\&.\&. }\fR; +.fi +.if n \{\ +.RE +.\} +.sp +As a downside of this approach, iterator objects cannot have attributes\&. +.sp +If an array needs to be passed to a method it is usually done by reference, if a method returns an array it returns it on the stack: +.sp +.if n \{\ +.RS 4 +.\} +.nf +my \fI@problems\fR \fB=\fR \fI$solver\fR\fB\->solve(\e\fR\fI@jobs\fR\fB)\fR; +.fi +.if n \{\ +.RE +.\} +.sp +Due to a bug in swig, stringification does not work for libsolv\(cqs objects\&. Instead, you have to call the object\(cqs str() method\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBprint\fR \fI$dep\fR\fB\->str() \&. "\e\fR\fIn\fR\fB"\fR; +.fi +.if n \{\ +.RE +.\} +.sp +Swig implements all constants as numeric variables (instead of the more natural constant subs), so don\(cqt forget the leading \(lq$\(rq when accessing a constant\&. Also do not forget to prepend the namespace of the constant: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fI$pool\fR\fB\->set_flag($solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1)\fR; +.fi +.if n \{\ +.RE +.\} +.SH "PYTHON SPECIFICS" +.sp +The python bindings can be loaded with: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBimport solv\fR +.fi +.if n \{\ +.RE +.\} +.sp +Objects are either created by calling the constructor method for a class or they are returned by calling methods on other objects\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpool\fR \fB= solv\&.Pool()\fR +\fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo("my_first_repo")\fR +.fi +.if n \{\ +.RE +.\} +.sp +Attributes can be accessed as usual: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpool\fR\fB\&.appdata = 42\fR +\fBprint "appdata is %d" % (\fR\fIpool\fR\fB\&.appdata)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Iterators also work as expected: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter():\fR +.fi +.if n \{\ +.RE +.\} +.sp +Arrays are passed and returned as list objects: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjobs\fR \fB= []\fR +\fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +The bindings define stringification for many classes, some also have a \fIrepr\fR method to ease debugging\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBprint\fR \fIdep\fR +\fBprint repr(\fR\fIrepo\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Constants are attributes of the classes: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpool\fR\fB\&.set_flag(solv\&.Pool\&.POOL_FLAG_OBSOLETEUSESCOLORS, 1)\fR; +.fi +.if n \{\ +.RE +.\} +.SH "RUBY SPECIFICS" +.sp +The ruby bindings can be loaded with: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBrequire \*(Aqsolv\*(Aq\fR +.fi +.if n \{\ +.RE +.\} +.sp +Objects are either created by calling the new method on a class or they are returned by calling methods on other objects\&. Note that all classes start with an uppercase letter in ruby, so the class is called \(lqSolv\(rq\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpool\fR \fB= Solv::Pool\&.new\fR +\fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo("my_first_repo")\fR +.fi +.if n \{\ +.RE +.\} +.sp +Attributes can be accessed as usual: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpool\fR\fB\&.appdata = 42\fR +\fBputs "appdata is #{\fR\fIpool\fR\fB\&.appdata}"\fR +.fi +.if n \{\ +.RE +.\} +.sp +Iterators also work as expected: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter() do \&.\&.\&.\fR +.fi +.if n \{\ +.RE +.\} +.sp +Arrays are passed and returned as array objects: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIjobs\fR \fB= []\fR +\fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Most classes define a to_s method, so objects can be easily stringified\&. Many also define an inspect() method\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBputs\fR \fIdep\fR +\fBputs\fR \fIrepo\fR\fB\&.inspect\fR +.fi +.if n \{\ +.RE +.\} +.sp +Constants live in the namespace of the class they belong to: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fIpool\fR\fB\&.set_flag(Solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1)\fR; +.fi +.if n \{\ +.RE +.\} +.sp +Note that boolean methods have an added trailing \(lq?\(rq, to be consistent with other ruby modules: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBputs "empty" if\fR \fIrepo\fR\fB\&.isempty?\fR +.fi +.if n \{\ +.RE +.\} +.SH "TCL SPECIFICS" +.sp +Libsolv\(cqs tcl bindings can be loaded with the following statement: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBpackage require solv\fR +.fi +.if n \{\ +.RE +.\} +.sp +Objects are either created by calling class name prefixed with \(lqnew_\(rq, or they are returned by calling methods on other objects\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBset pool [solv::new_Pool]\fR +\fBset repo [\fR\fI$pool\fR \fBadd_repo "my_first_repo"]\fR +.fi +.if n \{\ +.RE +.\} +.sp +Swig provides a \(lqcget\(rq method to read object attributes, and a \(lqconfigure\(rq method to write them: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fI$pool\fR \fBconfigure \-appdata 42\fR +\fBputs "appdata is [\fR\fI$pool\fR \fBcget \-appdata]"\fR +.fi +.if n \{\ +.RE +.\} +.sp +The tcl bindings provide a little helper to work with iterators in a foreach style: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBset iter [\fR\fI$pool\fR \fBsolvables_iter]\fR +\fBsolv::iter s\fR \fI$iter\fR \fB{ \&.\&.\&. }\fR +.fi +.if n \{\ +.RE +.\} +.sp +libsolv\(cqs arrays are mapped to tcl\(cqs lists: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBset jobs [list\fR \fI$job1 $job2\fR\fB]\fR +\fBset problems [\fR\fI$solver\fR \fBsolve\fR \fI$jobs\fR\fB]\fR +\fBputs "We have [llength\fR \fI$problems\fR\fB] problems\&.\&.\&."\fR +.fi +.if n \{\ +.RE +.\} +.sp +Stringification is done by calling the object\(cqs \(lqstr\(rq method\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBputs [\fR\fI$dep\fR \fBstr]\fR +.fi +.if n \{\ +.RE +.\} +.sp +There is one exception: you have to use \(lqstringify\(rq for Datamatch objects, as swig reports a clash with the \(lqstr\(rq attribute\&. Some objects also support a \(lq==\(rq method for equality tests, and a \(lq!=\(rq method\&. +.sp +Swig implements all constants as numeric variables, constants belonging to a libsolv class are prefixed with the class name: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fI$pool\fR \fBset_flag\fR \fI$solv::Pool_POOL_FLAG_OBSOLETEUSESCOLORS\fR \fB1\fR +\fBputs [\fR\fI$solvable\fR \fBlookup_str\fR \fI$solv::SOLVABLE_SUMMARY\fR\fB]\fR +.fi +.if n \{\ +.RE +.\} +.SH "THE SOLV CLASS" +.sp +This is the main namespace of the library, you cannot create objects of this type but it contains some useful constants\&. +.SS "CONSTANTS" +.sp +Relational flag constants, the first three can be or\-ed together +.PP +\fBREL_LT\fR +.RS 4 +the \(lqless than\(rq bit +.RE +.PP +\fBREL_EQ\fR +.RS 4 +the \(lqequals to\(rq bit +.RE +.PP +\fBREL_GT\fR +.RS 4 +the \(lqgreater than\(rq bit +.RE +.PP +\fBREL_ARCH\fR +.RS 4 +used for relations that describe an extra architecture filter, the version part of the relation is interpreted as architecture\&. +.RE +.sp +Special Solvable Ids +.PP +\fBSOLVID_META\fR +.RS 4 +Access the meta section of a repository or repodata area\&. This is like an extra Solvable that has the Id SOLVID_META\&. +.RE +.PP +\fBSOLVID_POS\fR +.RS 4 +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\&. +.RE +.sp +Constant string Ids +.PP +\fBID_NULL\fR +.RS 4 +Always zero +.RE +.PP +\fBID_EMPTY\fR +.RS 4 +Always one, describes the empty string +.RE +.PP +\fBSOLVABLE_NAME\fR +.RS 4 +The keyname Id of the name of the solvable\&. +.RE +.PP +\fB\&...\fR +.RS 4 +see the libsolv\-constantids manpage for a list of fixed Ids\&. +.RE +.SH "THE POOL CLASS" .sp The pool is libsolv\(cqs central resource manager\&. A pool consists of Solvables, Repositories, Dependencies, each indexed by Ids\&. .SS "CLASS METHODS" @@ -50,7 +483,7 @@ my \fI$pool\fR \fB= solv::Pool\->new()\fR; .RE .\} .sp -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\&. .SS "ATTRIBUTES" .sp .if n \{\ @@ -96,22 +529,37 @@ my \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->{repos}\->[\fR\fI$repoid\fR\fB]\fR; .RE .\} .sp -Look up a Repository by its id\&. +Look up a Repository by its id\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBRepo *installed;\fR /* read/write */ +\fI$pool\fR\fB\->{installed} =\fR \fI$repo\fR; +\fIpool\fR\fB\&.installed =\fR \fIrepo\fR +\fIpool\fR\fB\&.installed =\fR \fIrepo\fR +.fi +.if n \{\ +.RE +.\} +.sp +Define which repository contains all the installed packages\&. .sp .if n \{\ .RS 4 .\} .nf -\fBRepo *installed;\fR /* read/write */ -\fI$pool\fR\fB\->{installed} =\fR \fI$repo\fR; -\fIpool\fR\fB\&.installed =\fR \fIrepo\fR -\fIpool\fR\fB\&.installed =\fR \fIrepo\fR +\fBconst char *errstr;\fR /* read only */ +my \fI$err\fR \fB=\fR \fI$pool\fR\fB\->{errstr}\fR; +\fIerr\fR \fB=\fR \fIpool\fR\fB\&.errstr\fR +\fIerr\fR \fB=\fR \fIpool\fR\fB\&.errstr\fR .fi .if n \{\ .RE .\} .sp -Define which repository contains all the installed packages\&. +Return the last error string that was stored in the pool\&. .SS "CONSTANTS" .PP \fBPOOL_FLAG_PROMOTEEPOCH\fR @@ -121,7 +569,7 @@ Promote the epoch of the providing dependency to the requesting dependency if it .PP \fBPOOL_FLAG_FORBIDSELFCONFLICTS\fR .RS 4 -Disallow the installation of packages that conflict with themselfs\&. Debian always allowd 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\&. .RE .PP \fBPOOL_FLAG_OBSOLETEUSESPROVIDES\fR @@ -136,7 +584,7 @@ An implicit obsoletes is the internal mechanism to remove the old package on an .PP \fBPOOL_FLAG_OBSOLETEUSESCOLORS\fR .RS 4 -Rpm\(cqs 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\(cqs 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\&. .RE .PP \fBPOOL_FLAG_IMPLICITOBSOLETEUSESCOLORS\fR @@ -146,7 +594,7 @@ Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if packages of the sa .PP \fBPOOL_FLAG_NOINSTALLEDOBSOLETES\fR .RS 4 -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 deinstall 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\&. .RE .PP \fBPOOL_FLAG_HAVEDISTEPOCH\fR @@ -161,7 +609,7 @@ If a package is installed in multiversionmode, rpm used to ignore both the impli .PP \fBPOOL_FLAG_ADDFILEPROVIDESFILTERED\fR .RS 4 -Make the addfileprovides method only add files from the standard locations (i\&.e\&. the \(lqbin\(rq and \(lqetc\(rq 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 \(lqbin\(rq and \(lqetc\(rq directories)\&. This is useful if you have only few packages that use non\-standard file dependencies, but you still want the fast speed that addfileprovides() generates\&. .RE .SS "METHODS" .sp @@ -178,7 +626,22 @@ Make the addfileprovides method only add files from the standard locations (i\&. .RE .\} .sp -Free a pool\&. This is currently done with a method instead of relying on reference counting or garbage collection because it\(cqs 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\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBvoid disown()\fR +\fI$pool\fR\fB\->disown()\fR; +\fIpool\fR\fB\&.disown()\fR +\fIpool\fR\fB\&.disown()\fR +.fi +.if n \{\ +.RE +.\} +.sp +Break the ownership relation between 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\&. .sp .if n \{\ .RS 4 @@ -270,7 +733,7 @@ Set the architecture for your system\&. The architecture is used to determine wh .RS 4 .\} .nf -\fBRepo *add_repo(const char *\fR\fIname\fR\fB)\fR +\fBRepo add_repo(const char *\fR\fIname\fR\fB)\fR \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->add_repo(\fR\fI$name\fR\fB)\fR; \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo(\fR\fIname\fR\fB)\fR \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo(\fR\fIname\fR\fB)\fR @@ -279,13 +742,13 @@ Set the architecture for your system\&. The architecture is used to determine wh .RE .\} .sp -Add a Repository with the specified name to the pool\&. The reposiory is empty on creation, use the repository methods to populate it with packages\&. +Add a Repository with the specified name to the pool\&. The repository is empty on creation, use the repository methods to populate it with packages\&. .sp .if n \{\ .RS 4 .\} .nf -\fBRepoiterator *repos_iter()\fR +\fBRepoiterator repos_iter()\fR \fBfor my\fR \fI$repo\fR \fB(\fR\fI@\fR\fB{\fR\fI$pool\fR\fB\->repos_iter()})\fR \fBfor\fR \fIrepo\fR \fBin\fR \fIpool\fR\fB\&.repos_iter():\fR \fBfor\fR \fIrepo\fR \fBin\fR \fIpool\fR\fB\&.repos_iter()\fR @@ -300,7 +763,7 @@ Iterate over the existing repositories\&. .RS 4 .\} .nf -\fBSolvableiterator *solvables_iter()\fR +\fBSolvableiterator solvables_iter()\fR \fBfor my\fR \fI$solvable\fR \fB(\fR\fI@\fR\fB{\fR\fI$pool\fR\fB\->solvables_iter()})\fR \fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter():\fR \fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter()\fR @@ -315,7 +778,7 @@ Iterate over the existing solvables\&. .RS 4 .\} .nf -\fBDep *Dep(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR +\fBDep Dep(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR my \fI$dep\fR \fB=\fR \fI$pool\fR\fB\->Dep(\fR\fI$string\fR\fB)\fR; \fIdep\fR \fB=\fR \fIpool\fR\fB\&.Dep(\fR\fIstring\fR\fB)\fR \fIdep\fR \fB=\fR \fIpool\fR\fB\&.Dep(\fR\fIstring\fR\fB)\fR @@ -343,7 +806,7 @@ Create an object describing a string or dependency\&. If the string is currently .RS 4 .\} .nf -\fBQueue addfileprovides_queue()\fR +\fBId *addfileprovides_queue()\fR my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->addfileprovides_queue()\fR; \fIids\fR \fB=\fR \fIpool\fR\fB\&.addfileprovides_queue()\fR \fIids\fR \fB=\fR \fIpool\fR\fB\&.addfileprovides_queue()\fR @@ -352,7 +815,7 @@ my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->addfileprovides_queue()\fR; .RE .\} .sp -Some package managers like rpm allow dependencies on files contained in other packages\&. To allow libsolv to deal with those dependencies in an efficient way, you need to call the addfileprovides method after creating and reading all repositories\&. This method will scan all dependency for file names and than scan all packages for matching files\&. If a filename has been matched, it will be added to the provides list of the corresponding package\&. The addfileprovides_queue variant works the same way but returns an array containing all file dependencies\&. This information can be stored with the repository to speed up the next usage of the repository\&. +Some package managers like rpm allow dependencies on files contained in other packages\&. To allow libsolv to deal with those dependencies in an efficient way, you need to call the addfileprovides method after creating and reading all repositories\&. This method will scan all dependency for file names and then scan all packages for matching files\&. If a filename has been matched, it will be added to the provides list of the corresponding package\&. The addfileprovides_queue variant works the same way but returns an array containing all file dependencies\&. This information can be stored in the meta section of the repositories to speed up the next time the repository is loaded and addfileprovides is called\&. .sp .if n \{\ .RS 4 @@ -367,13 +830,13 @@ Some package managers like rpm allow dependencies on files contained in other pa .RE .\} .sp -Create the internal \(lqwhatprovides\(rq hash over all of the provides of all packages\&. This method must be called before doing any lookups on provides\&. It\(cqs encuraged to do it right after all repos are set up, usually right after the call to addfileprovides()\&. +Create the internal \(lqwhatprovides\(rq hash over all of the provides of all packages\&. This method must be called before doing any lookups on provides\&. It\(cqs encouraged to do it right after all repos are set up, usually right after the call to addfileprovides()\&. .sp .if n \{\ .RS 4 .\} .nf -\fBQueue whatprovides(DepId\fR \fIdep\fR\fB)\fR +\fBSolvable *whatprovides(DepId\fR \fIdep\fR\fB)\fR my \fI@solvables\fR \fB=\fR \fI$pool\fR\fB\->whatprovides(\fR\fI$dep\fR\fB)\fR; \fIsolvables\fR \fB=\fR \fIpool\fR\fB\&.whatprovides(\fR\fIdep\fR\fB)\fR \fIsolvables\fR \fB=\fR \fIpool\fR\fB\&.whatprovides(\fR\fIdep\fR\fB)\fR @@ -382,13 +845,13 @@ my \fI@solvables\fR \fB=\fR \fI$pool\fR\fB\->whatprovides(\fR\fI$dep\fR\fB)\fR; .RE .\} .sp -Return all solvables that provide the specified dependency\&. You can use either a Dep object or an simple Id as argument\&. +Return all solvables that provide the specified dependency\&. You can use either a Dep object or a simple Id as argument\&. .sp .if n \{\ .RS 4 .\} .nf -\fBQueue matchprovidingids(const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR +\fBId *matchprovidingids(const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->matchprovidingids(\fR\fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; \fIids\fR \fB=\fR \fIpool\fR\fB\&.matchprovidingids(\fR\fImatch\fR\fB,\fR \fIflags\fR\fB)\fR \fIids\fR \fB=\fR \fIpool\fR\fB\&.matchprovidingids(\fR\fImatch\fR\fB,\fR \fIflags\fR\fB)\fR @@ -403,7 +866,7 @@ Search the names of all provides and return the ones matching the specified stri .RS 4 .\} .nf -\fBId towhatprovides(Queue\fR \fIids\fR\fB)\fR +\fBId towhatprovides(Id *\fR\fIids\fR\fB)\fR my \fI$offset\fR \fB=\fR \fI$pool\fR\fB\->towhatprovides(\e\fR\fI@ids\fR\fB)\fR; \fIoffset\fR \fB=\fR \fIpool\fR\fB\&.towhatprovides(\fR\fIids\fR\fB)\fR \fIoffset\fR \fB=\fR \fIpool\fR\fB\&.towhatprovides(\fR\fIids\fR\fB)\fR @@ -427,13 +890,13 @@ my \fI$bool\fR \fB=\fR \fI$pool\fR\fB\->isknownarch(\fR\fI$id\fR\fB)\fR; .RE .\} .sp -Return true if the specified Id describs a known architecture\&. +Return true if the specified Id describes a known architecture\&. .sp .if n \{\ .RS 4 .\} .nf -\fBSolver *Solver()\fR +\fBSolver Solver()\fR my \fI$solver\fR \fB=\fR \fI$pool\fR\fB\->Solver()\fR; \fIsolver\fR \fB=\fR \fIpool\fR\fB\&.Solver()\fR \fIsolver\fR \fB=\fR \fIpool\fR\fB\&.Solver()\fR @@ -448,7 +911,7 @@ Create a new solver object\&. .RS 4 .\} .nf -\fBSolver *Job(int\fR \fIhow\fR\fB, Id\fR \fIwhat\fR\fB)\fR +\fBJob Job(int\fR \fIhow\fR\fB, Id\fR \fIwhat\fR\fB)\fR my \fI$job\fR \fB=\fR \fI$pool\fR\fB\->Job(\fR\fI$how\fR\fB,\fR \fI$what\fR\fB)\fR; \fIjob\fR \fB=\fR \fIpool\fR\fB\&.Job(\fR\fIhow\fR\fB,\fR \fIwhat\fR\fB)\fR \fIjob\fR \fB=\fR \fIpool\fR\fB\&.Job(\fR\fIhow\fR\fB,\fR \fIwhat\fR\fB)\fR @@ -463,7 +926,7 @@ Create a new Job object\&. Kind of low level, in most cases you would use a Sele .RS 4 .\} .nf -\fBSelection *Selection()\fR +\fBSelection Selection()\fR my \fI$sel\fR \fB=\fR \fI$pool\fR\fB\->Selection()\fR; \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection()\fR \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection()\fR @@ -478,7 +941,7 @@ Create an empty selection\&. Useful as a starting point for merging other select .RS 4 .\} .nf -\fBSelection *Selection_all()\fR +\fBSelection Selection_all()\fR my \fI$sel\fR \fB=\fR \fI$pool\fR\fB\->Selection_all()\fR; \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection_all()\fR \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection_all()\fR @@ -493,7 +956,7 @@ Create a selection containing all packages\&. Useful as starting point for inter .RS 4 .\} .nf -\fBSelection *select(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR\fB)\fR +\fBSelection select(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR\fB)\fR my \fI$sel\fR \fB=\fR \fI$pool\fR\fB\->select(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR; \fIsel\fR \fB=\fR \fIpool\fR\fB\&.select(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR \fIsel\fR \fB=\fR \fIpool\fR\fB\&.select(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR @@ -521,7 +984,7 @@ Create a selection by matching packages against the specified string\&. See the .RS 4 .\} .nf -\fBJobs *getpooljobs()\fR +\fBJob *getpooljobs()\fR \fI@jobs\fR \fB=\fR \fI$pool\fR\fB\->getpooljobs()\fR; \fIjobs\fR \fB=\fR \fIpool\fR\fB\&.getpooljobs()\fR \fIjobs\fR \fB=\fR \fIpool\fR\fB\&.getpooljobs()\fR @@ -545,10 +1008,25 @@ Get/Set fixed jobs stored in the pool\&. Those jobs are automatically appended t .RE .\} .sp -Set the callback function called when repository metadata needs to be loaded on demand\&. To make use of this feature, you need to create repodata stubs that tell the library which data is available but not loaded\&. If later on the data needs to be accessed, the callback function is called with a repodata argument\&. You can then load the data (maybe fetching it first from an remote server)\&. The callback should return true if the data has been made available\&. +Set the callback function called when repository metadata needs to be loaded on demand\&. To make use of this feature, you need to create repodata stubs that tell the library which data is available but not loaded\&. If later on the data needs to be accessed, the callback function is called with a repodata argument\&. You can then load the data (maybe fetching it first from a remote server)\&. The callback should return true if the data has been made available\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +/* bindings only */ +\fI$pool\fR\fB\->appdata_disown()\fR +\fIpool\fR\fB\&.appdata_disown()\fR +\fIpool\fR\fB\&.appdata_disown()\fR +.fi +.if n \{\ +.RE +.\} +.sp +Decrement the reference count of the appdata object\&. This can be used to break circular references (e\&.g\&. if the pool\(cqs appdata value points to some meta data structure that contains a pool handle)\&. If used incorrectly, this method can lead to application crashes, so beware\&. (This method is a no\-op for ruby and tcl\&.) .SS "DATA RETRIEVAL METHODS" .sp -In the following functions, the \fIkeyname\fR argument describes what to retrive\&. For the standard cases you can use the available Id constants\&. For example, +In the following functions, the \fIkeyname\fR argument describes what to retrieve\&. For the standard cases you can use the available Id constants\&. For example, .sp .if n \{\ .RS 4 @@ -620,7 +1098,7 @@ my \fI$bool\fR \fB=\fR \fI$pool\fR\fB\->lookup_void(\fR\fI$solvid\fR\fB,\fR \fI$ .RS 4 .\} .nf -\fBQueue lookup_idarray(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR +\fBId *lookup_idarray(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->lookup_idarray(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB)\fR; \fIids\fR \fB=\fR \fIpool\fR\fB\&.lookup_idarray(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR \fIids\fR \fB=\fR \fIpool\fR\fB\&.lookup_idarray(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR @@ -633,7 +1111,7 @@ my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->lookup_idarray(\fR\fI$solvid\fR\fB,\fR \f .RS 4 .\} .nf -\fBChksum *lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR +\fBChksum lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR my \fI$chksum\fR \fB=\fR \fI$pool\fR\fB\->lookup_checksum(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB)\fR; \fIchksum\fR \fB=\fR \fIpool\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR \fIchksum\fR \fB=\fR \fIpool\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR @@ -648,7 +1126,20 @@ Lookup functions\&. Return the data element stored in the specified solvable\&. .RS 4 .\} .nf -\fBDataiterator *Dataiterator(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR +\fBDataiterator Dataiterator(Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR \fB= 0, int\fR \fIflags\fR \fB= 0)\fR +my \fI$di\fR \fB=\fR \fI$pool\fR\fB\->Dataiterator(\fR\fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; +\fIdi\fR \fB=\fR \fIpool\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +\fIdi\fR \fB=\fR \fIpool\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBDataiterator Dataiterator_solvid(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR \fB= 0, int\fR \fIflags\fR \fB= 0)\fR my \fI$di\fR \fB=\fR \fI$pool\fR\fB\->Dataiterator(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; \fIdi\fR \fB=\fR \fIpool\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR \fIdi\fR \fB=\fR \fIpool\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR @@ -669,7 +1160,7 @@ my \fI$di\fR \fB=\fR \fI$pool\fR\fB\->Dataiterator(\fR\fI$solvid\fR\fB,\fR \fI$k .RE .\} .sp -Iterate over the matching data elements\&. See the Dataiterator class for more information\&. +Iterate over the matching data elements\&. See the Dataiterator class for more information\&. The Dataiterator method iterates over all solvables in the pool, whereas the Dataiterator_solvid only iterates over the specified solvable\&. .SS "ID METHODS" .sp The following methods deal with Ids, i\&.e\&. integers representing objects in the pool\&. They are considered \(lqlow level\(rq, in most cases you would not use them but instead the object orientated methods\&. @@ -678,7 +1169,7 @@ The following methods deal with Ids, i\&.e\&. integers representing objects in t .RS 4 .\} .nf -\fBRepo *id2repo(Id\fR \fIid\fR\fB)\fR +\fBRepo id2repo(Id\fR \fIid\fR\fB)\fR \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->id2repo(\fR\fI$id\fR\fB)\fR; \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.id2repo(\fR\fIid\fR\fB)\fR \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.id2repo(\fR\fIid\fR\fB)\fR @@ -693,7 +1184,7 @@ Lookup an existing Repository by id\&. You can also do this by using the \fBrepo .RS 4 .\} .nf -\fBSolvable *id2solvable(Id\fR \fIid\fR\fB)\fR +\fBSolvable id2solvable(Id\fR \fIid\fR\fB)\fR \fI$solvable\fR \fB=\fR \fI$pool\fR\fB\->id2solvable(\fR\fI$id\fR\fB)\fR; \fIsolvable\fR \fB=\fR \fIpool\fR\fB\&.id2solvable(\fR\fIid\fR\fB)\fR \fIsolvable\fR \fB=\fR \fIpool\fR\fB\&.id2solvable(\fR\fIid\fR\fB)\fR @@ -723,7 +1214,7 @@ Return a string describing the Solvable with the specified id\&. The string cons .RS 4 .\} .nf -\fBId str2id(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR +\fBId str2id(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR my \fI$id\fR \fB=\fR \fIpool\fR\fB\->str2id(\fR\fI$string\fR\fB)\fR; \fIid\fR \fB=\fR \fIpool\fR\fB\&.str2id(\fR\fIstring\fR\fB)\fR \fIid\fR \fB=\fR \fIpool\fR\fB\&.str2id(\fR\fIstring\fR\fB)\fR @@ -751,7 +1242,7 @@ Convert a string into an Id and back\&. If the string is currently not in the po .RS 4 .\} .nf -\fBId rel2id(Id\fR \fIname\fR\fB, Id\fR \fIevr\fR\fB, int\fR \fIflags\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR +\fBId rel2id(Id\fR \fIname\fR\fB, Id\fR \fIevr\fR\fB, int\fR \fIflags\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR my \fI$id\fR \fB=\fR \fIpool\fR\fB\->rel2id(\fR\fI$nameid\fR\fB,\fR \fI$evrid\fR\fB,\fR \fI$flags\fR\fB)\fR; \fIid\fR \fB=\fR \fIpool\fR\fB\&.rel2id(\fR\fInameid\fR\fB,\fR \fIevrid\fR\fB,\fR \fIflags\fR\fB)\fR \fIid\fR \fB=\fR \fIpool\fR\fB\&.rel2id(\fR\fInameid\fR\fB,\fR \fIevrid\fR\fB,\fR \fIflags\fR\fB)\fR @@ -780,7 +1271,7 @@ Thus, if you want a \(lq<=\(rq relation, you would use \fBREL_LT | REL_EQ\fR\&. .RS 4 .\} .nf -\fBId id2langid(Id\fR \fIid\fR\fB, const char *\fR\fIlang\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR +\fBId id2langid(Id\fR \fIid\fR\fB, const char *\fR\fIlang\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR my \fI$id\fR \fB=\fR \fI$pool\fR\fB\->id2langid(\fR\fI$id\fR\fB,\fR \fI$language\fR\fB)\fR; \fIid\fR \fB=\fR \fIpool\fR\fB\&.id2langid(\fR\fIid\fR\fB,\fR \fIlanguage\fR\fB)\fR \fIid\fR \fB=\fR \fIpool\fR\fB\&.id2langid(\fR\fIid\fR\fB,\fR \fIlanguage\fR\fB)\fR @@ -845,7 +1336,7 @@ The id of this dependency\&. .RS 4 .\} .nf -\fBDep *Rel(int\fR \fIflags\fR\fB, DepId\fR \fIevrid\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR +\fBDep Rel(int\fR \fIflags\fR\fB, DepId\fR \fIevrid\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR my \fI$reldep\fR \fB=\fR \fI$dep\fR\fB\->Rel(\fR\fI$flags\fR\fB,\fR \fI$evrdep\fR\fB)\fR; \fIreldep\fR \fB=\fR \fIdep\fR\fB\&.Rel(\fR\fIflags\fR\fB,\fR \fIevrdep\fR\fB)\fR \fIreldep\fR \fB=\fR \fIdep\fR\fB\&.Rel(\fR\fIflags\fR\fB,\fR \fIevrdep\fR\fB)\fR @@ -860,7 +1351,7 @@ Create a relational dependency from to string dependencies and a flags argument\ .RS 4 .\} .nf -\fBSelection *Selection_name(int\fR \fIsetflags\fR \fB= 0)\fR +\fBSelection Selection_name(int\fR \fIsetflags\fR \fB= 0)\fR my \fI$sel\fR \fB=\fR \fI$dep\fR\fB\->Selection_name()\fR; \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_name()\fR \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_name()\fR @@ -875,7 +1366,7 @@ Create a Selection from a dependency\&. The selection consists of all packages t .RS 4 .\} .nf -\fBSelection *Selection_provides(int\fR \fIsetflags\fR \fB= 0)\fR +\fBSelection Selection_provides(int\fR \fIsetflags\fR \fB= 0)\fR my \fI$sel\fR \fB=\fR \fI$dep\fR\fB\->Selection_provides()\fR; \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_provides()\fR \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_provides()\fR @@ -932,7 +1423,7 @@ Same as calling the str() method\&. The dependencies are equal if they are part of the same pool and have the same ids\&. .SH "THE REPOSITORY CLASS" .sp -A Repository describes a group of packages, normally comming from the same source\&. Repositories are created by the Pool\(cqs add_repo() method\&. +A Repository describes a group of packages, normally coming from the same source\&. Repositories are created by the Pool\(cqs add_repo() method\&. .SS "ATTRIBUTES" .sp .if n \{\ @@ -984,7 +1475,7 @@ The repositories name\&. To libsolv, the name is just a string with no specific .RS 4 .\} .nf -\fBint prioprity;\fR /* read/write */ +\fBint priority;\fR /* read/write */ \fI$repo\fR\fB\->{priority}\fR \fIrepo\fR\fB\&.priority\fR \fIrepo\fR\fB\&.priority\fR @@ -999,7 +1490,7 @@ The priority of the repository\&. A higher number means that packages of this re .RS 4 .\} .nf -\fBint subprioprity;\fR /* read/write */ +\fBint subpriority;\fR /* read/write */ \fI$repo\fR\fB\->{subpriority}\fR \fIrepo\fR\fB\&.subpriority\fR \fIrepo\fR\fB\&.subpriority\fR @@ -1058,7 +1549,7 @@ Return a Datapos object of the repodata\(cqs metadata\&. You can use the lookup .PP \fBREPO_REUSE_REPODATA\fR .RS 4 -Reuse the last repository data aera (\(lqrepodata\(rq) instead of creating a new one\&. +Reuse the last repository data area (\(lqrepodata\(rq) instead of creating a new one\&. .RE .PP \fBREPO_NO_INTERNALIZE\fR @@ -1098,7 +1589,7 @@ Do not create stubs for repository parts that can be downloaded on demand\&. .PP \fBSUSETAGS_RECORD_SHARES\fR .RS 4 -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 one 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\&. .RE .SS "METHODS" .sp @@ -1181,7 +1672,7 @@ Write a repo as a \(lqsolv\(rq file\&. These files can be read very fast and thu .RS 4 .\} .nf -\fBSolvableiterator *solvables_iter()\fR +\fBSolvableiterator solvables_iter()\fR \fBfor my\fR \fI$solvable\fR \fB(\fR\fI@\fR\fB{\fR\fI$repo\fR\fB\->solvables_iter()})\fR \fBfor\fR \fIsolvable\fR \fBin\fR \fIrepo\fR\fB\&.solvables_iter():\fR \fBfor\fR \fIsolvable\fR \fBin\fR \fIrepo\fR\fB\&.solvables_iter()\fR @@ -1196,7 +1687,7 @@ Iterate over all solvables in a repository\&. .RS 4 .\} .nf -\fBRepodata *add_repodata(int\fR \fIflags\fR \fB= 0)\fR +\fBRepodata add_repodata(int\fR \fIflags\fR \fB= 0)\fR my \fI$repodata\fR \fB=\fR \fI$repo\fR\fB\->add_repodata()\fR; \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.add_repodata()\fR \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.add_repodata()\fR @@ -1241,7 +1732,7 @@ Return true if the solvables of this repository are all in a single block with n .RS 4 .\} .nf -\fBRepodata *first_repodata()\fR +\fBRepodata first_repodata()\fR my \fI$repodata\fR \fB=\fR \fI$repo\fR\fB\->first_repodata()\fR; \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.first_repodata()\fR \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.first_repodata()\fR @@ -1250,13 +1741,13 @@ my \fI$repodata\fR \fB=\fR \fI$repo\fR\fB\->first_repodata()\fR; .RE .\} .sp -Checks if all repodatas but the first repodata are extensions, and return the first repodata if this is the case\&. Useful if you want to do a store/retrive sequence on the repository to reduce the memory using and enable paging, as this does not work if the rpository contains multiple non\-extension repodata areas\&. +Checks if all repodatas but the first repodata are extensions, and return the first repodata if this is the case\&. Useful if you want to do a store/retrieve sequence on the repository to reduce the memory using and enable paging, as this does not work if the repository contains multiple non\-extension repodata areas\&. .sp .if n \{\ .RS 4 .\} .nf -\fBSelection *Selection(int\fR \fIsetflags\fR \fB= 0)\fR +\fBSelection Selection(int\fR \fIsetflags\fR \fB= 0)\fR my \fI$sel\fR \fB=\fR \fI$repo\fR\fB\->Selection()\fR; \fIsel\fR \fB=\fR \fIrepo\fR\fB\&.Selection()\fR \fIsel\fR \fB=\fR \fIrepo\fR\fB\&.Selection()\fR @@ -1271,10 +1762,23 @@ Create a Selection consisting of all packages in the repository\&. .RS 4 .\} .nf -\fBDataiterator *Dataiterator(Id\fR \fIp\fR\fB, Id\fR \fIkey\fR\fB, const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR -my \fI$di\fR \fB=\fR \fI$repo\fR\fB\->Dataiterator(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; -\fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR -\fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +\fBDataiterator Dataiterator(Id\fR \fIkey\fR\fB, const char *\fR\fImatch\fR \fB= 0, int\fR \fIflags\fR \fB= 0)\fR +my \fI$di\fR \fB=\fR \fI$repo\fR\fB\->Dataiterator(\fR\fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; +\fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +\fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBDataiterator Dataiterator_meta(Id\fR \fIkey\fR\fB, const char *\fR\fImatch\fR \fB= 0, int\fR \fIflags\fR \fB= 0)\fR +my \fI$di\fR \fB=\fR \fI$repo\fR\fB\->Dataiterator_meta(\fR\fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; +\fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator_meta(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +\fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator_meta(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR .fi .if n \{\ .RE @@ -1292,7 +1796,7 @@ my \fI$di\fR \fB=\fR \fI$repo\fR\fB\->Dataiterator(\fR\fI$solvid\fR\fB,\fR \fI$k .RE .\} .sp -Iterate over the matching data elements in this repository\&. See the Dataiterator class for more information\&. +Iterate over the matching data elements in this repository\&. See the 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\(cqs meta data\&. .sp .if n \{\ .RS 4 @@ -1329,7 +1833,7 @@ Two repositories are equal if they belong to the same pool and have the same id\ .RS 4 .\} .nf -\fBSolvable *add_solvable()\fR +\fBSolvable add_solvable()\fR \fI$repo\fR\fB\->add_solvable()\fR; \fIrepo\fR\fB\&.add_solvable()\fR \fIrepo\fR\fB\&.add_solvable()\fR @@ -1345,9 +1849,9 @@ Add a single empty solvable to the repository\&. Returns a Solvable object, see .\} .nf \fBbool add_solv(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_solv(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR; -\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR -\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR +\fI$repo\fR\fB\->add_solv(\fR\fI$name\fR\fB)\fR; +\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB)\fR +\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB)\fR .fi .if n \{\ .RE @@ -1358,9 +1862,9 @@ Add a single empty solvable to the repository\&. Returns a Solvable object, see .\} .nf \fBbool add_solv(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_solv(\fR\fI$fp\fR\fB,\fR \fI$flags\fR\fB)\fR; -\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB,\fR \fIflags\fR\fB)\fR -\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB,\fR \fIflags\fR\fB)\fR +\fI$repo\fR\fB\->add_solv(\fR\fI$fp\fR\fB)\fR; +\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB)\fR +\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB)\fR .fi .if n \{\ .RE @@ -1373,9 +1877,9 @@ Read a \(lqsolv\(rq file and add its contents to the repository\&. These files c .\} .nf \fBbool add_rpmdb(int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_rpmdb(\fR\fI$flags\fR\fB)\fR; -\fIrepo\fR\fB\&.add_rpmdb(\fR\fIflags\fR\fB)\fR -\fIrepo\fR\fB\&.add_rpmdb(\fR\fIflags\fR\fB)\fR +\fI$repo\fR\fB\->add_rpmdb()\fR; +\fIrepo\fR\fB\&.add_rpmdb()\fR +\fIrepo\fR\fB\&.add_rpmdb()\fR .fi .if n \{\ .RE @@ -1386,9 +1890,9 @@ Read a \(lqsolv\(rq file and add its contents to the repository\&. These files c .\} .nf \fBbool add_rpmdb_reffp(FILE *\fR\fIreffp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fI$flags\fR\fB)\fR; -\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fIflags\fR\fB)\fR -\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fIflags\fR\fB)\fR +\fI$repo\fR\fB\->add_rpmdb_reffp(\fR\fI$reffp\fR\fB)\fR; +\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fIreffp\fR\fB)\fR +\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fIreffp\fR\fB)\fR .fi .if n \{\ .RE @@ -1400,10 +1904,10 @@ Add the contents of the rpm database to the repository\&. If a solv file contain .RS 4 .\} .nf -\fBbool add_rpm(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_rpm(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR; -\fIrepo\fR\fB\&.add_rpm(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR -\fIrepo\fR\fB\&.add_rpm(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR +\fBSolvable add_rpm(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR +my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_rpm(\fR\fI$filename\fR\fB)\fR; +\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_rpm(\fR\fIfilename\fR\fB)\fR +\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_rpm(\fR\fIfilename\fR\fB)\fR .fi .if n \{\ .RE @@ -1430,10 +1934,10 @@ Add all pubkeys contained in the rpm database to the repository\&. Note that new .RS 4 .\} .nf -\fBbool add_pubkey(const char *\fR\fIkeyfile\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_pubkey(\fR\fI$keyfile\fR\fB)\fR; -\fIrepo\fR\fB\&.add_pubkey(\fR\fI$keyfile\fR\fB)\fR -\fIrepo\fR\fB\&.add_pubkey(\fR\fI$keyfile\fR\fB)\fR +\fBSolvable add_pubkey(const char *\fR\fIkeyfile\fR\fB, int\fR \fIflags\fR \fB= 0)\fR +my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_pubkey(\fR\fI$keyfile\fR\fB)\fR; +\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_pubkey(\fR\fIkeyfile\fR\fB)\fR +\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_pubkey(\fR\fIkeyfile\fR\fB)\fR .fi .if n \{\ .RE @@ -1446,9 +1950,9 @@ Add a pubkey from a file to the repository\&. .\} .nf \fBbool add_rpmmd(FILE *\fR\fIfp\fR\fB, const char *\fR\fIlanguage\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_rpmmd(\fR\fI$fp\fR\fB,\fR \fI$language\fR\fB)\fR; -\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fIlanguage\fR\fB)\fR -\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fIlanguage\fR\fB)\fR +\fI$repo\fR\fB\->add_rpmmd(\fR\fI$fp\fR\fB,\fR \fIundef\fR\fB)\fR; +\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fINone\fR\fB)\fR +\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fInil\fR\fB)\fR .fi .if n \{\ .RE @@ -1469,7 +1973,7 @@ Add metadata stored in the "rpm\-md" format (i\&.e\&. from files in the \(lqrepo .RE .\} .sp -Add the repomd\&.xml meta description from the "rpm\-md" format to the repository\&. This file contains information about the repository like keywords, and also a list of all database files with checksums\&. The data is added the the "meta" section of the repository, i\&.e\&. no package gets created\&. +Add the repomd\&.xml meta description from the "rpm\-md" format to the repository\&. This file contains information about the repository like keywords, and also a list of all database files with checksums\&. The data is added to the "meta" section of the repository, i\&.e\&. no package gets created\&. .sp .if n \{\ .RS 4 @@ -1535,10 +2039,10 @@ Add the contents of the debian repository metadata (the "packages" file) to the .RS 4 .\} .nf -\fBbool add_deb(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR -\fI$repo\fR\fB\->add_deb(\fR\fI$filename\fR\fB)\fR; -\fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR -\fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR +\fBSolvable add_deb(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR +my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_deb(\fR\fI$filename\fR\fB)\fR; +\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR +\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR .fi .if n \{\ .RE @@ -1552,8 +2056,8 @@ Add the metadata of a single deb package to the repository\&. .nf \fBbool add_mdk(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR \fI$repo\fR\fB\->add_mdk(\fR\fI$fp\fR\fB)\fR; -\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR -\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR +\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR +\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR .fi .if n \{\ .RE @@ -1567,8 +2071,8 @@ Add the contents of the mageia/mandriva repository metadata (the "synthesis\&.hd .nf \fBbool add_mdk_info(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR \fI$repo\fR\fB\->add_mdk(\fR\fI$fp\fR\fB)\fR; -\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR -\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR +\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR +\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR .fi .if n \{\ .RE @@ -1582,8 +2086,8 @@ Extend the packages from the synthesis file with the info\&.xml and files\&.xml .nf \fBbool add_arch_repo(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR \fI$repo\fR\fB\->add_arch_repo(\fR\fI$fp\fR\fB)\fR; -\fIrepo\fR\fB\&.add_arch_repo(\fR\fI$fp\fR\fB)\fR -\fIrepo\fR\fB\&.add_arch_repo(\fR\fI$fp\fR\fB)\fR +\fIrepo\fR\fB\&.add_arch_repo(\fR\fIfp\fR\fB)\fR +\fIrepo\fR\fB\&.add_arch_repo(\fR\fIfp\fR\fB)\fR .fi .if n \{\ .RE @@ -1597,8 +2101,8 @@ Add the contents of the archlinux repository metadata (the "\&.db\&.tar" file) t .nf \fBbool add_arch_local(const char *\fR\fIdir\fR\fB, int\fR \fIflags\fR \fB= 0)\fR \fI$repo\fR\fB\->add_arch_local(\fR\fI$dir\fR\fB)\fR; -\fIrepo\fR\fB\&.add_arch_local(\fR\fI$dir\fR\fB)\fR -\fIrepo\fR\fB\&.add_arch_local(\fR\fI$dir\fR\fB)\fR +\fIrepo\fR\fB\&.add_arch_local(\fR\fIdir\fR\fB)\fR +\fIrepo\fR\fB\&.add_arch_local(\fR\fIdir\fR\fB)\fR .fi .if n \{\ .RE @@ -1619,7 +2123,7 @@ Add the contents of the archlinux installed package database to the repository\& .RE .\} .sp -Add the \(lqcontent\(rq meta description from the susetags format to the repository\&. This file contains information about the repository like keywords, and also a list of all database files with checksums\&. The data is added the the "meta" section of the repository, i\&.e\&. no package gets created\&. +Add the \(lqcontent\(rq meta description from the susetags format to the repository\&. This file contains information about the repository like keywords, and also a list of all database files with checksums\&. The data is added to the "meta" section of the repository, i\&.e\&. no package gets created\&. .sp .if n \{\ .RS 4 @@ -1865,7 +2369,7 @@ my \fI$bool\fR \fB=\fR \fI$solvable\fR\fB\->lookup_void(\fR\fI$keyname\fR\fB)\fR .RS 4 .\} .nf -\fBChksum *lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR +\fBChksum lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR my \fI$chksum\fR \fB=\fR \fI$solvable\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\fB)\fR; \fIchksum\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR \fIchksum\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR @@ -1878,7 +2382,7 @@ my \fI$chksum\fR \fB=\fR \fI$solvable\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\ .RS 4 .\} .nf -\fBQueue lookup_idarray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR +\fBId *lookup_idarray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR my \fI@ids\fR \fB=\fR \fI$solvable\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\fR; \fIids\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR \fIids\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR @@ -1891,7 +2395,7 @@ my \fI@ids\fR \fB=\fR \fI$solvable\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\ .RS 4 .\} .nf -\fBQueue lookup_deparray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR +\fBDep *lookup_deparray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR my \fI@deps\fR \fB=\fR \fI$solvable\fR\fB\->lookup_deparray(\fR\fI$keyname\fR\fB)\fR; \fIdeps\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_deparray(\fR\fIkeyname\fR\fB)\fR \fIdeps\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_deparray(\fR\fIkeyname\fR\fB)\fR @@ -1900,7 +2404,7 @@ my \fI@deps\fR \fB=\fR \fI$solvable\fR\fB\->lookup_deparray(\fR\fI$keyname\fR\fB .RE .\} .sp -Generic lookup methods\&. Retrieve data stored for the specific keyname\&. The lookup_idarray() method will return an array of Ids, use lookup_deparray if you want an array of Dependency objects instead\&. Some Id arrays contain two parts of data divided by a specific marker, for example the provides array uses the SOLVABLE_FILEMARKER id to store both the ids provided by the package and the ids added by the addfileprovides method\&. The default, \-1, translates to the correct marker for the keyname and returns the first part of the array, use 1 to select the second part or 0 to retrive all ids including the marker\&. +Generic lookup methods\&. Retrieve data stored for the specific keyname\&. The lookup_idarray() method will return an array of Ids, use lookup_deparray if you want an array of Dependency objects instead\&. Some Id arrays contain two parts of data divided by a specific marker, for example the provides array uses the SOLVABLE_FILEMARKER id to store both the ids provided by the package and the ids added by the addfileprovides method\&. The default, \-1, translates to the correct marker for the keyname and returns the first part of the array, use 1 to select the second part or 0 to retrieve all ids including the marker\&. .sp .if n \{\ .RS 4 @@ -1921,6 +2425,33 @@ Return a tuple containing the on\-media location and an optional media number fo .RS 4 .\} .nf +\fBDataiterator Dataiterator(Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR \fB= 0, int\fR \fIflags\fR \fB= 0)\fR +my \fI$di\fR \fB=\fR \fI$solvable\fR\fB\->Dataiterator(\fR\fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; +\fIdi\fR \fB=\fR \fIsolvable\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +\fIdi\fR \fB=\fR \fIsolvable\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBfor my\fR \fI$d\fR \fB(\fR\fI@$di\fR\fB)\fR +\fBfor\fR \fId\fR \fBin\fR \fIdi\fR\fB:\fR +\fBfor\fR \fId\fR \fBin\fR \fIdi\fR +.fi +.if n \{\ +.RE +.\} +.sp +Iterate over the matching data elements\&. See the Dataiterator class for more information\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf \fBvoid add_deparray(Id\fR \fIkeyname\fR\fB, DepId\fR \fIdep\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR; \fI$solvable\fR\fB\->add_deparray(\fR\fI$keyname\fR\fB,\fR \fI$dep\fR\fB)\fR; \fIsolvable\fR\fB\&.add_deparray(\fR\fIkeyname\fR\fB,\fR \fIdep\fR\fB)\fR @@ -1936,6 +2467,21 @@ Add a new dependency to the attributes stored in keyname\&. .RS 4 .\} .nf +\fBvoid unset(Id\fR \fIkeyname\fR\fB)\fR; +\fI$solvable\fR\fB\->unset(\fR\fI$keyname\fR\fB)\fR; +\fIsolvable\fR\fB\&.unset(\fR\fIkeyname\fR\fB)\fR +\fIsolvable\fR\fB\&.unset(\fR\fIkeyname\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Delete data stored for the specific keyname\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf \fBbool installable()\fR; \fI$solvable\fR\fB\->installable()\fR \fIsolvable\fR\fB\&.installable()\fR @@ -1966,7 +2512,37 @@ Return true if the solvable is installed on the system\&. .RS 4 .\} .nf -\fBSelection *Selection(int\fR \fIsetflags\fR \fB= 0)\fR +\fBbool identical(Solvable *\fR\fIother\fR\fB)\fR +\fI$solvable\fR\fB\->identical(\fR\fI$other\fR\fB)\fR +\fI$solvable\fR\fB\&.identical(\fR\fIother\fR\fB)\fR +\fI$solvable\fR\fB\&.identical?(\fR\fIother\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Return true if the two solvables are identical\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBint evrcmp(Solvable *\fR\fIother\fR\fB)\fR +\fI$solvable\fR\fB\->evrcmp(\fR\fIother\fR\fB)\fR +\fI$solvable\fR\fB\&.evrcmp(\fR\fIother\fR\fB)\fR +\fI$solvable\fR\fB\&.evrcmp(\fR\fIother\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Returns \-1 if the epoch/version/release of the solvable is less than 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\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBSelection Selection(int\fR \fIsetflags\fR \fB= 0)\fR my \fI$sel\fR \fB=\fR \fI$solvable\fR\fB\->Selection()\fR; \fIsel\fR \fB=\fR \fIsolvable\fR\fB\&.Selection()\fR \fIsel\fR \fB=\fR \fIsolvable\fR\fB\&.Selection()\fR @@ -2185,16 +2761,15 @@ The solvable containing the value that was matched\&. .\} .sp The id of the solvable that matched\&. -.SS "METHODS" .sp .if n \{\ .RS 4 .\} .nf -\fBId key_id()\fR; -\fI$d\fR\fB\->key_id()\fR -\fId\fR\fB\&.key_id()\fR -\fId\fR\fB\&.key_id()\fR +\fBId\fR \fIkey_id\fR; +\fI$d\fR\fB\->{\fR\fIkey_id\fR\fB}\fR +\fId\fR\fB\&.key_id\fR +\fId\fR\fB\&.key_id\fR .fi .if n \{\ .RE @@ -2204,10 +2779,10 @@ The id of the solvable that matched\&. .RS 4 .\} .nf -\fBconst char *key_idstr()\fR; -\fI$d\fR\fB\->key_idstr()\fR -\fId\fR\fB\&.key_idstr()\fR -\fId\fR\fB\&.key_idstr()\fR +\fBconst char *\fR\fIkey_idstr\fR; +\fI$d\fR\fB\->{\fR\fIkey_idstr\fR\fB}\fR +\fId\fR\fB\&.key_idstr\fR +\fId\fR\fB\&.key_idstr\fR .fi .if n \{\ .RE @@ -2219,10 +2794,10 @@ The keyname that matched, either as id or string\&. .RS 4 .\} .nf -\fBId type_id()\fR; -\fI$d\fR\fB\->type_id()\fR -\fId\fR\fB\&.type_id()\fR -\fId\fR\fB\&.type_id()\fR +\fBId\fR \fItype_id\fR; +\fI$d\fR\fB\->{\fR\fItype_id\fR\fB}\fR +\fId\fR\fB\&.type_id\fR +\fId\fR\fB\&.type_id\fR .fi .if n \{\ .RE @@ -2232,10 +2807,10 @@ The keyname that matched, either as id or string\&. .RS 4 .\} .nf -\fBconst char *type_idstr()\fR; -\fI$d\fR\fB\->type_idstr()\fR; -\fId\fR\fB\&.type_idstr()\fR -\fId\fR\fB\&.type_idstr()\fR +\fBconst char *\fR\fItype_idstr\fR; +\fI$d\fR\fB\->{\fR\fItype_idstr\fR\fB}\fR; +\fId\fR\fB\&.type_idstr\fR +\fId\fR\fB\&.type_idstr\fR .fi .if n \{\ .RE @@ -2247,10 +2822,10 @@ The key type of the value that was matched, either as id or string\&. .RS 4 .\} .nf -\fBId id()\fR; -\fI$d\fR\fB\->id()\fR -\fId\fR\fB\&.id()\fR -\fId\fR\fB\&.id()\fR +\fBId\fR \fIid\fR; +\fI$d\fR\fB\->{id}\fR +\fId\fR\fB\&.id\fR +\fId\fR\fB\&.id\fR .fi .if n \{\ .RE @@ -2260,10 +2835,10 @@ The key type of the value that was matched, either as id or string\&. .RS 4 .\} .nf -\fBId idstr()\fR; -\fI$d\fR\fB\->idstr()\fR -\fId\fR\fB\&.idstr()\fR -\fId\fR\fB\&.idstr()\fR +\fBId\fR \fIidstr\fR; +\fI$d\fR\fB\->{idstr}\fR +\fId\fR\fB\&.idstr\fR +\fId\fR\fB\&.idstr\fR .fi .if n \{\ .RE @@ -2275,10 +2850,10 @@ The Id of the value that was matched (only valid for id types), either as id or .RS 4 .\} .nf -\fBconst char *str()\fR; -\fI$d\fR\fB\->str()\fR -\fId\fR\fB\&.str()\fR -\fId\fR\fB\&.str()\fR +\fBconst char *\fR\fIstr\fR; +\fI$d\fR\fB\->{str}\fR +\fId\fR\fB\&.str\fR +\fId\fR\fB\&.str\fR .fi .if n \{\ .RE @@ -2290,10 +2865,10 @@ The string value that was matched (only valid for string types)\&. .RS 4 .\} .nf -\fBunsigned long long num()\fR; -\fI$d\fR\fB\->num()\fR -\fId\fR\fB\&.num()\fR -\fId\fR\fB\&.num()\fR +\fBunsigned long long\fR \fInum\fR; +\fI$d\fR\fB\->{num}\fR +\fId\fR\fB\&.num\fR +\fId\fR\fB\&.num\fR .fi .if n \{\ .RE @@ -2305,10 +2880,10 @@ The numeric value that was matched (only valid for numeric types)\&. .RS 4 .\} .nf -\fBunsigned int num2()\fR; -\fI$d\fR\fB\->num2()\fR -\fId\fR\fB\&.num2()\fR -\fId\fR\fB\&.num2()\fR +\fBunsigned int\fR \fInum2\fR; +\fI$d\fR\fB\->{num2}\fR +\fId\fR\fB\&.num2\fR +\fId\fR\fB\&.num2\fR .fi .if n \{\ .RE @@ -2320,7 +2895,23 @@ The secondary numeric value that was matched (only valid for types containing tw .RS 4 .\} .nf -\fBDatapos *pos()\fR; +\fBunsigned int\fR \fIbinary\fR; +\fI$d\fR\fB\->{binary}\fR +\fId\fR\fB\&.binary\fR +\fId\fR\fB\&.binary\fR +.fi +.if n \{\ +.RE +.\} +.sp +The value in binary form, useful for checksums and other data that cannot be represented as a string\&. +.SS "METHODS" +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBDatapos pos()\fR; my \fI$pos\fR \fB=\fR \fI$d\fR\fB\->pos()\fR; \fIpos\fR \fB=\fR \fId\fR\fB\&.pos()\fR \fIpos\fR \fB=\fR \fId\fR\fB\&.pos()\fR @@ -2335,7 +2926,7 @@ The position object of the current match\&. It can be used to do sub\-searches s .RS 4 .\} .nf -\fBDatapos *parentpos()\fR; +\fBDatapos parentpos()\fR; my \fI$pos\fR \fB=\fR \fI$d\fR\fB\->parentpos()\fR; \fIpos\fR \fB=\fR \fId\fR\fB\&.parentpos()\fR \fIpos\fR \fB=\fR \fId\fR\fB\&.parentpos()\fR @@ -2367,17 +2958,17 @@ Selections are a way to easily deal with sets of packages\&. There are multiple .PP \fBSELECTION_NAME\fR .RS 4 -Create the selection by matching package names +Create the selection by matching package names\&. .RE .PP \fBSELECTION_PROVIDES\fR .RS 4 -Create the selection by matching package provides +Create the selection by matching package provides\&. .RE .PP \fBSELECTION_FILELIST\fR .RS 4 -Create the selection by matching package files +Create the selection by matching package files\&. .RE .PP \fBSELECTION_CANON\fR @@ -2521,7 +3112,7 @@ Add a raw element to the selection\&. Check the Job class for information about .RS 4 .\} .nf -\fBJob **jobs(int\fR \fIaction\fR\fB)\fR +\fBJob *jobs(int\fR \fIaction\fR\fB)\fR my \fI@jobs\fR \fB=\fR \fI$sel\fR\fB\->jobs(\fR\fI$action\fR\fB)\fR; \fIjobs\fR \fB=\fR \fIsel\fR\fB\&.jobs(\fR\fIaction\fR\fB)\fR \fIjobs\fR \fB=\fR \fIsel\fR\fB\&.jobs(\fR\fIaction\fR\fB)\fR @@ -2536,7 +3127,7 @@ Convert a selection into an array of Job objects\&. The action parameter is or\- .RS 4 .\} .nf -\fBSolvable **solvables()\fR +\fBSolvable *solvables()\fR my \fI@solvables\fR \fB=\fR \fI$sel\fR\fB\->solvables()\fR; \fIsolvables\fR \fB=\fR \fIsel\fR\fB\&.solvables()\fR \fIsolvables\fR \fB=\fR \fIsel\fR\fB\&.solvables()\fR @@ -2632,7 +3223,7 @@ Allow to break the dependencies of the matching packages\&. Handle with care\&. .PP \fBSOLVER_MULTIVERSION\fR .RS 4 -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 \(oq`\-i\*(Aq\*(Aq instead of ``\-U\(cq\*(Aq)\&. +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 \(lq\-i\(rq instead of \(lq\-U\(rq)\&. .RE .PP \fBSOLVER_LOCK\fR @@ -2642,7 +3233,7 @@ Do not change the state of the matched packages, i\&.e\&. when they are installe .PP \fBSOLVER_DISTUPGRADE\fR .RS 4 -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\&. .RE .PP \fBSOLVER_DROP_ORPHANED\fR @@ -2657,7 +3248,12 @@ Fix dependency problems of matching installed packages\&. The default is to igno .PP \fBSOLVER_USERINSTALLED\fR .RS 4 -The matching installed packages are considered to be installed by a user, thus not installed to fulfil 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\&. +.RE +.PP +\fBSOLVER_ALLOWUNINSTALL\fR +.RS 4 +Allow the solver to deinstall the matching installed packages if they get into the way of resolving a dependency\&. This is like the SOLVER_FLAG_ALLOW_UNINSTALL flag, but limited to a specific set of packages\&. .RE .PP \fBSOLVER_JOBMASK\fR @@ -2669,7 +3265,7 @@ Action modifier constants: .PP \fBSOLVER_WEAK\fR .RS 4 -Makes the job a weak job\&. The solver tries to fulfil 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\&. .RE .PP \fBSOLVER_ESSENTIAL\fR @@ -2787,7 +3383,7 @@ Id describing the set of packages, the meaning depends on the selection part of .RS 4 .\} .nf -\fBSolvable **solvables()\fR +\fBSolvable *solvables()\fR my \fI@solvables\fR \fB=\fR \fI$job\fR\fB\->solvables()\fR; \fIsolvables\fR \fB=\fR \fIjob\fR\fB\&.solvables()\fR \fIsolvables\fR \fB=\fR \fIjob\fR\fB\&.solvables()\fR @@ -2867,9 +3463,11 @@ Set bits specify which parts of the specified packages where specified by the us .sp So if a package "screen\-1\-1" is installed for the x86_64 architecture and version "2\-1" is only available for the i586 architecture, installing package "screen\-2\&.1" will ask the user for confirmation because of the different architecture\&. When using the Selection class to create jobs the set bits are automatically added, e\&.g\&. selecting \(lqscreen\&.i586\(rq will automatically add SOLVER_SETARCH, and thus no problem will be reported\&. .SH "THE SOLVER CLASS" +.sp +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 used multiple times for different jobs, reusing it allows the solver to re\-use the dependency rules it already computed\&. .SS "CONSTANTS" .sp -Flags to modify some of the solver\(cqs behaviour: +Flags to modify some of the solver\(cqs behavior: .PP \fBSOLVER_FLAG_ALLOW_DOWNGRADE\fR .RS 4 @@ -2893,7 +3491,27 @@ Allow the solver to change the name of an installed package, i\&.e\&. install a .PP \fBSOLVER_FLAG_ALLOW_UNINSTALL\fR .RS 4 -Allow the solver to deinstall installed packages to fulfil 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\(cqs better for the user to check the transaction overview instead of approving every single package that needs to be deinstalled\&. +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\(cqs better for the user to check the transaction overview instead of approving every single package that needs to be erased\&. +.RE +.PP +\fBSOLVER_FLAG_DUP_ALLOW_DOWNGRADE\fR +.RS 4 +Like SOLVER_FLAG_ALLOW_DOWNGRADE, but used in distupgrade mode\&. +.RE +.PP +\fBSOLVER_FLAG_DUP_ALLOW_ARCHCHANGE\fR +.RS 4 +Like SOLVER_FLAG_ALLOW_ARCHCHANGE, but used in distupgrade mode\&. +.RE +.PP +\fBSOLVER_FLAG_DUP_ALLOW_VENDORCHANGE\fR +.RS 4 +Like SOLVER_FLAG_ALLOW_VENDORCHANGE, but used in distupgrade mode\&. +.RE +.PP +\fBSOLVER_FLAG_DUP_ALLOW_NAMECHANGE\fR +.RS 4 +Like SOLVER_FLAG_ALLOW_NAMECHANGE, but used in distupgrade mode\&. .RE .PP \fBSOLVER_FLAG_NO_UPDATEPROVIDE\fR @@ -2913,7 +3531,7 @@ Do not process optional (aka weak) dependencies\&. .PP \fBSOLVER_FLAG_ADD_ALREADY_RECOMMENDED\fR .RS 4 -Install recommened 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\&. .RE .PP \fBSOLVER_FLAG_NO_INFARCHCHECK\fR @@ -2930,6 +3548,21 @@ Make the SOLVER_FORCEBEST job option consider only packages that meet the polici .RS 4 Do not enable auto\-targeting up update and distupgrade jobs\&. See the section on targeted updates for more information\&. .RE +.PP +\fBSOLVER_FLAG_KEEP_ORPHANS\fR +.RS 4 +Do not allow orphaned packages to be deinstalled if they get in the way of resolving other packages\&. +.RE +.PP +\fBSOLVER_FLAG_BREAK_ORPHANS\fR +.RS 4 +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\&. +.RE +.PP +\fBSOLVER_FLAG_FOCUS_INSTALLED\fR +.RS 4 +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\&. +.RE .sp Basic rule types: .PP @@ -2938,9 +3571,9 @@ Basic rule types: A rule of an unknown class\&. You should never encounter those\&. .RE .PP -\fBSOLVER_RULE_RPM\fR +\fBSOLVER_RULE_PKG\fR .RS 4 -A package dependency rule, called rpm rule for historical reasons\&. +A package dependency rule\&. .RE .PP \fBSOLVER_RULE_UPDATE\fR @@ -2950,7 +3583,7 @@ A rule to implement the update policy of installed packages\&. Every installed p .PP \fBSOLVER_RULE_FEATURE\fR .RS 4 -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 deinstall installed packages if their update rule gets disabled\&. +Feature rules are fallback rules used when an 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\&. .RE .PP \fBSOLVER_RULE_JOB\fR @@ -2960,7 +3593,7 @@ Job rules implement the job given to the solver\&. .PP \fBSOLVER_RULE_DISTUPGRADE\fR .RS 4 -This are simple negative assertions that make sure that only packages are kept that are also available in one of the repositories\&. +These are simple negative assertions that make sure that only packages are kept that are also available in one of the repositories\&. .RE .PP \fBSOLVER_RULE_INFARCH\fR @@ -2970,57 +3603,57 @@ Infarch rules are also negative assertions, they disallow the installation of pa .PP \fBSOLVER_RULE_CHOICE\fR .RS 4 -Choice rules are used to make sure that the solver preferes 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\&. .RE .PP \fBSOLVER_RULE_LEARNT\fR .RS 4 -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 than other dependency solver implementations\&. .RE .sp Special dependency rule types: .PP -\fBSOLVER_RULE_RPM_NOT_INSTALLABLE\fR +\fBSOLVER_RULE_PKG_NOT_INSTALLABLE\fR .RS 4 This rule was added to prevent the installation of a package of an architecture that does not work on the system\&. .RE .PP -\fBSOLVER_RULE_RPM_NOTHING_PROVIDES_DEP\fR +\fBSOLVER_RULE_PKG_NOTHING_PROVIDES_DEP\fR .RS 4 -The package contanis a required dependency which was not provided by any package\&. +The package contains a required dependency which was not provided by any package\&. .RE .PP -\fBSOLVER_RULE_RPM_PACKAGE_REQUIRES\fR +\fBSOLVER_RULE_PKG_REQUIRES\fR .RS 4 -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_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\&. .RE .PP -\fBSOLVER_RULE_RPM_SELF_CONFLICT\fR +\fBSOLVER_RULE_PKG_SELF_CONFLICT\fR .RS 4 The package conflicts with itself\&. This is not allowed by older rpm versions\&. .RE .PP -\fBSOLVER_RULE_RPM_PACKAGE_CONFLICT\fR +\fBSOLVER_RULE_PKG_CONFLICTS\fR .RS 4 To fulfill the dependencies two packages need to be installed, but one of the packages contains a conflict with the other one\&. .RE .PP -\fBSOLVER_RULE_RPM_SAME_NAME\fR +\fBSOLVER_RULE_PKG_SAME_NAME\fR .RS 4 The dependencies can only be fulfilled by multiple versions of a package, but installing multiple versions of the same package is not allowed\&. .RE .PP -\fBSOLVER_RULE_RPM_PACKAGE_OBSOLETES\fR +\fBSOLVER_RULE_PKG_OBSOLETES\fR .RS 4 To fulfill the dependencies two packages need to be installed, but one of the packages obsoletes the other one\&. .RE .PP -\fBSOLVER_RULE_RPM_IMPLICIT_OBSOLETES\fR +\fBSOLVER_RULE_PKG_IMPLICIT_OBSOLETES\fR .RS 4 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\&. .RE .PP -\fBSOLVER_RULE_RPM_INSTALLEDPKG_OBSOLETES\fR +\fBSOLVER_RULE_PKG_INSTALLED_OBSOLETES\fR .RS 4 To fulfill the dependencies a package needs to be installed that is obsoleted by an installed package\&. See the POOL_FLAG_NOINSTALLEDOBSOLETES flag\&. .RE @@ -3064,7 +3697,7 @@ The solver ask for permission before changing the vendor of installed packages\& .PP \fBPOLICY_ILLEGAL_NAMECHANGE\fR .RS 4 -The solver ask for permission before replacing an installed packages with a packge that has a different name\&. +The solver ask for permission before replacing an installed packages with a package that has a different name\&. .RE .sp Solution element type constants @@ -3123,6 +3756,63 @@ The problem can be solved by allowing to replace the package with some other pac .RS 4 The problem can be solved by allowing to replace the package with some other package that has a different name\&. .RE +.sp +Reason constants +.PP +\fBSOLVER_REASON_UNRELATED\fR +.RS 4 +The package status did not change as it was not related to any job\&. +.RE +.PP +\fBSOLVER_REASON_UNIT_RULE\fR +.RS 4 +The package was installed/erased/kept because of a unit rule, i\&.e\&. a rule where all literals but one were false\&. +.RE +.PP +\fBSOLVER_REASON_KEEP_INSTALLED\fR +.RS 4 +The package was chosen when trying to keep as many packages installed as possible\&. +.RE +.PP +\fBSOLVER_REASON_RESOLVE_JOB\fR +.RS 4 +The decision happened to fulfill a job rule\&. +.RE +.PP +\fBSOLVER_REASON_UPDATE_INSTALLED\fR +.RS 4 +The decision happened to fulfill a package update request\&. +.RE +.PP +\fBSOLVER_REASON_CLEANDEPS_ERASE\fR +.RS 4 +The package was erased when cleaning up dependencies from other erased packages\&. +.RE +.PP +\fBSOLVER_REASON_RESOLVE\fR +.RS 4 +The package was installed to fulfill package dependencies\&. +.RE +.PP +\fBSOLVER_REASON_WEAKDEP\fR +.RS 4 +The package was installed because of a weak dependency (Recommends or Supplements)\&. +.RE +.PP +\fBSOLVER_REASON_RESOLVE_ORPHAN\fR +.RS 4 +The decision about the package was made when deciding the fate of orphaned packages\&. +.RE +.PP +\fBSOLVER_REASON_RECOMMENDED\fR +.RS 4 +This is a special case of SOLVER_REASON_WEAKDEP\&. +.RE +.PP +\fBSOLVER_REASON_SUPPLEMENTED\fR +.RS 4 +This is a special case of SOLVER_REASON_WEAKDEP\&. +.RE .SS "ATTRIBUTES" .sp .if n \{\ @@ -3146,9 +3836,9 @@ Back pointer to pool\&. .\} .nf \fBint set_flag(int\fR \fIflag\fR\fB, int\fR \fIvalue\fR\fB)\fR -my \fI$oldvalue\fR \fB=\fR \fI$pool\fR\fB\->set_flag(\fR\fI$flag\fR\fB,\fR \fI$value\fR\fB)\fR; -\fIoldvalue\fR \fB=\fR \fIpool\fR\fB\&.set_flag(\fR\fIflag\fR\fB,\fR \fIvalue\fR\fB)\fR -\fIoldvalue\fR \fB=\fR \fIpool\fR\fB\&.set_flag(\fR\fIflag\fR\fB,\fR \fIvalue\fR\fB)\fR +my \fI$oldvalue\fR \fB=\fR \fI$solver\fR\fB\->set_flag(\fR\fI$flag\fR\fB,\fR \fI$value\fR\fB)\fR; +\fIoldvalue\fR \fB=\fR \fIsolver\fR\fB\&.set_flag(\fR\fIflag\fR\fB,\fR \fIvalue\fR\fB)\fR +\fIoldvalue\fR \fB=\fR \fIsolver\fR\fB\&.set_flag(\fR\fIflag\fR\fB,\fR \fIvalue\fR\fB)\fR .fi .if n \{\ .RE @@ -3159,9 +3849,9 @@ my \fI$oldvalue\fR \fB=\fR \fI$pool\fR\fB\->set_flag(\fR\fI$flag\fR\fB,\fR \fI$v .\} .nf \fBint get_flag(int\fR \fIflag\fR\fB)\fR -my \fI$value\fR \fB=\fR \fI$pool\fR\fB\->get_flag(\fR\fI$flag\fR\fB)\fR; -\fIvalue\fR \fB=\fR \fIpool\fR\fB\&.get_flag(\fR\fIflag\fR\fB)\fR -\fIvalue\fR \fB=\fR \fIpool\fR\fB\&.get_flag(\fR\fIflag\fR\fB)\fR +my \fI$value\fR \fB=\fR \fI$solver\fR\fB\->get_flag(\fR\fI$flag\fR\fB)\fR; +\fIvalue\fR \fB=\fR \fIsolver\fR\fB\&.get_flag(\fR\fIflag\fR\fB)\fR +\fIvalue\fR \fB=\fR \fIsolver\fR\fB\&.get_flag(\fR\fIflag\fR\fB)\fR .fi .if n \{\ .RE @@ -3173,7 +3863,7 @@ Set/get a solver specific flag\&. The flags define the policies the solver has t .RS 4 .\} .nf -\fBProblem **solve(Job *\fR\fIjobs\fR\fB)\fR +\fBProblem *solve(Job *\fR\fIjobs\fR\fB)\fR my \fI@problems\fR \fB=\fR \fI$solver\fR\fB\->solve(\e\fR\fI@jobs\fR\fB)\fR; \fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR \fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR @@ -3188,7 +3878,7 @@ Solve a problem specified in the job list (plus the jobs defined in the pool)\&. .RS 4 .\} .nf -\fBTransaction *transaction()\fR +\fBTransaction transaction()\fR my \fI$trans\fR \fB=\fR \fI$solver\fR\fB\->transaction()\fR; \fItrans\fR \fB=\fR \fIsolver\fR\fB\&.transaction()\fR \fItrans\fR \fB=\fR \fIsolver\fR\fB\&.transaction()\fR @@ -3198,6 +3888,21 @@ my \fI$trans\fR \fB=\fR \fI$solver\fR\fB\->transaction()\fR; .\} .sp Return the transaction to implement the calculated package changes\&. A transaction is available even if problems were found, this is useful for interactive user interfaces that show both the job result and the problems\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBint\fR \fIreason\fR \fB= describe_decision(Solvable *\fR\fIs\fR\fB, Rule *\fR\fIOUTPUT\fR\fB)\fR +my \fB(\fR\fI$reason\fR\fB,\fR \fI$rule\fR\fB) =\fR \fI$solver\fR\fB\->describe_decision(\fR\fI$solvable\fR\fB)\fR; +\fB(\fR\fIreason\fR\fB,\fR \fIrule\fR\fB) =\fR \fIsolver\fR\fB\&.describe_decision(\fR\fIsolvable\fR\fB)\fR +\fB(\fR\fIreason\fR\fB,\fR \fIrule\fR\fB) =\fR \fIsolver\fR\fB\&.describe_decision(\fR\fIsolvable\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +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\&. .SH "THE PROBLEM CLASS" .sp 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 the user and let him pick the ones he likes\&. @@ -3238,7 +3943,7 @@ Id of the problem\&. The first problem has Id 1, they are numbered consecutively .RS 4 .\} .nf -\fBRule *findproblemrule()\fR +\fBRule findproblemrule()\fR my \fI$probrule\fR \fB=\fR \fI$problem\fR\fB\->findproblemrule()\fR; \fIprobrule\fR \fB=\fR \fIproblem\fR\fB\&.findproblemrule()\fR \fIprobrule\fR \fB=\fR \fIproblem\fR\fB\&.findproblemrule()\fR @@ -3247,13 +3952,13 @@ my \fI$probrule\fR \fB=\fR \fI$problem\fR\fB\->findproblemrule()\fR; .RE .\} .sp -Return the rule that caused the problem\&. Of cource in most situations there is no single responsible rule, but many rules that interconnect with each created the problem\&. Nevertheless, the solver uses some heuristic approch to find a rule that somewhat describes the problem best to the user\&. +Return the rule that caused the problem\&. Of course in most situations there is no single responsible rule, but many rules that interconnect with each created the problem\&. Nevertheless, the solver uses some heuristic approach to find a rule that somewhat describes the problem best to the user\&. .sp .if n \{\ .RS 4 .\} .nf -\fBRule **findallproblemrules(bool\fR \fIunfiltered\fR \fB= 0)\fR +\fBRule *findallproblemrules(bool\fR \fIunfiltered\fR \fB= 0)\fR my \fI@probrules\fR \fB=\fR \fI$problem\fR\fB\->findallproblemrules()\fR; \fIprobrules\fR \fB=\fR \fIproblem\fR\fB\&.findallproblemrule()\fR \fIprobrules\fR \fB=\fR \fIproblem\fR\fB\&.findallproblemrule()\fR @@ -3268,7 +3973,7 @@ Return all rules responsible for the problem\&. The returned set of rules contai .RS 4 .\} .nf -\fBSolutions **solutions()\fR +\fBSolution *solutions()\fR my \fI@solutions\fR \fB=\fR \fI$problem\fR\fB\->solutions()\fR; \fIsolutions\fR \fB=\fR \fIproblem\fR\fB\&.solutions()\fR \fIsolutions\fR \fB=\fR \fIproblem\fR\fB\&.solutions()\fR @@ -3293,6 +3998,21 @@ my \fI$cnt\fR \fB=\fR \fI$problem\fR\fB\->solution_count()\fR; .\} .sp Return the number of solutions without creating solution objects\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fB\fR +my \fI$str\fR \fB=\fR \fI$problem\fR\fB\->str\fR; +\fIstr\fR \fB= str(\fR\fIproblem\fR\fB)\fR +\fIstr\fR \fB=\fR \fIproblem\fR\fB\&.to_s\fR +.fi +.if n \{\ +.RE +.\} +.sp +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\&. .SH "THE RULE CLASS" .sp Rules are the basic block of sat solving\&. Each package dependency gets translated into one or multiple rules\&. @@ -3348,7 +4068,7 @@ The basic type of the rule\&. See the constant section of the solver class for t .RS 4 .\} .nf -\fBRuleinfo *info()\fR +\fBRuleinfo info()\fR my \fI$ruleinfo\fR \fB=\fR \fI$rule\fR\fB\->info()\fR; \fIruleinfo\fR \fB=\fR \fIrule\fR\fB\&.info()\fR \fIruleinfo\fR \fB=\fR \fIrule\fR\fB\&.info()\fR @@ -3363,7 +4083,7 @@ Return a Ruleinfo object that contains information about why the rule was create .RS 4 .\} .nf -\fBRuleinfo **allinfos()\fR +\fBRuleinfo *allinfos()\fR my \fI@ruleinfos\fR \fB=\fR \fI$rule\fR\fB\->allinfos()\fR; \fIruleinfos\fR \fB=\fR \fIrule\fR\fB\&.allinfos()\fR \fIruleinfos\fR \fB=\fR \fIrule\fR\fB\&.allinfos()\fR @@ -3552,7 +4272,7 @@ Id of the solution\&. The first solution has Id 1, they are numbered consecutive .RS 4 .\} .nf -\fBSolutionelement **elements(bool\fR \fIexpandreplaces\fR \fB= 0)\fR +\fBSolutionelement *elements(bool\fR \fIexpandreplaces\fR \fB= 0)\fR my \fI@solutionelements\fR \fB=\fR \fI$solution\fR\fB\->elements()\fR; \fIsolutionelements\fR \fB=\fR \fIsolution\fR\fB\&.elements()\fR \fIsolutionelements\fR \fB=\fR \fIsolution\fR\fB\&.elements()\fR @@ -3561,7 +4281,7 @@ my \fI@solutionelements\fR \fB=\fR \fI$solution\fR\fB\->elements()\fR; .RE .\} .sp -Return an array containing the elements describing what neeeds to be done to implement the specific solution\&. If expandreplaces is true, elements of type SOLVER_SOLUTION_REPLACE will be replaced by one or more elements replace elements describing the policy mismatches\&. +Return an array containing the elements describing what needs to be done to implement the specific solution\&. If expandreplaces is true, elements of type SOLVER_SOLUTION_REPLACE will be replaced by one or more elements replace elements describing the policy mismatches\&. .sp .if n \{\ .RS 4 @@ -3707,7 +4427,7 @@ The index of the job that needs to be removed to fix the problem, or \-1 if the .RS 4 .\} .nf -\fBSolutionelement **replaceelements()\fR +\fBSolutionelement *replaceelements()\fR my \fI@solutionelements\fR \fB=\fR \fI$solutionelement\fR\fB\->replaceelements()\fR; \fIsolutionelements\fR \fB=\fR \fIsolutionelement\fR\fB\&.replaceelements()\fR \fIsolutionelements\fR \fB=\fR \fIsolutionelement\fR\fB\&.replaceelements()\fR @@ -3737,7 +4457,7 @@ Return an integer that contains the policy mismatch bits or\-ed together, or zer .RS 4 .\} .nf -\fBJob *Job()\fR +\fBJob Job()\fR my \fI$job\fR \fB=\fR \fI$solutionelement\fR\fB\->Job()\fR; \fIillegal\fR \fB=\fR \fIsolutionelement\fR\fB\&.Job()\fR \fIillegal\fR \fB=\fR \fIsolutionelement\fR\fB\&.Job()\fR @@ -3763,6 +4483,8 @@ my \fI$str\fR \fB=\fR \fI$solutionelement\fR\fB\->str()\fR; .sp A string describing the change the solution element consists of\&. .SH "THE TRANSACTION CLASS" +.sp +Transactions describe the output of a solver run\&. A transaction contains a number of transaction elements, each either the installation of a new package or the removal of an already installed package\&. The Transaction class supports a classify() method that puts the elements into different groups so that a transaction can be presented to the user in a meaningful way\&. .SS "CONSTANTS" .sp Transaction element types, both active and passive @@ -3774,7 +4496,7 @@ This element does nothing\&. Used to map element types that do not match the vie .PP \fBSOLVER_TRANSACTION_INSTALL\fR .RS 4 -This element installes a package\&. +This element installs a package\&. .RE .PP \fBSOLVER_TRANSACTION_ERASE\fR @@ -3789,7 +4511,7 @@ This element installs a package with a different version keeping the other versi .PP \fBSOLVER_TRANSACTION_MULTIREINSTALL\fR .RS 4 -This element reinstalls a installed package keeping the other versions installed\&. +This element reinstalls an installed package keeping the other versions installed\&. .RE .sp Transaction element types, active view @@ -3811,7 +4533,7 @@ This element installs a newer version of an installed package\&. .PP \fBSOLVER_TRANSACTION_DOWNGRADE\fR .RS 4 -This element installs a older version of an installed package\&. +This element installs an older version of an installed package\&. .RE .PP \fBSOLVER_TRANSACTION_OBSOLETES\fR @@ -3948,25 +4670,25 @@ Returns true if the transaction does not do anything, i\&.e\&. has no elements\& .RS 4 .\} .nf -\fBSolvable **newpackages()\fR; -my \fI@newsolvables\fR \fB=\fR \fI$trans\fR\fB\->newpackages()\fR; -\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newpackages()\fR -\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newpackages()\fR +\fBSolvable *newsolvables()\fR; +my \fI@newsolvables\fR \fB=\fR \fI$trans\fR\fB\->newsolvables()\fR; +\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newsolvables()\fR +\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newsolvables()\fR .fi .if n \{\ .RE .\} .sp -Return all packages that are to be installed by the transaction\&. This are the packages that need to be downloaded from the repositories\&. +Return all packages that are to be installed by the transaction\&. These are the packages that need to be downloaded from the repositories\&. .sp .if n \{\ .RS 4 .\} .nf -\fBSolvable **keptpackages()\fR; -my \fI@keptsolvables\fR \fB=\fR \fI$trans\fR\fB\->keptpackages()\fR; -\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptpackages()\fR -\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptpackages()\fR +\fBSolvable *keptsolvables()\fR; +my \fI@keptsolvables\fR \fB=\fR \fI$trans\fR\fB\->keptsolvables()\fR; +\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptsolvables()\fR +\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptsolvables()\fR .fi .if n \{\ .RE @@ -3978,7 +4700,7 @@ Return all installed packages that the transaction will keep installed\&. .RS 4 .\} .nf -\fBSolvable **steps()\fR; +\fBSolvable *steps()\fR; my \fI@steps\fR \fB=\fR \fI$trans\fR\fB\->steps()\fR; \fIsteps\fR \fB=\fR \fItrans\fR\fB\&.steps()\fR \fIsteps\fR \fB=\fR \fItrans\fR\fB\&.steps()\fR @@ -4008,7 +4730,7 @@ Return the transaction type of the specified solvable\&. See the CONSTANTS secti .RS 4 .\} .nf -\fBTransactionClass **classify(int\fR \fImode\fR \fB= 0)\fR +\fBTransactionClass *classify(int\fR \fImode\fR \fB= 0)\fR my \fI@classes\fR \fB=\fR \fI$trans\fR\fB\->classify()\fR; \fIclasses\fR \fB=\fR \fItrans\fR\fB\&.classify()\fR \fIclasses\fR \fB=\fR \fItrans\fR\fB\&.classify()\fR @@ -4023,7 +4745,7 @@ Group the transaction elements into classes so that they can be displayed in a s .RS 4 .\} .nf -\fBSolvable *othersolvable(Solvable *\fR\fIsolvable\fR\fB)\fR; +\fBSolvable othersolvable(Solvable *\fR\fIsolvable\fR\fB)\fR; my \fI$other\fR \fB=\fR \fI$trans\fR\fB\->othersolvable(\fR\fI$solvable\fR\fB)\fR; \fIother\fR \fB=\fR \fItrans\fR\fB\&.othersolvable(\fR\fIsolvable\fR\fB)\fR \fIother\fR \fB=\fR \fItrans\fR\fB\&.othersolvable(\fR\fIsolvable\fR\fB)\fR @@ -4042,7 +4764,7 @@ Thus, the \(lqother\(rq solvable is normally the package that is also shown for .RS 4 .\} .nf -\fBSolvable **allothersolvables(Solvable *\fR\fIsolvable\fR\fB)\fR; +\fBSolvable *allothersolvables(Solvable *\fR\fIsolvable\fR\fB)\fR; my \fI@others\fR \fB=\fR \fI$trans\fR\fB\->allothersolvables(\fR\fI$solvable\fR\fB)\fR; \fIothers\fR \fB=\fR \fItrans\fR\fB\&.allothersolvables(\fR\fIsolvable\fR\fB)\fR \fIothers\fR \fB=\fR \fItrans\fR\fB\&.allothersolvables(\fR\fIsolvable\fR\fB)\fR @@ -4081,10 +4803,10 @@ Return the size change of the installed system in kilobytes (kibibytes)\&. .RE .\} .sp -Order the steps in the transactions so that dependant packages are updated before packages that depend on them\&. For rpm, you can also use rpmlib\(cqs ordering functionality, debian\(cqs dpkg does not provide a way to order a transaction\&. +Order the steps in the transactions so that dependent packages are updated before packages that depend on them\&. For rpm, you can also use rpmlib\(cqs ordering functionality, debian\(cqs dpkg does not provide a way to order a transaction\&. .SS "ACTIVE/PASSIVE VIEW" .sp -Active view list what new packages get installed, while passive view shows what happens to the installed packages\&. Most often there\(cqs not much difference between the two modes, but things get interesting of multiple package get replaced by one new package\&. Say you have installed package A\-1\-1 and B\-1\-1, and now install A\-2\-1 with has a new dependency that obsoletes B\&. The transaction elements will be +Active view lists what new packages get installed, while passive view shows what happens to the installed packages\&. Most often there\(cqs not much difference between the two modes, but things get interesting if multiple packages get replaced by one new package\&. Say you have installed packages A\-1\-1 and B\-1\-1, and now install A\-2\-1 which has a new dependency that obsoletes B\&. The transaction elements will be .sp .if n \{\ .RS 4 @@ -4110,7 +4832,7 @@ erase B .RE .\} .sp -in active mode\&. If the mode containes SOLVER_TRANSACTION_SHOW_ALL, the passive mode list will be unchanged but the active mode list will just contain A\-2\-1\&. +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\&. .SH "THE TRANSACTIONCLASS CLASS" .sp Objects of this type are returned by the classify() Transaction method\&. @@ -4245,7 +4967,7 @@ Checksums (also called hashes) are used to make sure that downloaded data is not .RS 4 .\} .nf -\fBChksum *Chksum(Id\fR \fItype\fR\fB)\fR +\fBChksum Chksum(Id\fR \fItype\fR\fB)\fR my \fI$chksum\fR \fB= solv::Chksum\->new(\fR\fI$type\fR\fB)\fR; \fIchksum\fR \fB= solv\&.Chksum(\fR\fItype\fR\fB)\fR \fIchksum\fR \fB= Solv::Chksum\&.new(\fR\fItype\fR\fB)\fR @@ -4274,7 +4996,7 @@ These keys are constants in the \fBsolv\fR class\&. .RS 4 .\} .nf -\fBChksum *Chksum(Id\fR \fItype\fR\fB, const char *\fR\fIhex\fR\fB)\fR +\fBChksum Chksum(Id\fR \fItype\fR\fB, const char *\fR\fIhex\fR\fB)\fR my \fI$chksum\fR \fB= solv::Chksum\->new(\fR\fI$type\fR\fB,\fR \fI$hex\fR\fB)\fR; \fIchksum\fR \fB= solv\&.Chksum(\fR\fItype\fR\fB,\fR \fIhex\fR\fB)\fR \fIchksum\fR \fB= Solv::Chksum\&.new(\fR\fItype\fR\fB,\fR \fIhex\fR\fB)\fR @@ -4283,7 +5005,22 @@ my \fI$chksum\fR \fB= solv::Chksum\->new(\fR\fI$type\fR\fB,\fR \fI$hex\fR\fB)\fR .RE .\} .sp -Create an already finalized checksum object\&. +Create an already finalized checksum object from a hex string\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBChksum Chksum_from_bin(Id\fR \fItype\fR\fB, char *\fR\fIbin\fR\fB)\fR +my \fI$chksum\fR \fB= solv::Chksum\->from_bin(\fR\fI$type\fR\fB,\fR \fI$bin\fR\fB)\fR; +\fIchksum\fR \fB= solv\&.Chksum\&.from_bin(\fR\fItype\fR\fB,\fR \fIbin\fR\fB)\fR +\fIchksum\fR \fB= Solv::Chksum\&.from_bin(\fR\fItype\fR\fB,\fR \fIbin\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Create an already finalized checksum object from a binary checksum\&. .SS "ATTRIBUTES" .sp .if n \{\ @@ -4315,7 +5052,7 @@ Return the type of the checksum object\&. .RE .\} .sp -Add a string to the checksum\&. +Add a (binary) string to the checksum\&. .sp .if n \{\ .RS 4 @@ -4396,6 +5133,21 @@ Finalize the checksum and return the result as hex string\&. .RS 4 .\} .nf +\fBconst char *typestr()\fR +my \fI$typestr\fR \fB=\fR \fI$chksum\fR\fB\->typestr()\fR; +\fItypestr\fR \fB=\fR \fIchksum\fR\fB\&.typestr\fR +\fItypestr\fR \fB=\fR \fIchksum\fR\fB\&.typestr\fR +.fi +.if n \{\ +.RE +.\} +.sp +Return the type of the checksum as a string, e\&.g\&. "sha256"\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf \fB\fR \fBif (\fR\fI$chksum1\fR \fB==\fR \fI$chksum2\fR\fB)\fR \fBif\fR \fIchksum1\fR \fB==\fR \fIchksum2\fR\fB:\fR @@ -4453,7 +5205,7 @@ my \fI$file\fR \fB= solv::xfopen_fd(\fR\fI$path\fR\fB,\fR \fI$fileno\fR\fB)\fR; .RE .\} .sp -Create a file handle from the specified file descriptor\&. The path argument is only used to select the correct (de\-)compression algorithm, use an empty path if you want to make sure to read/write raw data\&. +Create a file handle from the specified file descriptor\&. The path argument is only used to select the correct (de\-)compression algorithm, use an empty path if you want to make sure to read/write raw data\&. The file descriptor is dup()ed before the file handle is created\&. .SS "METHODS" .sp .if n \{\ @@ -4475,6 +5227,21 @@ Return file file descriptor of the file\&. If the file is not open, \-1 is retur .RS 4 .\} .nf +\fBvoid cloexec(bool\fR \fIstate\fR\fB)\fR +\fI$file\fR\fB\->cloexec(\fR\fI$state\fR\fB)\fR +\fIfile\fR\fB\&.cloexec(\fR\fIstate\fR\fB)\fR +\fIfile\fR\fB\&.cloexec(\fR\fIstate\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +Set the close\-on\-exec flag of the file descriptor\&. The xfopen function returns files with close\-on\-exec turned on, so if you want to pass a file to some other process you need to call cloexec(0) before calling exec\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf \fBint dup()\fR my \fI$fileno\fR \fB=\fR \fI$file\fR\fB\->dup()\fR; \fIfileno\fR \fB=\fR \fIfile\fR\fB\&.dup()\fR @@ -4514,10 +5281,10 @@ Flush the file\&. Returns false if there was an error\&. Flushing a closed file .RE .\} .sp -Close the file\&. This is needed for languages like Ruby, that do not destruct objects right after they are no longer referenced\&. In that case, it is good style to close open files so that the file descriptors are freed right away\&. Returns false if there was an error\&. +Close the file\&. This is needed for languages like Ruby that do not destruct objects right after they are no longer referenced\&. In that case, it is good style to close open files so that the file descriptors are freed right away\&. Returns false if there was an error\&. .SH "THE REPODATA CLASS" .sp -The Repodata stores attrinbutes for packages and the repository itself, each repository can have multiple repodata areas\&. You normally only need to directly access them if you implement lazy downloading of repository data\&. Repodata areas are created by calling the repository\(cqs add_repodata() method or by using repo_add methods without the REPO_REUSE_REPODATA or REPO_USE_LOADING flag\&. +The Repodata stores attributes for packages and the repository itself, each repository can have multiple repodata areas\&. You normally only need to directly access them if you implement lazy downloading of repository data\&. Repodata areas are created by calling the repository\(cqs add_repodata() method or by using repo_add methods without the REPO_REUSE_REPODATA or REPO_USE_LOADING flag\&. .SS "ATTRIBUTES" .sp .if n \{\ @@ -4549,7 +5316,7 @@ Back pointer to repository object\&. .\} .sp The id of the repodata area\&. Repodata ids of different repositories overlap\&. -.SS "METHODS ====" +.SS "METHODS" .sp .if n \{\ .RS 4 @@ -4672,7 +5439,7 @@ my \fI@ids\fR \fB=\fR \fI$data\fR\fB\->lookup_idarray(\fR\fI$solvid\fR\fB,\fR \f .RS 4 .\} .nf -\fBChksum *lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR +\fBChksum lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR my \fI$chksum\fR \fB=\fR \fI$data\fR\fB\->lookup_checksum(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB)\fR; \fIchksum\fR \fB=\fR \fIdata\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR \fIchksum\fR \fB=\fR \fIdata\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR @@ -4681,7 +5448,7 @@ my \fI$chksum\fR \fB=\fR \fI$data\fR\fB\->lookup_checksum(\fR\fI$solvid\fR\fB,\f .RE .\} .sp -Lookup functions\&. Return the data element stored in the specified solvable\&. The methods probably only make sense to retrive data from the special SOLVID_META solvid that stores repodata meta information\&. +Lookup functions\&. Return the data element stored in the specified solvable\&. The methods probably only make sense to retrieve data from the special SOLVID_META solvid that stores repodata meta information\&. .SS "DATA STORAGE METHODS" .sp .if n \{\ @@ -4778,7 +5545,7 @@ my \fI$handle\fR \fB=\fR \fI$data\fR\fB\->new_handle()\fR; Data storage methods\&. Probably only useful to store data in the special SOLVID_META solvid that stores repodata meta information\&. Note that repodata areas can have their own Id pool (see the REPO_LOCALPOOL flag), so be careful if you need to store ids\&. Arrays are created by calling the add function for every element\&. A flexarray is an array of sub\-structures, call new_handle to create a new structure, use the handle as solvid to fill the structure with data and call add_flexarray to put the structure in an array\&. .SH "THE DATAPOS CLASS" .sp -Datapos objects describe a specific position in the repository data area\&. Thus they are only valid until the repository is modified in some way\&. Datapos objects can be created by the pos() and parentpos() methods of a Datamatch object or by accesing the \(lqmeta\(rq attribute of a repository\&. +Datapos objects describe a specific position in the repository data area\&. Thus they are only valid until the repository is modified in some way\&. Datapos objects can be created by the pos() and parentpos() methods of a Datamatch object or by accessing the \(lqmeta\(rq attribute of a repository\&. .SS "ATTRIBUTES" .sp .if n \{\ @@ -4899,7 +5666,7 @@ my \fI$bool\fR \fB=\fR \fI$datapos\fR\fB\->lookup_void(\fR\fI$keyname\fR\fB)\fR; .RS 4 .\} .nf -\fBQueue lookup_idarray(Id\fR \fIkeyname\fR\fB)\fR +\fBId *lookup_idarray(Id\fR \fIkeyname\fR\fB)\fR my \fI@ids\fR \fB=\fR \fI$datapos\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\fR; \fIids\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR \fIids\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR @@ -4912,7 +5679,7 @@ my \fI@ids\fR \fB=\fR \fI$datapos\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\f .RS 4 .\} .nf -\fBChksum *lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR +\fBChksum lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR my \fI$chksum\fR \fB=\fR \fI$datapos\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\fB)\fR; \fIchksum\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR \fIchksum\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR @@ -4922,6 +5689,33 @@ my \fI$chksum\fR \fB=\fR \fI$datapos\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\f .\} .sp 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\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBDataiterator Dataiterator(Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR \fB= 0, int\fR \fIflags\fR \fB= 0)\fR +my \fI$di\fR \fB=\fR \fI$datapos\fR\fB\->Dataiterator(\fR\fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR; +\fIdi\fR \fB=\fR \fIdatapos\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +\fIdi\fR \fB=\fR \fIdatapos\fR\fB\&.Dataiterator(\fR\fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +\fBfor my\fR \fI$d\fR \fB(\fR\fI@$di\fR\fB)\fR +\fBfor\fR \fId\fR \fBin\fR \fIdi\fR\fB:\fR +\fBfor\fR \fId\fR \fBin\fR \fIdi\fR +.fi +.if n \{\ +.RE +.\} +.sp +Iterate over the matching data elements\&. See the Dataiterator class for more information\&. .SH "AUTHOR" .sp Michael Schroeder