9 libsolv-bindings - access libsolv from perl/python/ruby
14 Libsolv's language bindings offer an abstract, object orientated interface
15 to the library. The supported languages are currently perl, python, and ruby.
16 All example code (except in the specifics sections, of course) lists first
17 the ``C-ish'' interface, then the syntax for perl, python, and ruby (in that
23 Libsolv's perl bindings can be loaded with the following statement:
27 Objects are either created by calling the new() method on a class or they
28 are returned by calling methods on other objects.
30 my $pool = solv::Pool->new();
31 my $repo = $pool->add_repo("my_first_repo");
33 Swig encapsulates all objects as tied hashes, thus the attributes can be
34 accessed by treating the object as standard hash reference:
36 $pool->{appdata} = 42;
37 printf "appdata is %d\n", $pool->{appdata};
39 An special exception to this are iterator objects, they are encapsulated as
40 tied arrays so that it is possible to iterate with a for() statement:
42 my $iter = $pool->solvables_iter();
43 for my $solvable (@$iter) { ... };
45 As a downside of this approach, iterator objects can have no attributes.
47 If an array needs to be passwd to a method it is usually done by reference,
48 if a method returns an array it returns it on the stack:
50 my @problems = $solver->solve(\@jobs);
52 Due to a bug in swig, stringification does not work for libsolv's object.
53 Instead you have to call the object's str() method.
55 print $dep->str() . "\n";
57 Swig implements all constants as numeric variables (instead of the more
58 natural constant subs), so don't forget the leading ``$'' when accessing a
59 constant. Also do not forget to prepend the namespace of the constant:
61 $pool->set_flag($solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1);
66 The python bindings can be loaded with:
70 Objects are either created by calling the constructor method for a class or they
71 are returned by calling methods on other objects.
74 repo = pool.add_repo("my_first_repo")
76 Attributes can be accessed as usual:
79 print "appdata is %d" % (pool.appdata)
81 Iterators also work as expected:
83 for solvable in pool.solvables_iter():
85 Arrays are passed an returned as list objects:
88 problems = solver.solve(jobs)
90 The bindings define stringification for many classes, some also have a
91 __repr__ method to ease debugging.
96 Constants are attributes of the classes:
98 pool.set_flag(solv.Pool.POOL_FLAG_OBSOLETEUSESCOLORS, 1);
103 The ruby bindings can be loaded with:
107 Objects are either created by calling the new method on a class or they
108 are returned by calling methods on other objects. Note that all classes start
109 with an uppercase letter in ruby, so the class is called ``Solv''.
111 pool = Solv::Pool.new
112 repo = pool.add_repo("my_first_repo")
114 Attributes can be accessed as usual:
117 puts "appdata is #{pool.appdata}"
119 Iterators also work as expected:
121 for solvable in pool.solvables_iter() do ...
123 Arrays are passed an returned as array objects:
126 problems = solver.solve(jobs)
128 Most classes define a to_s method, so objects can be easily stringified.
129 Many also define an inspect() method.
134 Constants live in the namespace of the class they belong to:
136 pool.set_flag(Solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1);
138 Note that boolean methods have an added trailing ``?'', to be consistent with
141 puts "empty repo" if repo.isempty?
146 This is the main namespace of the library, you cannot create objects of this
147 type but it contains some useful constants.
151 Relational flag constants, the first three can be or-ed together
154 the ``less than'' bit
157 the ``equals to'' bit
160 the ``greater then'' bit
163 used for relations that describe an extra architecture filter, the
164 version part of the relation is interpreted as architecture.
169 Access the meta section of a repository or repodata area. This is
170 like an extra Solvable that has the Id SOLVID_META.
173 Use the data position stored inside of the pool instead of accessing
174 some solvable by Id. The bindings have the Datapos objects as an
175 abstraction mechanism, so you do not need this constant.
183 Always one, describes the empty string
186 The keyname Id of the name of the solvable.
189 see the libsolv-constantids manpage for a list of fixed Ids.
194 The pool is libsolv's central resource manager. A pool consists of Solvables,
195 Repositories, Dependencies, each indexed by Ids.
197 === CLASS METHODS ===
200 my $pool = solv::Pool->new();
202 pool = Solv::Pool.new()
204 Create a new pool instance. In most cases you just need
209 void *appdata; /* read/write */
214 Application specific data that may be used in any way by the code using the
217 Solvable solvables[]; /* read only */
218 my $solvable = $pool->{solvables}->[$solvid];
219 solvable = pool.solvables[solvid]
220 solvable = pool.solvables[solvid]
222 Look up a Solvable by its id.
224 Repo repos[]; /* read only */
225 my $repo = $pool->{repos}->[$repoid];
226 repo = pool.repos[repoid]
227 repo = pool.repos[repoid]
229 Look up a Repository by its id.
231 Repo *installed; /* read/write */
232 $pool->{installed} = $repo;
233 pool.installed = repo
234 pool.installed = repo
236 Define which repository contains all the installed packages.
240 *POOL_FLAG_PROMOTEEPOCH*::
241 Promote the epoch of the providing dependency to the requesting
242 dependency if it does not contain an epoch. Used at some time
243 in old rpm versions, modern systems should never need this.
245 *POOL_FLAG_FORBIDSELFCONFLICTS*::
246 Disallow the installation of packages that conflict with themselfs.
247 Debian always allowd self-conflicting packages, rpm used to forbid
248 them but switched to also allowing them recently.
250 *POOL_FLAG_OBSOLETEUSESPROVIDES*::
251 Make obsolete type dependency match against provides instead of
252 just the name and version of packages. Very old versions of rpm
253 used the name/version, then it got switched to provides and later
254 switched back again to just name/version.
256 *POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES*::
257 An implicit obsoletes is the internal mechanism to remove the
258 old package on an update. The default is to remove all packages
259 with the same name, rpm-5 switched to also removing packages
260 providing the same name.
262 *POOL_FLAG_OBSOLETEUSESCOLORS*::
263 Rpm's multilib implementation (used in RedHat and Fedora)
264 distinguishes between 32bit and 64bit packages (the terminology
265 is that they have a different color). If obsolteusescolors is
266 set, packages with different colors will not obsolete each other.
268 *POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS*::
269 Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if
270 packages of the same name can be installed in parallel. For
271 current Fedora systems, POOL_FLAG_OBSOLETEUSESCOLORS should be
272 false and POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS should be true
273 (this is the default if FEDORA is defined when libsolv is
276 *POOL_FLAG_NOINSTALLEDOBSOLETES*::
277 New versions of rpm consider the obsoletes of installed packages
278 when checking for dependency, thus you may not install a package
279 that is obsoleted by some other installed package, unless you
280 also deinstall the other package.
282 *POOL_FLAG_HAVEDISTEPOCH*::
283 Mandriva added a new field called distepoch that gets checked in
284 version comparison if the epoch/version/release of two packages
287 *POOL_FLAG_NOOBSOLETESMULTIVERSION*::
288 If a package is installed in multiversionmode, rpm used to ignore
289 both the implicit obsoletes and the obsolete dependency of a
290 package. This was changed to ignoring just the implicit obsoletes,
291 thus you may install multiple versions of the same name, but
292 obsoleted packages still get removed.
294 *POOL_FLAG_ADDFILEPROVIDESFILTERED*::
295 Make the addfileprovides method only add files from the standard
296 locations (i.e. the ``bin'' and ``etc'' directories). This is
297 useful if you have only few packages that use non-standard file
298 dependencies, but you still wand the fast speed that addfileprovides()
308 Free a pool. This is currently done with a method instead of relying on
309 reference counting or garbage collection because it's hard to track every
312 void setdebuglevel(int level)
313 $pool->setdebuglevel($level);
314 pool.setdebuglevel(level)
315 pool.setdebuglevel(level)
317 Set the debug level. A value of zero means no debug output, the higher the
318 value, the more output is generated.
320 int set_flag(int flag, int value)
321 my $oldvalue = $pool->set_flag($flag, $value);
322 oldvalue = pool.set_flag(flag, value)
323 oldvalue = pool.set_flag(flag, value)
325 int get_flag(int flag)
326 my $value = $pool->get_flag($flag);
327 value = pool.get_flag(flag)
328 value = pool.get_flag(flag)
330 Set/get a pool specific flag. The flags define how the system works, e.g. how
331 the package manager treats obsoletes. The default flags should be sane for most
332 applications, but in some cases you may want to tweak a flag, for example if
333 you want to solv package dependencies for some other system than yours.
335 void set_rootdir(const char *rootdir)
336 $pool->set_rootdir(rootdir);
337 pool.set_rootdir(rootdir)
338 pool.set_rootdir(rootdir)
340 const char *get_rootdir()
341 my $rootdir = $pool->get_rootdir();
342 rootdir = pool.get_rootdir()
343 rootdir = pool.get_rootdir()
345 Set/get the rootdir to use. This is useful if you want package management
346 to work only in some directory, for example if you want to setup a chroot
347 jail. Note that the rootdir will only be prepended to file paths if the
348 *REPO_USE_ROOTDIR* flag is used.
350 void setarch(const char *arch = 0)
355 Set the architecture for your system. The architecture is used to determine
356 which packages are installable. It defaults to the result of ``uname -m''.
358 Repo add_repo(const char *name)
359 $repo = $pool->add_repo($name);
360 repo = pool.add_repo(name)
361 repo = pool.add_repo(name)
363 Add a Repository with the specified name to the pool. The reposiory is empty
364 on creation, use the repository methods to populate it with packages.
366 Repoiterator repos_iter()
367 for my $repo (@{$pool->repos_iter()})
368 for repo in pool.repos_iter():
369 for repo in pool.repos_iter()
371 Iterate over the existing repositories.
373 Solvableiterator solvables_iter()
374 for my $solvable (@{$pool->solvables_iter()})
375 for solvable in pool.solvables_iter():
376 for solvable in pool.solvables_iter()
378 Iterate over the existing solvables.
380 Dep Dep(const char *str, bool create = 1)
381 my $dep = $pool->Dep($string);
382 dep = pool.Dep(string)
383 dep = pool.Dep(string)
385 Create an object describing a string or dependency. If the string is currently
386 not in the pool and _create_ is false, *undef*/*None*/*nil* is returned.
388 void addfileprovides()
389 $pool->addfileprovides();
390 pool.addfileprovides()
391 pool.addfileprovides()
393 Id *addfileprovides_queue()
394 my @ids = $pool->addfileprovides_queue();
395 ids = pool.addfileprovides_queue()
396 ids = pool.addfileprovides_queue()
398 Some package managers like rpm allow dependencies on files contained in other
399 packages. To allow libsolv to deal with those dependencies in an efficient way,
400 you need to call the addfileprovides method after creating and reading all
401 repositories. This method will scan all dependency for file names and than scan
402 all packages for matching files. If a filename has been matched, it will be
403 added to the provides list of the corresponding package. The
404 addfileprovides_queue variant works the same way but returns an array
405 containing all file dependencies. This information can be stored in the
406 meta section of the repositories to speed up the next time the
407 repository is loaded and addfileprovides is called.
409 void createwhatprovides()
410 $pool->createwhatprovides();
411 pool.createwhatprovides()
412 pool.createwhatprovides()
414 Create the internal ``whatprovides'' hash over all of the provides of all
415 packages. This method must be called before doing any lookups on provides.
416 It's encuraged to do it right after all repos are set up, usually right after
417 the call to addfileprovides().
419 Solvable *whatprovides(DepId dep)
420 my @solvables = $pool->whatprovides($dep);
421 solvables = pool.whatprovides(dep)
422 solvables = pool.whatprovides(dep)
424 Return all solvables that provide the specified dependency. You can use either
425 a Dep object or an simple Id as argument.
427 Id *matchprovidingids(const char *match, int flags)
428 my @ids = $pool->matchprovidingids($match, $flags);
429 ids = pool.matchprovidingids(match, flags)
430 ids = pool.matchprovidingids(match, flags)
432 Search the names of all provides and return the ones matching the specified
433 string. See the Dataiterator class for the allowed flags.
435 Id towhatprovides(Id *ids)
436 my $offset = $pool->towhatprovides(\@ids);
437 offset = pool.towhatprovides(ids)
438 offset = pool.towhatprovides(ids)
440 ``Internalize'' an array containing Ids. The returned value can be used to
441 create solver jobs working on a specific set of packages. See the Solver class
442 for more information.
444 bool isknownarch(DepId id)
445 my $bool = $pool->isknownarch($id);
446 bool = pool.isknownarch(id)
447 bool = pool.isknownarch?(id)
449 Return true if the specified Id describs a known architecture.
452 my $solver = $pool->Solver();
453 solver = pool.Solver()
454 solver = pool.Solver()
456 Create a new solver object.
458 Job Job(int how, Id what)
459 my $job = $pool->Job($how, $what);
460 job = pool.Job(how, what)
461 job = pool.Job(how, what)
463 Create a new Job object. Kind of low level, in most cases you would use a
464 Selection or Dep job constructor instead.
466 Selection Selection()
467 my $sel = $pool->Selection();
468 sel = pool.Selection()
469 sel = pool.Selection()
471 Create an empty selection. Useful as a starting point for merging other
474 Selection Selection_all()
475 my $sel = $pool->Selection_all();
476 sel = pool.Selection_all()
477 sel = pool.Selection_all()
479 Create a selection containing all packages. Useful as starting point for
480 intersecting other selections or for update/distupgrade jobs.
482 Selection select(const char *name, int flags)
483 my $sel = $pool->select($name, $flags);
484 sel = pool.select(name, flags)
485 sel = pool.select(name, flags)
487 Create a selection by matching packages against the specified string. See the
488 Selection class for a list of flags and how to create solver jobs from a
491 void setpooljobs(Jobs *jobs)
492 $pool->setpooljobs(\@jobs);
493 pool.setpooljobs(jobs)
494 pool.setpooljobs(jobs)
497 @jobs = $pool->getpooljobs();
498 jobs = pool.getpooljobs()
499 jobs = pool.getpooljobs()
501 Get/Set fixed jobs stored in the pool. Those jobs are automatically appended to
502 all solver jobs, they are meant for fixed configurations like which packages
503 can be multiversion installed, which packages were userinstalled or must not be
506 void set_loadcallback(Callable *callback)
507 $pool->setloadcallback(\&callbackfunction);
508 pool.setloadcallback(callbackfunction)
509 pool.setloadcallback { |repodata| ... }
511 Set the callback function called when repository metadata needs to be loaded on
512 demand. To make use of this feature, you need to create repodata stubs that
513 tell the library which data is available but not loaded. If later on the data
514 needs to be accessed, the callback function is called with a repodata argument.
515 You can then load the data (maybe fetching it first from an remote server).
516 The callback should return true if the data has been made available.
518 === DATA RETRIEVAL METHODS ===
520 In the following functions, the _keyname_ argument describes what to retrive.
521 For the standard cases you can use the available Id constants. For example,
523 $solv::SOLVABLE_SUMMARY
524 solv.SOLVABLE_SUMMARY
525 Solv::SOLVABLE_SUMMARY
527 selects the ``Summary'' entry of a solvable. The _solvid_ argument selects the
528 desired solvable by Id.
530 const char *lookup_str(Id solvid, Id keyname)
531 my $string = $pool->lookup_str($solvid, $keyname);
532 string = pool.lookup_str(solvid, keyname)
533 string = pool.lookup_str(solvid, keyname)
535 Id lookup_id(Id solvid, Id keyname)
536 my $id = $pool->lookup_id($solvid, $keyname);
537 id = pool.lookup_id(solvid, keyname)
538 id = pool.lookup_id(solvid, keyname)
540 unsigned long long lookup_num(Id solvid, Id keyname, unsigned long long notfound = 0)
541 my $num = $pool->lookup_num($solvid, $keyname);
542 num = pool.lookup_num(solvid, keyname)
543 num = pool.lookup_num(solvid, keyname)
545 bool lookup_void(Id solvid, Id keyname)
546 my $bool = $pool->lookup_void($solvid, $keyname);
547 bool = pool.lookup_void(solvid, keyname)
548 bool = pool.lookup_void(solvid, keyname)
550 Id *lookup_idarray(Id solvid, Id keyname)
551 my @ids = $pool->lookup_idarray($solvid, $keyname);
552 ids = pool.lookup_idarray(solvid, keyname)
553 ids = pool.lookup_idarray(solvid, keyname)
555 Chksum lookup_checksum(Id solvid, Id keyname)
556 my $chksum = $pool->lookup_checksum($solvid, $keyname);
557 chksum = pool.lookup_checksum(solvid, keyname)
558 chksum = pool.lookup_checksum(solvid, keyname)
560 Lookup functions. Return the data element stored in the specified solvable.
561 You should probably use the methods of the Solvable class instead.
563 Dataiterator Dataiterator(Id solvid, Id keyname, const char *match, int flags)
564 my $di = $pool->Dataiterator($solvid, $keyname, $match, $flags);
565 di = pool.Dataiterator(solvid, keyname, match, flags)
566 di = pool.Dataiterator(solvid, keyname, match, flags)
572 Iterate over the matching data elements. See the Dataiterator class for more
577 The following methods deal with Ids, i.e. integers representing objects in the
578 pool. They are considered ``low level'', in most cases you would not use them
579 but instead the object orientated methods.
582 $repo = $pool->id2repo($id);
583 repo = pool.id2repo(id)
584 repo = pool.id2repo(id)
586 Lookup an existing Repository by id. You can also do this by using the *repos*
589 Solvable id2solvable(Id id)
590 $solvable = $pool->id2solvable($id);
591 solvable = pool.id2solvable(id)
592 solvable = pool.id2solvable(id)
594 Lookup an existing Repository by id. You can also do this by using the
595 *solvables* attribute.
597 const char *solvid2str(Id id)
598 my $str = $pool->solvid2str($id);
599 str = pool.solvid2str(id)
600 str = pool.solvid2str(id)
602 Return a string describing the Solvable with the specified id. The string
603 consists of the name, version, and architecture of the Solvable.
605 Id str2id(const char *str, bool create = 1)
606 my $id = pool->str2id($string);
607 id = pool.str2id(string)
608 id = pool.str2id(string)
610 const char *id2str(Id id)
611 $string = pool->id2str($id);
612 string = pool.id2str(id)
613 string = pool.id2str(id)
615 Convert a string into an Id and back. If the string is currently not in the
616 pool and _create_ is false, zero is returned.
618 Id rel2id(Id name, Id evr, int flags, bool create = 1)
619 my $id = pool->rel2id($nameid, $evrid, $flags);
620 id = pool.rel2id(nameid, evrid, flags)
621 id = pool.rel2id(nameid, evrid, flags)
623 Create a ``relational'' dependency. Such dependencies consist of a name part,
624 the _flags_ describing the relation, and a version part. The flags are:
626 $solv::REL_EQ | $solv::REL_GT | $solv::REL_LT
627 solv.REL_EQ | solv.REL_GT | solv.REL_LT
628 Solv::REL_EQ | Solv::REL_GT | Solv::REL_LT
630 Thus, if you want a ``\<='' relation, you would use *REL_LT | REL_EQ*.
632 Id id2langid(Id id, const char *lang, bool create = 1)
633 my $id = $pool->id2langid($id, $language);
634 id = pool.id2langid(id, language)
635 id = pool.id2langid(id, language)
637 Create a language specific Id from some other id. This function simply converts
638 the id into a string, appends a dot and the specified language to the string
639 and converts the result back into an Id.
641 const char *dep2str(Id id)
642 $string = pool->dep2str($id);
643 string = pool.dep2str(id)
644 string = pool.dep2str(id)
646 Convert a dependency id into a string. If the id is just a string, this
647 function has the same effect as id2str(). For relational dependencies, the
648 result is the correct ``name relation evr'' string.
653 The dependency class is an object orientated way to work with strings and
654 dependencies. Internally, dependencies are represented as Ids, i.e. simple
655 numbers. Dependency objects can be constructed by using the Pool's Dep()
660 Pool *pool; /* read only */
665 Back reference to the pool this dependency belongs to.
667 Id id; /* read only */
672 The id of this dependency.
676 Dep Rel(int flags, DepId evrid, bool create = 1)
677 my $reldep = $dep->Rel($flags, $evrdep);
678 reldep = dep.Rel(flags, evrdep)
679 reldep = dep.Rel(flags, evrdep)
681 Create a relational dependency from to string dependencies and a flags
682 argument. See the pool's rel2id method for a description of the flags.
684 Selection Selection_name(int setflags = 0)
685 my $sel = $dep->Selection_name();
686 sel = dep.Selection_name()
687 sel = dep.Selection_name()
689 Create a Selection from a dependency. The selection consists of all packages
690 that have a name equal to the dependency. If the dependency is of a relational
691 type, the packages version must also fulfill the dependency.
693 Selection Selection_provides(int setflags = 0)
694 my $sel = $dep->Selection_provides();
695 sel = dep.Selection_provides()
696 sel = dep.Selection_provides()
698 Create a Selection from a dependency. The selection consists of all packages
699 that have at least one provides matching the dependency.
702 my $str = $dep->str();
706 Return a string describing the dependency.
713 Same as calling the str() method.
720 The dependencies are equal if they are part of the same pool and have the same
726 A Repository describes a group of packages, normally comming from the same
727 source. Repositories are created by the Pool's add_repo() method.
731 Pool *pool; /* read only */
736 Back reference to the pool this dependency belongs to.
738 Id id; /* read only */
743 The id of the repository.
745 const char *name; /* read/write */
750 The repositories name. To libsolv, the name is just a string with no specific
753 int prioprity; /* read/write */
758 The priority of the repository. A higher number means that packages of this
759 repository will be chosen over other repositories, even if they have a greater
762 int subprioprity; /* read/write */
767 The sub-priority of the repository. This value is compared when the priorities
768 of two repositories are the same. It is useful to make the library prefer
769 on-disk repositories to remote ones.
771 int nsolvables; /* read only */
776 The number of solvables in this repository.
778 void *appdata; /* read/write */
783 Application specific data that may be used in any way by the code using the
786 Datapos *meta; /* read only */
791 Return a Datapos object of the repodata's metadata. You can use the lookup
792 methods of the Datapos class to lookup metadata attributes, like the repository
797 *REPO_REUSE_REPODATA*::
798 Reuse the last repository data aera (``repodata'') instead of creating a new
801 *REPO_NO_INTERNALIZE*::
802 Do not internalize the added repository data. This is useful if
803 you plan to add more data because internalization is a costly
807 Use the repodata's pool for Id storage instead of the global pool. Useful
808 if you don't want to pollute the global pool with many unneeded ids, like
809 when storing the filelist.
812 Use the repodata that is currently being loaded instead of creating a new one.
813 This only makes sense if used in a load callback.
815 *REPO_EXTEND_SOLVABLES*::
816 Do not create new solvables for the new data, but match existing solvables and
817 add the data to them. Repository metadata is often split into multiple parts,
818 with one primary file describing all packages and other parts holding
819 information that is normally not needed, like the changelog.
822 Prepend the pool's rootdir to the path when doing file operations.
825 Do not add a location element to the solvables. Useful if the solvables are
826 not in the final position, so you can add the correct location later in your code.
828 *SOLV_ADD_NO_STUBS*::
829 Do not create stubs for repository parts that can be downloaded on demand.
831 *SUSETAGS_RECORD_SHARES*::
832 This is specific to the add_susetags() method. Susetags allows to refer to already
833 read packages to save disk space. If this data sharing needs to work over multiple
834 calls to add_susetags, you need to specify this flag so that the share information
835 is made available to subsequent calls.
839 void free(bool reuseids = 0)
844 Free the repository and all solvables it contains. If _reuseids_ is set to
845 true, the solvable ids and the repository id may be reused by the library when
846 added new solvables. Thus you should leave it false if you are not sure that
847 somebody holds a reference.
849 void empty(bool reuseids = 0)
854 Free all the solvables in a repository. The repository will be empty after this
855 call. See the free() method for the meaning of _reuseids_.
862 Return true if there are no solvables in this repository.
865 $repo->internalize();
869 Internalize added data. Data must be internalized before it is available to the
870 lookup and data iterator functions.
877 Write a repo as a ``solv'' file. These files can be read very fast and thus are
878 a good way to cache repository data. Returns false if there was some error
881 Solvableiterator solvables_iter()
882 for my $solvable (@{$repo->solvables_iter()})
883 for solvable in repo.solvables_iter():
884 for solvable in repo.solvables_iter()
886 Iterate over all solvables in a repository.
888 Repodata add_repodata(int flags = 0)
889 my $repodata = $repo->add_repodata();
890 repodata = repo.add_repodata()
891 repodata = repo.add_repodata()
893 Add a new repodata area to the repository. This is normally automatically
894 done by the repo_add methods, so you need this method only in very
898 $repo->create_stubs();
902 Calls the create_stubs() repodata method for the last repodata of the
906 $repo->iscontiguous()
910 Return true if the solvables of this repository are all in a single block with
911 no holes, i.e. they have consecutive ids.
913 Repodata first_repodata()
914 my $repodata = $repo->first_repodata();
915 repodata = repo.first_repodata()
916 repodata = repo.first_repodata()
918 Checks if all repodatas but the first repodata are extensions, and return the
919 first repodata if this is the case. Useful if you want to do a store/retrive
920 sequence on the repository to reduce the memory using and enable paging, as
921 this does not work if the rpository contains multiple non-extension repodata
924 Selection Selection(int setflags = 0)
925 my $sel = $repo->Selection();
926 sel = repo.Selection()
927 sel = repo.Selection()
929 Create a Selection consisting of all packages in the repository.
931 Dataiterator Dataiterator(Id p, Id key, const char *match, int flags)
932 my $di = $repo->Dataiterator($solvid, $keyname, $match, $flags);
933 di = repo.Dataiterator(solvid, keyname, match, flags)
934 di = repo.Dataiterator(solvid, keyname, match, flags)
940 Iterate over the matching data elements in this repository. See the
941 Dataiterator class for more information.
944 my $str = $repo->str;
948 Return the name of the repository, or "Repo#<id>" if no name is set.
951 if ($repo1 == $repo2)
955 Two repositories are equal if they belong to the same pool and have the same id.
957 === DATA ADD METHODS ===
959 Solvable add_solvable()
960 $repo->add_solvable();
964 Add a single empty solvable to the repository. Returns a Solvable object, see
965 the Solvable class for more information.
967 bool add_solv(const char *name, int flags = 0)
968 $repo->add_solv($name, $flags);
969 repo.add_solv(name, flags)
970 repo.add_solv(name, flags)
972 bool add_solv(FILE *fp, int flags = 0)
973 $repo->add_solv($fp, $flags);
974 repo.add_solv(fp, flags)
975 repo.add_solv(fp, flags)
977 Read a ``solv'' file and add its contents to the repository. These files can be
978 written with the write() method and are normally used as fast cache for
981 bool add_rpmdb(int flags = 0)
982 $repo->add_rpmdb($flags);
983 repo.add_rpmdb(flags)
984 repo.add_rpmdb(flags)
986 bool add_rpmdb_reffp(FILE *reffp, int flags = 0)
987 $repo->add_rpmdb_reffp($reffp, $flags);
988 repo.add_rpmdb_reffp($reffp, flags)
989 repo.add_rpmdb_reffp($reffp, flags)
991 Add the contents of the rpm database to the repository. If a solv file
992 containing an old version of the database is available, it can be passed as
993 reffp to speed up reading.
995 bool add_rpm(const char *name, int flags = 0)
996 $repo->add_rpm($name, $flags);
997 repo.add_rpm(name, flags)
998 repo.add_rpm(name, flags)
1000 Add the metadata of a single rpm package to the repository.
1002 bool add_rpmdb_pubkeys(int flags = 0)
1003 $repo->add_rpmdb_pubkeys();
1004 repo.add_rpmdb_pubkeys()
1005 repo.add_rpmdb_pubkeys()
1007 Add all pubkeys contained in the rpm database to the repository. Note that
1008 newer rpm versions also allow to store the pubkeys in some directory instead
1009 of the rpm database.
1011 bool add_pubkey(const char *keyfile, int flags = 0)
1012 $repo->add_pubkey($keyfile);
1013 repo.add_pubkey($keyfile)
1014 repo.add_pubkey($keyfile)
1016 Add a pubkey from a file to the repository.
1018 bool add_rpmmd(FILE *fp, const char *language, int flags = 0)
1019 $repo->add_rpmmd($fp, $language);
1020 repo.add_rpmmd(fp, language)
1021 repo.add_rpmmd(fp, language)
1023 Add metadata stored in the "rpm-md" format (i.e. from files in the ``repodata''
1024 directory) to a repository. Supported files are "primary", "filelists",
1025 "other", "suseinfo". Do not forget to specify the *REPO_EXTEND_SOLVABLES* for
1026 extension files like "filelists" and "other". Use the _language_ parameter if
1027 you have language extension files, otherwise simply use a *undef*/*None*/*nil*
1030 bool add_repomdxml(FILE *fp, int flags = 0)
1031 $repo->add_repomdxml($fp);
1032 repo.add_repomdxml(fp)
1033 repo.add_repomdxml(fp)
1035 Add the repomd.xml meta description from the "rpm-md" format to the repository.
1036 This file contains information about the repository like keywords, and also a
1037 list of all database files with checksums. The data is added the the "meta"
1038 section of the repository, i.e. no package gets created.
1040 bool add_updateinfoxml(FILE *fp, int flags = 0)
1041 $repo->add_updateinfoxml($fp);
1042 repo.add_updateinfoxml(fp)
1043 repo.add_updateinfoxml(fp)
1045 Add the updateinfo.xml file containing available maintenance updates to the
1046 repository. All updates are created as special packages that have a "patch:"
1047 prefix in their name.
1049 bool add_deltainfoxml(FILE *fp, int flags = 0)
1050 $repo->add_deltainfoxml($fp);
1051 repo.add_deltainfoxml(fp)
1052 repo.add_deltainfoxml(fp)
1054 Add the deltainfo.xml file (also called prestodelta.xml) containing available
1055 delta-rpms to the repository. The data is added to the "meta" section, i.e. no
1056 package gets created.
1058 bool add_debdb(int flags = 0)
1063 Add the contents of the debian installed package database to the repository.
1065 bool add_debpackages(FILE *fp, int flags = 0)
1066 $repo->add_debpackages($fp);
1067 repo.add_debpackages($fp)
1068 repo.add_debpackages($fp)
1070 Add the contents of the debian repository metadata (the "packages" file)
1073 bool add_deb(const char *filename, int flags = 0)
1074 $repo->add_deb($filename);
1075 repo.add_deb(filename)
1076 repo.add_deb(filename)
1078 Add the metadata of a single deb package to the repository.
1080 bool add_mdk(FILE *fp, int flags = 0)
1081 $repo->add_mdk($fp);
1085 Add the contents of the mageia/mandriva repository metadata (the
1086 "synthesis.hdlist" file) to the repository.
1088 bool add_mdk_info(FILE *fp, int flags = 0)
1089 $repo->add_mdk($fp);
1093 Extend the packages from the synthesis file with the info.xml and files.xml
1094 data. Do not forget to specify *REPO_EXTEND_SOLVABLES*.
1096 bool add_arch_repo(FILE *fp, int flags = 0)
1097 $repo->add_arch_repo($fp);
1098 repo.add_arch_repo($fp)
1099 repo.add_arch_repo($fp)
1101 Add the contents of the archlinux repository metadata (the ".db.tar" file) to
1104 bool add_arch_local(const char *dir, int flags = 0)
1105 $repo->add_arch_local($dir);
1106 repo.add_arch_local($dir)
1107 repo.add_arch_local($dir)
1109 Add the contents of the archlinux installed package database to the repository.
1110 The _dir_ parameter is usually set to "/var/lib/pacman/local".
1112 bool add_content(FILE *fp, int flags = 0)
1113 $repo->add_content($fp);
1114 repo.add_content(fp)
1115 repo.add_content(fp)
1117 Add the ``content'' meta description from the susetags format to the repository.
1118 This file contains information about the repository like keywords, and also
1119 a list of all database files with checksums. The data is added the the "meta"
1120 section of the repository, i.e. no package gets created.
1122 bool add_susetags(FILE *fp, Id defvendor, const char *language, int flags = 0)
1123 $repo->add_susetags($fp, $defvendor, $language);
1124 repo.add_susetags(fp, defvendor, language)
1125 repo.add_susetags(fp, defvendor, language)
1127 Add repository metadata in the susetags format to the repository. Like with
1128 add_rpmmd, you can specify a language if you have language extension files. The
1129 _defvendor_ parameter provides a default vendor for packages with missing
1130 vendors, it is usually provided in the content file.
1132 bool add_products(const char *dir, int flags = 0)
1133 $repo->add_products($dir);
1134 repo.add_products(dir)
1135 repo.add_products(dir)
1137 Add the installed SUSE products database to the repository. The _dir_ parameter
1138 is usually "/etc/products.d".
1143 A solvable describes all the information of one package. Each solvable
1144 belongs to one repository, it can be added and filled manually but in
1145 most cases solvables will get created by the repo_add methods.
1149 Repo *repo; /* read only */
1154 The repository this solvable belongs to.
1156 Pool *pool; /* read only */
1161 The pool this solvable belongs to, same as the pool of the repo.
1163 Id id; /* read only */
1168 The specific id of the solvable.
1170 char *name; /* read/write */
1175 char *evr; /* read/write */
1180 char *arch; /* read/write */
1185 char *vendor; /* read/write */
1190 Easy access to often used attributes of solvables. They are
1191 internally stored as Ids.
1193 Id nameid; /* read/write */
1198 Id evrid; /* read/write */
1203 Id archid; /* read/write */
1208 Id vendorid; /* read/write */
1209 $solvable->{vendorid}
1213 Raw interface to the ids. Useful if you want to search for
1214 a specific id and want to avoid the string compare overhead.
1218 const char *lookup_str(Id keyname)
1219 my $string = $solvable->lookup_str($keyname);
1220 string = solvable.lookup_str(keyname)
1221 string = solvable.lookup_str(keyname)
1223 Id lookup_id(Id keyname)
1224 my $id = $solvable->lookup_id($keyname);
1225 id = solvable.lookup_id(solvid)
1226 id = solvable.lookup_id(solvid)
1228 unsigned long long lookup_num(Id solvid, Id keyname, unsigned long long notfound = 0)
1229 my $num = $solvable->lookup_num($keyname);
1230 num = solvable.lookup_num(keyname)
1231 num = solvable.lookup_num(keyname)
1233 bool lookup_void(Id keyname)
1234 my $bool = $solvable->lookup_void($keyname);
1235 bool = solvable.lookup_void(keyname)
1236 bool = solvable.lookup_void(keyname)
1238 Chksum lookup_checksum(Id keyname)
1239 my $chksum = $solvable->lookup_checksum($keyname);
1240 chksum = solvable.lookup_checksum(keyname)
1241 chksum = solvable.lookup_checksum(keyname)
1243 Id *lookup_idarray(Id keyname, Id marker = -1)
1244 my @ids = $solvable->lookup_idarray($keyname);
1245 ids = solvable.lookup_idarray(keyname)
1246 ids = solvable.lookup_idarray(keyname)
1248 Dep *lookup_deparray(Id keyname, Id marker = -1)
1249 my @deps = $solvable->lookup_deparray($keyname);
1250 deps = solvable.lookup_deparray(keyname)
1251 deps = solvable.lookup_deparray(keyname)
1253 Generic lookup methods. Retrieve data stored for the specific keyname.
1254 The lookup_idarray() method will return an array of Ids, use
1255 lookup_deparray if you want an array of Dependency objects instead.
1256 Some Id arrays contain two parts of data divided by a specific marker,
1257 for example the provides array uses the SOLVABLE_FILEMARKER id to
1258 store both the ids provided by the package and the ids added by
1259 the addfileprovides method. The default, -1, translates to the
1260 correct marker for the keyname and returns the first part of the
1261 array, use 1 to select the second part or 0 to retrive all ids
1262 including the marker.
1264 const char *lookup_location(unsigned int *OUTPUT);
1265 my ($location, $medianr) = $solvable->lookup_location();
1266 location, medianr = solvable.lookup_location()
1267 location, medianr = solvable.lookup_location()
1269 Return a tuple containing the on-media location and an optional
1270 media number for multi-part repositories (e.g. repositories
1271 spawning multiple DVDs).
1273 void add_deparray(Id keyname, DepId dep, Id marker = -1);
1274 $solvable->add_deparray($keyname, $dep);
1275 solvable.add_deparray(keyname, dep)
1276 solvable.add_deparray(keyname, dep)
1278 Add a new dependency to the attributes stored in keyname.
1281 $solvable->installable()
1282 solvable.installable()
1283 solvable.installable?
1285 Return true if the solvable is installable on the system. Solvables
1286 are not installable if the system does not support their architecture.
1289 $solvable->isinstalled()
1290 solvable.isinstalled()
1291 solvable.isinstalled?
1293 Return true if the solvable is installed on the system.
1295 Selection Selection(int setflags = 0)
1296 my $sel = $solvable->Selection();
1297 sel = solvable.Selection()
1298 sel = solvable.Selection()
1300 Create a Selection containing just the single solvable.
1303 my $str = $solvable->str();
1304 str = $solvable.str()
1305 str = $solvable.str()
1307 Return a string describing the solvable. The string consists of the name,
1308 version, and architecture of the Solvable.
1311 my $str = $solvable->str;
1315 Same as calling the str() method.
1318 if ($solvable1 == $solvable2)
1319 if solvable1 == solvable2:
1320 if solvable1 == solvable2
1322 Two solvables are equal if they are part of the same pool and have the same
1326 THE DATAITERATOR CLASS
1327 ----------------------
1328 Dataiterators can be used to do complex string searches or
1329 to iterate over arrays. They can be created via the
1330 constructors in the Pool, Repo, and Solvable classes. The
1331 Repo and Solvable constructors will limit the search to
1332 the repository or the specific package.
1337 Return a match if the search string matches the value.
1339 *SEARCH_STRINGSTART*::
1340 Return a match if the value starts with the search string.
1342 *SEARCH_STRINGEND*::
1343 Return a match if the value ends with the search string.
1345 *SEARCH_SUBSTRING*::
1346 Return a match if the search string can be matched somewhere
1350 Do a glob match of the search string against the value.
1353 Do a regular expression match of the search string against
1357 Ignore case when matching strings. Works for all the above
1361 Match the complete filenames of the file list, not just the
1364 *SEARCH_COMPLETE_FILELIST*::
1365 When matching the file list, check every file of the package
1366 not just the subset from the primary metadata.
1368 *SEARCH_CHECKSUMS*::
1369 Allow the matching of checksum entries.
1373 void prepend_keyname(Id keyname);
1374 $di->prepend_keyname($keyname);
1375 di.prepend_keyname(keyname)
1376 di.prepend_keyname(keyname)
1378 Do a sub-search in the array stored in keyname.
1380 void skip_solvable();
1381 $di->kip_solvable();
1385 Stop matching the current solvable and advance to the next
1393 Iterate through the matches. If there is a match, the object
1394 in d will be of type Datamatch.
1398 Objects of this type will be created for every value matched
1403 Pool *pool; /* read only */
1408 Back pointer to pool.
1410 Repo *repo; /* read only */
1415 The repository containing the matched object.
1417 Solvable *solvable; /* read only */
1422 The solvable containing the value that was matched.
1424 Id solvid; /* read only */
1429 The id of the solvable that matched.
1438 const char *key_idstr();
1443 The keyname that matched, either as id or string.
1450 const char *type_idstr();
1455 The key type of the value that was matched, either as id or string.
1467 The Id of the value that was matched (only valid for id types),
1468 either as id or string.
1475 The string value that was matched (only valid for string types).
1477 unsigned long long num();
1482 The numeric value that was matched (only valid for numeric types).
1484 unsigned int num2();
1489 The secondary numeric value that was matched (only valid for types
1490 containing two values).
1493 my $pos = $d->pos();
1497 The position object of the current match. It can be used to do
1498 sub-searches starting at the match (if it is of an array type).
1499 See the Datapos class for more information.
1501 Datapos parentpos();
1502 my $pos = $d->parentpos();
1506 The position object of the array containing the current match.
1507 It can be used to do sub-searches, see the Datapos class for more
1515 Return the stringification of the matched value. Stringification
1516 depends on the search flags, for file list entries it will return
1517 just the base name unless SEARCH_FILES is used, for checksums
1518 it will return an empty string unless SEARCH_CHECKSUMS is used.
1519 Numeric values are currently stringified to an empty string.
1524 Selections are a way to easily deal with sets of packages.
1525 There are multiple constructors to create them, the most useful
1526 is probably the select() method in the Pool class.
1531 Create the selection by matching package names
1533 *SELECTION_PROVIDES*::
1534 Create the selection by matching package provides
1536 *SELECTION_FILELIST*::
1537 Create the selection by matching package files
1540 Create the selection by matching the canonical representation
1541 of the package. This is normally a combination of the name,
1542 the version, and the architecture of a package.
1544 *SELECTION_DOTARCH*::
1545 Allow an ``.<architecture>'' suffix when matching names or
1549 Allow the specification of a relation when matching names
1550 or provides, e.g. "name >= 1.2".
1552 *SELECTION_INSTALLED_ONLY*::
1553 Limit the package search to installed packages.
1555 *SELECTION_SOURCE_ONLY*::
1556 Limit the package search to source packages only.
1558 *SELECTION_WITH_SOURCE*::
1559 Extend the package search to also match source packages. The
1560 default is only to match binary packages.
1563 Allow glob matching for package names, package provides, and
1566 *SELECTION_NOCASE*::
1567 Ignore case when matching package names, package provides,
1571 Return only one selection element describing the selected packages.
1572 The default is to create multiple elements for all globbed packages.
1573 Multiple elements are useful if you want to turn the selection into
1574 an install job, in that case you want an install job for every
1579 Pool *pool; /* read only */
1584 Back pointer to pool.
1589 my $flags = $sel->flags();
1593 Return the result flags of the selection. The flags are a subset
1594 of the ones used when creating the selection, they describe which
1595 method was used to get the result. For example, if you create the
1596 selection with ``SELECTION_NAME | SELECTION_PROVIDES'', the resulting
1597 flags will either be SELECTION_NAME or SELECTION_PROVIDES depending
1598 if there was a package that matched the name or not. If there was
1599 no match at all, the flags will be zero.
1606 Return true if the selection is empty, i.e. no package could be matched.
1608 void filter(Selection *other)
1609 $sel->filter($other);
1613 Intersect two selections. Packages will only stay in the selection if there
1614 are also included in the other selecting. Does an in-place modification.
1616 void add(Selection *other)
1621 Build the union of two selections. All packages of the other selection will
1622 be added to the set of packages of the selection object. Does an in-place
1623 modification. Note that the selection flags are no longer meaningful after the
1626 void add_raw(Id how, Id what)
1627 $sel->add_raw($how, $what);
1628 sel.add_raw(how, what)
1629 sel.add_raw(how, what)
1631 Add a raw element to the selection. Check the Job class for information about
1632 the how and what parameters.
1634 Job *jobs(int action)
1635 my @jobs = $sel->jobs($action);
1636 jobs = sel.jobs(action)
1637 jobs = sel.jobs(action)
1639 Convert a selection into an array of Job objects. The action parameter is or-ed
1640 to the ``how'' part of the job, it describes the type of job (e.g. install,
1641 erase). See the Job class for the action and action modifier constants.
1643 Solvable *solvables()
1644 my @solvables = $sel->solvables();
1645 solvables = sel.solvables()
1646 solvables = sel.solvables()
1648 Convert a selection into an array of Solvable objects.
1651 my $str = $sel->str;
1655 Return a string describing the selection.
1659 Jobs are the way to specify to the dependency solver what to do.
1660 Most of the times jobs will get created by calling the jobs() method
1661 on a Selection object, but there is also a Job() constructor in the
1666 Selection constants:
1669 The ``what'' part is the id of a solvable.
1671 *SOLVER_SOLVABLE_NAME*::
1672 The ``what'' part is the id of a package name.
1674 *SOLVER_SOLVABLE_PROVIDES*::
1675 The ``what'' part is the id of a package provides.
1677 *SOLVER_SOLVABLE_ONE_OF*::
1678 The ``what'' part is an offset into the ``whatprovides'' data, created
1679 by calling the towhatprovides() pool method.
1681 *SOLVER_SOLVABLE_REPO*::
1682 The ``what'' part is the id of a repository.
1684 *SOLVER_SOLVABLE_ALL*::
1685 The ``what'' part is ignored, all packages are selected.
1687 *SOLVER_SOLVABLE_SELECTMASK*::
1688 A mask containing all the above selection bits.
1696 Install a package of the specified set of packages. It tries to install
1697 the best matching package (i.e. the highest version of the packages from
1698 the repositories with the highest priority).
1701 Erase all of the packages from the specified set. If a package is not
1702 installed, erasing it will keep it from getting installed.
1705 Update the matching installed packages to their best version. If none
1706 of the specified packages are installed, try to update the installed
1707 packages to the specified versions. See the section about targeted
1708 updates about more information.
1710 *SOLVER_WEAKENDEPS*::
1711 Allow to break the dependencies of the matching packages. Handle with care.
1713 *SOLVER_MULTIVERSION*::
1714 Mark the matched packages for multiversion install. If they get to be installed
1715 because of some other job, the installation will keep the old version of the
1716 package installed (for rpm by using ``-i'' instead of ``-U'').
1719 Do not change the state of the matched packages, i.e. when they are installed
1720 they stay installed, if not they are not selected for installation.
1722 *SOLVER_DISTUPGRADE*::
1723 Update the matching installed packages to the best version included in one
1724 of the repositories. After this operation, all come from one of the available
1725 repositories except orphaned packages. Orphaned packages are packages that
1726 have no relation to the packages in the repositories, i.e. no package in the
1727 repositories have the same name or obsolete the orphaned package.
1728 This action brings the installed packages in sync with the ones in the
1729 repository. It also turns of arch/vendor/version locking for the affected
1730 packages to simulate a fresh installation. This means that distupgrade can
1731 actually downgrade packages if only lower versions of a package are available
1732 in the repositories.
1734 *SOLVER_DROP_ORPHANED*::
1735 Erase all the matching installed packages if they are orphaned. This only makes
1736 sense if there is a ``distupgrade all packages'' job. The default is to erase
1737 orphaned packages only if they block the installation of other packages.
1740 Fix dependency problems of matching installed packages. The default is to ignore
1741 dependency problems for installed packages.
1743 *SOLVER_USERINSTALLED*::
1744 The matching installed packages are considered to be installed by a user, thus
1745 not installed to fulfil some dependency. This is needed input for the calculation
1746 of unneeded packages for jobs that have the SOLVER_CLEANDEPS flag set.
1749 A mask containing all the above action bits.
1751 Action modifier constants:
1754 Makes the job a weak job. The solver tries to fulfil weak jobs, but does not
1755 report a problem if it is not possible to do so.
1757 *SOLVER_ESSENTIAL*::
1758 Makes the job an essential job. If there is a problem with the job, the solver
1759 will not propose to remove the job as one solution (unless all other solutions
1760 are also to remove essential jobs).
1762 *SOLVER_CLEANDEPS*::
1763 The solver will try to also erase all packages dragged in through dependencies
1764 when erasing the package. This needs SOLVER_USERINSTALLED jobs to maximize user
1767 *SOLVER_FORCEBEST*::
1768 Insist on the best package for install, update, and distupgrade jobs. If this
1769 flag is not used, the solver will use the second-best package if the best
1770 package cannot be installed for some reason. When this flag is used, the solver
1771 will generate a problem instead.
1774 Forces targeted operation update and distupgrade jobs. See the section about
1775 targeted updates about more information.
1780 The job specified the exact epoch and version of the package set.
1783 The job specified the exact epoch, version, and release of the package set.
1786 The job specified the exact architecture of the packages from the set.
1788 *SOLVER_SETVENDOR*::
1789 The job specified the exact vendor of the packages from the set.
1792 The job specified the exact repository of the packages from the set.
1795 The job specified the exact name of the packages from the set.
1797 *SOLVER_NOAUTOSET*::
1798 Turn of automatic set flag generation for SOLVER_SOLVABLE jobs.
1801 A mask containing all the above set bits.
1803 See the section about set bits for more information.
1807 Pool *pool; /* read only */
1812 Back pointer to pool.
1814 Id how; /* read/write */
1819 Union of the selection, action, action modifier, and set flags.
1820 The selection part describes the semantics of the ``what'' Id.
1822 Id what; /* read/write */
1827 Id describing the set of packages, the meaning depends on the
1828 selection part of the ``how'' attribute.
1832 Solvable *solvables()
1833 my @solvables = $job->solvables();
1834 solvables = job.solvables()
1835 solvables = job.solvables()
1837 Return the set of solvables of the job as an array of Solvable
1840 bool isemptyupdate();
1841 $job->isemptyupdate()
1845 Convenience function to find out if the job describes an update
1846 job with no matching packages, i.e. a job that does nothing.
1847 Some package managers like ``zypper'' like to turn those jobs
1848 into install jobs, i.e. an update of a not-installed package
1849 will result into the installation of the package.
1852 my $str = $job->str;
1856 Return a string describing the job.
1863 Two jobs are equal if they belong to the same pool and both the
1864 ``how'' and the ``what'' attributes are the same.
1866 === TARGETED UPDATES ===
1867 Libsolv has two modes for upgrades and distupgrade: targeted and
1868 untargeted. Untargeted mode means that the installed packages from
1869 the specified set will be updated to the best version. Targeted means
1870 that packages that can be updated to a package in the specified set
1871 will be updated to the best package of the set.
1873 Here's an example to explain the subtle difference. Suppose that
1874 you have package A installed in version "1.1", "A-1.2" is available
1875 in one of the repositories and there is also package "B" that
1876 obsoletes package A.
1878 An untargeted update of "A" will update the installed "A-1.1" to
1879 package "B", because that is the newest version (B obsoletes A and
1882 A targeted update of "A" will update "A-1.1" to "A-1.2", as the
1883 set of packages contains both "A-1.1" and "A-1.2", and "A-1.2" is
1886 An untargeted update of "B" will do nothing, as "B" is not installed.
1888 An targeted update of "B" will update "A-1.1" to "B".
1890 Note that the default is to do "auto-targeting", thus if the specified
1891 set of packages does not include an installed package, the solver
1892 will assume targeted operation even if SOLVER_TARGETED is not used.
1894 This mostly matches the intent of the user, with one exception: In
1895 the example above, an update of "A-1.2" will update "A-1.1" to
1896 "A-1.2" (targeted mode), but a second update of "A-1.2" will suddenly
1897 update to "B", as untargeted mode is chosen because "A-1.2" is now
1900 If you want to have full control over when targeting mode is chosen,
1901 turn off auto-targeting with the SOLVER_FLAG_NO_AUTOTARGET solver option.
1902 In that case, all updates are considered to be untargeted unless they
1903 include the SOLVER_TARGETED flag.
1906 Set bits specify which parts of the specified packages where specified
1907 by the user. It is used by the solver when checking if an operation is
1908 allowed or not. For example, the solver will normally not allow the
1909 downgrade of an installed package. But it will not report a problem if
1910 the SOLVER_SETEVR flag is used, as it then assumes that the user specified
1911 the exact version and thus knows what he is doing.
1913 So if a package "screen-1-1" is installed for the x86_64 architecture and
1914 version "2-1" is only available for the i586 architecture, installing
1915 package "screen-2.1" will ask the user for confirmation because of the
1916 different architecture. When using the Selection class to create jobs
1917 the set bits are automatically added, e.g. selecting ``screen.i586'' will
1918 automatically add SOLVER_SETARCH, and thus no problem will be reported.
1922 Dependency solving is what this library is about. A solver object is needed
1923 for solving to store the result of the solver run. The solver object can be
1924 used multiple times for different jobs, reusing it allows the solver to
1925 re-use the dependency rules it already computed.
1929 Flags to modify some of the solver's behaviour:
1931 *SOLVER_FLAG_ALLOW_DOWNGRADE*::
1932 Allow the solver to downgrade packages without asking for confirmation
1933 (i.e. reporting a problem).
1935 *SOLVER_FLAG_ALLOW_ARCHCHANGE*::
1936 Allow the solver to change the architecture of an installed package
1937 without asking for confirmation. Note that changes to/from noarch
1938 are always considered to be allowed.
1940 *SOLVER_FLAG_ALLOW_VENDORCHANGE*::
1941 Allow the solver to change the vendor of an installed package
1942 without asking for confirmation. Each vendor is part of one or more
1943 vendor equivalence classes, normally installed packages may only
1944 change their vendor if the new vendor shares at least one equivalence
1947 *SOLVER_FLAG_ALLOW_NAMECHANGE*::
1948 Allow the solver to change the name of an installed package, i.e.
1949 install a package with a different name that obsoletes the installed
1950 package. This option is on by default.
1952 *SOLVER_FLAG_ALLOW_UNINSTALL*::
1953 Allow the solver to deinstall installed packages to fulfil the jobs.
1954 This flag also includes the above flags. You may want to set this
1955 flag if you only have SOLVER_ERASE jobs, as in that case it's
1956 better for the user to check the transaction overview instead of
1957 approving every single package that needs to be deinstalled.
1959 *SOLVER_FLAG_NO_UPDATEPROVIDE*::
1960 If multiple packages obsolete an installed package, the solver checks
1961 the provides of every such package and ignores all packages that
1962 do not provide the installed package name. Thus, you can have an
1963 official update candidate that provides the old name, and other
1964 packages that also obsolete the package but are not considered for
1965 updating. If you cannot use this feature, you can turn it off
1966 by setting this flag.
1968 *SOLVER_FLAG_SPLITPROVIDES*::
1969 Make the solver aware of special provides of the form
1970 ``<packagename>:<path>'' used in SUSE systems to support package
1973 *SOLVER_FLAG_IGNORE_RECOMMENDED*::
1974 Do not process optional (aka weak) dependencies.
1976 *SOLVER_FLAG_ADD_ALREADY_RECOMMENDED*::
1977 Install recommened or supplemented packages even if they have no
1978 connection to the current transaction. You can use this feature
1979 to implement a simple way for the user to install new recommended
1980 packages that were not available in the past.
1982 *SOLVER_FLAG_NO_INFARCHCHECK*::
1983 Turn off the inferior architecture checking that is normally done
1984 by the solver. Normally, the solver allows only the installation
1985 of packages from the "best" architecture if a package is available
1986 for multiple architectures.
1988 *SOLVER_FLAG_BEST_OBEY_POLICY*::
1989 Make the SOLVER_FORCEBEST job option consider only packages that
1990 meet the policies for installed packages, i.e. no downgrades,
1991 no architecture change, no vendor change (see the first flags
1992 of this section). If the flag is not specified, the solver will
1993 enforce the installation of the best package ignoring the
1994 installed packages, which may conflict with the set policy.
1996 *SOLVER_FLAG_NO_AUTOTARGET*::
1997 Do not enable auto-targeting up update and distupgrade jobs. See
1998 the section on targeted updates for more information.
2002 *SOLVER_RULE_UNKNOWN*::
2003 A rule of an unknown class. You should never encounter those.
2006 A package dependency rule, called rpm rule for historical reasons.
2008 *SOLVER_RULE_UPDATE*::
2009 A rule to implement the update policy of installed packages. Every
2010 installed package has an update rule that consists of the packages
2011 that may replace the installed package.
2013 *SOLVER_RULE_FEATURE*::
2014 Feature rules are fallback rules used when a update rule is disabled.
2015 They include all packages that may replace the installed package
2016 ignoring the update policy, i.e. they contain downgrades, arch
2017 changes and so on. Without them, the solver would simply deinstall
2018 installed packages if their update rule gets disabled.
2021 Job rules implement the job given to the solver.
2023 *SOLVER_RULE_DISTUPGRADE*::
2024 This are simple negative assertions that make sure that only packages
2025 are kept that are also available in one of the repositories.
2027 *SOLVER_RULE_INFARCH*::
2028 Infarch rules are also negative assertions, they disallow the installation
2029 of packages when there are packages of the same name but with a better
2032 *SOLVER_RULE_CHOICE*::
2033 Choice rules are used to make sure that the solver preferes updating to
2034 installing different packages when some dependency is provided by
2035 multiple packages with different names. The solver may always break
2036 choice rules, so you will not see them when a problem is found.
2038 *SOLVER_RULE_LEARNT*::
2039 These rules are generated by the solver to keep it from running into
2040 the same problem multiple times when it has to backtrack. They are
2041 the main reason why a sat solver is faster then other dependency solver
2044 Special dependency rule types:
2046 *SOLVER_RULE_RPM_NOT_INSTALLABLE*::
2047 This rule was added to prevent the installation of a package of an
2048 architecture that does not work on the system.
2050 *SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP*::
2051 The package contanis a required dependency which was not provided by
2054 *SOLVER_RULE_RPM_PACKAGE_REQUIRES*::
2055 Similar to SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP, but in this case
2056 some packages provided the dependency but none of them could be
2057 installed due to other dependency issues.
2059 *SOLVER_RULE_RPM_SELF_CONFLICT*::
2060 The package conflicts with itself. This is not allowed by older rpm
2063 *SOLVER_RULE_RPM_PACKAGE_CONFLICT*::
2064 To fulfill the dependencies two packages need to be installed, but
2065 one of the packages contains a conflict with the other one.
2067 *SOLVER_RULE_RPM_SAME_NAME*::
2068 The dependencies can only be fulfilled by multiple versions of
2069 a package, but installing multiple versions of the same package
2072 *SOLVER_RULE_RPM_PACKAGE_OBSOLETES*::
2073 To fulfill the dependencies two packages need to be installed, but
2074 one of the packages obsoletes the other one.
2076 *SOLVER_RULE_RPM_IMPLICIT_OBSOLETES*::
2077 To fulfill the dependencies two packages need to be installed, but
2078 one of the packages has provides a dependency that is obsoleted
2079 by the other one. See the POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES
2082 *SOLVER_RULE_RPM_INSTALLEDPKG_OBSOLETES*::
2083 To fulfill the dependencies a package needs to be installed that is
2084 obsoleted by an installed package. See the POOL_FLAG_NOINSTALLEDOBSOLETES
2087 *SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP*::
2088 The user asked for installation of a package providing a specific
2089 dependency, but no available package provides it.
2091 *SOLVER_RULE_JOB_UNKNOWN_PACKAGE*::
2092 The user asked for installation of a package with a specific name,
2093 but no available package has that name.
2095 *SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM*::
2096 The user asked for the erasure of a dependency that is provided by the
2097 system (i.e. for special hardware or language dependencies), this
2098 cannot be done with a job.
2100 *SOLVER_RULE_JOB_UNSUPPORTED*::
2101 The user asked for something that is not yet implemented, e.g. the
2102 installation of all packages at once.
2104 Policy error constants
2106 *POLICY_ILLEGAL_DOWNGRADE*::
2107 The solver ask for permission before downgrading packages.
2109 *POLICY_ILLEGAL_ARCHCHANGE*::
2110 The solver ask for permission before changing the architecture of installed
2113 *POLICY_ILLEGAL_VENDORCHANGE*::
2114 The solver ask for permission before changing the vendor of installed
2117 *POLICY_ILLEGAL_NAMECHANGE*::
2118 The solver ask for permission before replacing an installed packages with
2119 a packge that has a different name.
2121 Solution element type constants
2123 *SOLVER_SOLUTION_JOB*::
2124 The problem can be solved by removing the specified job.
2126 *SOLVER_SOLUTION_POOLJOB*::
2127 The problem can be solved by removing the specified job that is defined in the pool.
2129 *SOLVER_SOLUTION_INFARCH*::
2130 The problem can be solved by allowing the installation of the specified package
2131 with an inferior architecture.
2133 *SOLVER_SOLUTION_DISTUPGRADE*::
2134 The problem can be solved by allowing to keep the specified package installed.
2136 *SOLVER_SOLUTION_BEST*::
2137 The problem can be solved by allowing to install the specified package that is
2138 not the best available package.
2140 *SOLVER_SOLUTION_ERASE*::
2141 The problem can be solved by allowing to erase the specified package.
2143 *SOLVER_SOLUTION_REPLACE*::
2144 The problem can be solved by allowing to replace the package with some other
2147 *SOLVER_SOLUTION_REPLACE_DOWNGRADE*::
2148 The problem can be solved by allowing to replace the package with some other
2149 package that has a lower version.
2151 *SOLVER_SOLUTION_REPLACE_ARCHCHANGE*::
2152 The problem can be solved by allowing to replace the package with some other
2153 package that has a different architecture.
2155 *SOLVER_SOLUTION_REPLACE_VENDORCHANGE*::
2156 The problem can be solved by allowing to replace the package with some other
2157 package that has a different vendor.
2159 *SOLVER_SOLUTION_REPLACE_NAMECHANGE*::
2160 The problem can be solved by allowing to replace the package with some other
2161 package that has a different name.
2166 Pool *pool; /* read only */
2171 Back pointer to pool.
2175 int set_flag(int flag, int value)
2176 my $oldvalue = $pool->set_flag($flag, $value);
2177 oldvalue = pool.set_flag(flag, value)
2178 oldvalue = pool.set_flag(flag, value)
2180 int get_flag(int flag)
2181 my $value = $pool->get_flag($flag);
2182 value = pool.get_flag(flag)
2183 value = pool.get_flag(flag)
2185 Set/get a solver specific flag. The flags define the policies the solver has
2186 to obey. The flags are explained in the CONSTANTS section of this class.
2188 Problem *solve(Job *jobs)
2189 my @problems = $solver->solve(\@jobs);
2190 problems = solver.solve(jobs)
2191 problems = solver.solve(jobs)
2193 Solve a problem specified in the job list (plus the jobs defined in the pool).
2194 Returns an array of problems that need user interaction, or an empty array
2195 if no problems were encountered. See the Problem class on how to deal with
2198 Transaction transaction()
2199 my $trans = $solver->transaction();
2200 trans = solver.transaction()
2201 trans = solver.transaction()
2203 Return the transaction to implement the calculated package changes. A transaction
2204 is available even if problems were found, this is useful for interactive user
2205 interfaces that show both the job result and the problems.
2209 Problems are the way of the solver to interact with the user. You can simply list
2210 all problems and terminate your program, but a better way is to present solutions to
2211 the user and let him pick the ones he likes.
2215 Solver *solv; /* read only */
2220 Back pointer to solver object.
2222 Id id; /* read only */
2227 Id of the problem. The first problem has Id 1, they are numbered consecutively.
2231 Rule findproblemrule()
2232 my $probrule = $problem->findproblemrule();
2233 probrule = problem.findproblemrule()
2234 probrule = problem.findproblemrule()
2236 Return the rule that caused the problem. Of cource in most situations there is no
2237 single responsible rule, but many rules that interconnect with each created the
2238 problem. Nevertheless, the solver uses some heuristic approch to find a rule
2239 that somewhat describes the problem best to the user.
2241 Rule *findallproblemrules(bool unfiltered = 0)
2242 my @probrules = $problem->findallproblemrules();
2243 probrules = problem.findallproblemrule()
2244 probrules = problem.findallproblemrule()
2246 Return all rules responsible for the problem. The returned set of rules contains
2247 all the needed information why there was a problem, but it's hard to present
2248 them to the user in a sensible way. The default is to filter out all update and
2249 job rules (unless the returned rules only consist of those types).
2251 Solution *solutions()
2252 my @solutions = $problem->solutions();
2253 solutions = problem.solutions()
2254 solutions = problem.solutions()
2256 Return an array containing multiple possible solutions to fix the problem. See
2257 the solution class for more information.
2259 int solution_count()
2260 my $cnt = $problem->solution_count();
2261 cnt = problem.solution_count()
2262 cnt = problem.solution_count()
2264 Return the number of solutions without creating solution objects.
2268 Rules are the basic block of sat solving. Each package dependency gets translated
2269 into one or multiple rules.
2273 Solver *solv; /* read only */
2278 Back pointer to solver object.
2280 Id id; /* read only */
2287 int type; /* read only */
2292 The basic type of the rule. See the constant section of the solver class for the type list.
2297 my $ruleinfo = $rule->info();
2298 ruleinfo = rule.info()
2299 ruleinfo = rule.info()
2301 Return a Ruleinfo object that contains information about why the rule was created. But
2302 see the allinfos() method below.
2304 Ruleinfo *allinfos()
2305 my @ruleinfos = $rule->allinfos();
2306 ruleinfos = rule.allinfos()
2307 ruleinfos = rule.allinfos()
2309 As the same dependency rule can get created because of multiple dependencies, one
2310 Ruleinfo is not enough to describe the reason. Thus the allinfos() method returns
2311 an array of all infos about a rule.
2314 if ($rule1 == $rule2)
2318 Two rules are equal if they belong to the same solver and have the same id.
2322 A Ruleinfo describes one reason why a rule was created.
2326 Solver *solv; /* read only */
2331 Back pointer to solver object.
2333 int type; /* read only */
2338 The type of the ruleinfo. See the constant section of the solver class for the
2339 rule type list and the special type list.
2341 Dep *dep; /* read only */
2346 The dependency leading to the creation of the rule.
2348 Dep *dep_id; /* read only */
2349 $ruleinfo->{'dep_id'}
2353 The Id of the dependency leading to the creation of the rule, or zero.
2355 Solvable *solvable; /* read only */
2356 $ruleinfo->{solvable}
2360 The involved Solvable, e.g. the one containing the dependency.
2362 Solvable *othersolvable; /* read only */
2363 $ruleinfo->{othersolvable}
2364 ruleinfo.othersolvable
2365 ruleinfo.othersolvable
2367 The other involved Solvable (if any), e.g. the one containing providing
2368 the dependency for conflicts.
2370 const char *problemstr();
2371 my $str = $ruleinfo->problemstr();
2372 str = ruleinfo.problemstr()
2373 str = ruleinfo.problemstr()
2375 A string describing the ruleinfo from a problem perspective. This probably
2376 only makes sense if the rule is part of a problem.
2380 A solution solves one specific problem. It consists of multiple solution elements
2381 that all need to be executed.
2385 Solver *solv; /* read only */
2390 Back pointer to solver object.
2392 Id problemid; /* read only */
2393 $solution->{problemid}
2397 Id of the problem the solution solves.
2399 Id id; /* read only */
2404 Id of the solution. The first solution has Id 1, they are numbered consecutively.
2408 Solutionelement *elements(bool expandreplaces = 0)
2409 my @solutionelements = $solution->elements();
2410 solutionelements = solution.elements()
2411 solutionelements = solution.elements()
2413 Return an array containing the elements describing what neeeds to be done to
2414 implement the specific solution. If expandreplaces is true, elements of type
2415 SOLVER_SOLUTION_REPLACE will be replaced by one or more elements replace
2416 elements describing the policy mismatches.
2419 my $cnt = $solution->solution_count();
2420 cnt = solution.element_count()
2421 cnt = solution.element_count()
2423 Return the number of solution elements without creating objects. Note that the
2424 count does not match the number of objects returned by the elements() method
2425 of expandreplaces is set to true.
2428 THE SOLUTIONELEMENT CLASS
2429 -------------------------
2430 A solution element describes a single action of a solution. The action is always
2431 either to remove one specific job or to add a new job that installs or erases
2432 a single specific package.
2436 Solver *solv; /* read only */
2437 $solutionelement->{solv}
2438 solutionelement.solv
2439 solutionelement.solv
2441 Back pointer to solver object.
2443 Id problemid; /* read only */
2444 $solutionelement->{problemid}
2445 solutionelement.problemid
2446 solutionelement.problemid
2448 Id of the problem the element (partly) solves.
2450 Id solutionid; /* read only */
2451 $solutionelement->{solutionid}
2452 solutionelement.solutionid
2453 solutionelement.solutionid
2455 Id of the solution the element is a part of.
2457 Id id; /* read only */
2458 $solutionelement->{id}
2462 Id of the solution element. The first element has Id 1, they are numbered consecutively.
2464 Id type; /* read only */
2465 $solutionelement->{type}
2466 solutionelement.type
2467 solutionelement.type
2469 Type of the solution element. See the constant section of the solver class for the
2472 Solvable *solvable; /* read only */
2473 $solutionelement->{solvable}
2474 solutionelement.solvable
2475 solutionelement.solvable
2477 The installed solvable that needs to be replaced for replacement elements.
2479 Solvable *replacement; /* read only */
2480 $solutionelement->{replacement}
2481 solutionelement.replacement
2482 solutionelement.replacement
2484 The solvable that needs to be installed to fix the problem.
2486 int jobidx; /* read only */
2487 $solutionelement->{jobidx}
2488 solutionelement.jobidx
2489 solutionelement.jobidx
2491 The index of the job that needs to be removed to fix the problem, or -1 if the
2492 element is of another type. Note that it's better to change the job to SOLVER_NOOP
2493 type so that the numbering of other elements does not get disturbed. This
2494 method works both for types SOLVER_SOLUTION_JOB and SOLVER_SOLUTION_POOLJOB.
2498 Solutionelement *replaceelements()
2499 my @solutionelements = $solutionelement->replaceelements();
2500 solutionelements = solutionelement.replaceelements()
2501 solutionelements = solutionelement.replaceelements()
2503 If the solution element is of type SOLVER_SOLUTION_REPLACE, return an array of
2504 elements describing the policy mismatches, otherwise return a copy of the
2505 element. See also the ``expandreplaces'' option in the solution's elements()
2508 int illegalreplace()
2509 my $illegal = $solutionelement->illegalreplace();
2510 illegal = solutionelement.illegalreplace()
2511 illegal = solutionelement.illegalreplace()
2513 Return an integer that contains the policy mismatch bits or-ed together, or
2514 zero if there was no policy mismatch. See the policy error constants in
2518 my $job = $solutionelement->Job();
2519 illegal = solutionelement.Job()
2520 illegal = solutionelement.Job()
2522 Create a job that implements the solution element. Add this job to the array
2523 of jobs for all elements of type different to SOLVER_SOLUTION_JOB and
2524 SOLVER_SOLUTION_POOLJOB. For the later two, a SOLVER_NOOB Job is created,
2525 you should replace the old job with the new one.
2528 my $str = $solutionelement->str();
2529 str = solutionelement.str()
2530 str = solutionelement.str()
2532 A string describing the change the solution element consists of.
2534 THE TRANSACTION CLASS
2535 ---------------------
2536 Transactions describe the output of a solver run. A transaction contains
2537 a number of transaction elements, each either the installation of a new
2538 package or the removal of an already installed package. The Transaction
2539 class supports a classify() method that puts the elements into different
2540 groups so that a transaction can be presented to the user in a meaningful
2545 Transaction element types, both active and passive
2547 *SOLVER_TRANSACTION_IGNORE*::
2548 This element does nothing. Used to map element types that do not
2549 match the view mode.
2551 *SOLVER_TRANSACTION_INSTALL*::
2552 This element installes a package.
2554 *SOLVER_TRANSACTION_ERASE*::
2555 This element erases a package.
2557 *SOLVER_TRANSACTION_MULTIINSTALL*::
2558 This element installs a package with a different version keeping the
2559 other versions installed.
2561 *SOLVER_TRANSACTION_MULTIREINSTALL*::
2562 This element reinstalls a installed package keeping the other versions
2565 Transaction element types, active view
2567 *SOLVER_TRANSACTION_REINSTALL*::
2568 This element re-installs a package, i.e. installs the same package again.
2570 *SOLVER_TRANSACTION_CHANGE*::
2571 This element installs a package with same name, version, architecture but
2574 *SOLVER_TRANSACTION_UPGRADE*::
2575 This element installs a newer version of an installed package.
2577 *SOLVER_TRANSACTION_DOWNGRADE*::
2578 This element installs a older version of an installed package.
2580 *SOLVER_TRANSACTION_OBSOLETES*::
2581 This element installs a package that obsoletes an installed package.
2583 Transaction element types, passive view
2585 *SOLVER_TRANSACTION_REINSTALLED*::
2586 This element re-installs a package, i.e. installs the same package again.
2588 *SOLVER_TRANSACTION_CHANGED*::
2589 This element replaces an installed package with one of the same name,
2590 version, architecture but different content.
2592 *SOLVER_TRANSACTION_UPGRADED*::
2593 This element replaces an installed package with a new version.
2595 *SOLVER_TRANSACTION_DOWNGRADED*::
2596 This element replaces an installed package with an old version.
2598 *SOLVER_TRANSACTION_OBSOLETED*::
2599 This element replaces an installed package with a package that obsoletes
2602 Pseudo element types for showing extra information used by classify()
2604 *SOLVER_TRANSACTION_ARCHCHANGE*::
2605 This element replaces an installed package with a package of a different
2608 *SOLVER_TRANSACTION_VENDORCHANGE*::
2609 This element replaces an installed package with a package of a different
2612 Transaction mode flags
2614 *SOLVER_TRANSACTION_SHOW_ACTIVE*::
2615 Filter for active view types. The default is to return passive view type,
2616 i.e. to show how the installed packages get changed.
2618 *SOLVER_TRANSACTION_SHOW_OBSOLETES*::
2619 Do not map the obsolete view type into INSTALL/ERASE elements.
2621 *SOLVER_TRANSACTION_SHOW_ALL*::
2622 If multiple packages replace an installed package, only the best of them
2623 is kept as OBSOLETE element, the other ones are mapped to INSTALL/ERASE
2624 elements. This is because most applications want to show just one package
2625 replacing the installed one. The SOLVER_TRANSACTION_SHOW_ALL makes the
2626 library keep all OBSOLETE elements.
2628 *SOLVER_TRANSACTION_SHOW_MULTIINSTALL*::
2629 The library maps MULTIINSTALL elements to simple INSTALL elements. This
2630 flag can be used to disable the mapping.
2632 *SOLVER_TRANSACTION_CHANGE_IS_REINSTALL*::
2633 Use this flag if you want to map CHANGE elements to the REINSTALL type.
2635 *SOLVER_TRANSACTION_OBSOLETE_IS_UPGRADE*::
2636 Use this flag if you want to map OBSOLETE elements to the UPGRADE type.
2638 *SOLVER_TRANSACTION_MERGE_ARCHCHANGES*::
2639 Do not add extra categories for every architecture change, instead cumulate
2640 them in one category.
2642 *SOLVER_TRANSACTION_MERGE_VENDORCHANGES*::
2643 Do not add extra categories for every vendor change, instead cumulate
2644 them in one category.
2646 *SOLVER_TRANSACTION_RPM_ONLY*::
2647 Special view mode that just returns IGNORE, ERASE, INSTALL, MULTIINSTALL
2648 elements. Useful if you want to find out what to feed to the underlying
2651 Transaction order flags
2653 *SOLVER_TRANSACTION_KEEP_ORDERDATA*::
2654 Do not throw away the dependency graph used for ordering the transaction.
2655 This flag is needed if you want to do manual ordering.
2659 Pool *pool; /* read only */
2664 Back pointer to pool.
2673 Returns true if the transaction does not do anything, i.e. has no elements.
2675 Solvable *newsolvables();
2676 my @newsolvables = $trans->newsolvables();
2677 newsolvables = trans.newsolvables()
2678 newsolvables = trans.newsolvables()
2680 Return all packages that are to be installed by the transaction. This are
2681 the packages that need to be downloaded from the repositories.
2683 Solvable *keptsolvables();
2684 my @keptsolvables = $trans->keptsolvables();
2685 keptsolvables = trans.keptsolvables()
2686 keptsolvables = trans.keptsolvables()
2688 Return all installed packages that the transaction will keep installed.
2691 my @steps = $trans->steps();
2692 steps = trans.steps()
2693 steps = trans.steps()
2695 Return all solvables that need to be installed (if the returned solvable
2696 is not already installed) or erased (if the returned solvable is installed).
2697 A step is also called a transaction element.
2699 int steptype(Solvable *solvable, int mode)
2700 my $type = $trans->steptype($solvable, $mode);
2701 type = trans.steptype(solvable, mode)
2702 type = trans.steptype(solvable, mode)
2704 Return the transaction type of the specified solvable. See the CONSTANTS
2705 sections for the mode argument flags and the list of returned types.
2707 TransactionClass *classify(int mode = 0)
2708 my @classes = $trans->classify();
2709 classes = trans.classify()
2710 classes = trans.classify()
2712 Group the transaction elements into classes so that they can be displayed
2713 in a structured way. You can use various mapping mode flags to tweak
2714 the result to match your preferences, see the mode argument flag in
2715 the CONSTANTS section. See the TransactionClass class for how to deal
2716 with the returned objects.
2718 Solvable othersolvable(Solvable *solvable);
2719 my $other = $trans->othersolvable($solvable);
2720 other = trans.othersolvable(solvable)
2721 other = trans.othersolvable(solvable)
2723 Return the ``other'' solvable for a given solvable. For installed packages
2724 the other solvable is the best package with the same name that replaces
2725 the installed package, or the best package of the obsoleting packages if
2726 the package does not get replaced by one with the same name.
2728 For to be installed packages, the ``other'' solvable is the best installed
2729 package with the same name that will be replaced, or the best packages
2730 of all the packages that are obsoleted if the new package does not replace
2731 a package with the same name.
2733 Thus, the ``other'' solvable is normally the package that is also shown
2734 for a given package.
2736 Solvable *allothersolvables(Solvable *solvable);
2737 my @others = $trans->allothersolvables($solvable);
2738 others = trans.allothersolvables(solvable)
2739 others = trans.allothersolvables(solvable)
2741 For installed packages, returns all of the packages that replace us. For to
2742 be installed packages, returns all of the packages that the new package
2743 replaces. The special ``other'' solvable is always the first entry of the
2746 int calc_installsizechange();
2747 my $change = $trans->calc_installsizechange();
2748 change = trans.calc_installsizechange()
2749 change = trans.calc_installsizechange()
2751 Return the size change of the installed system in kilobytes (kibibytes).
2753 void order(int flags = 0);
2758 Order the steps in the transactions so that dependant packages are updated
2759 before packages that depend on them. For rpm, you can also use rpmlib's
2760 ordering functionality, debian's dpkg does not provide a way to order a
2763 === ACTIVE/PASSIVE VIEW ===
2765 Active view list what new packages get installed, while passive view shows
2766 what happens to the installed packages. Most often there's not much
2767 difference between the two modes, but things get interesting of multiple
2768 package get replaced by one new package. Say you have installed package
2769 A-1-1 and B-1-1, and now install A-2-1 with has a new dependency that
2770 obsoletes B. The transaction elements will be
2772 updated A-1-1 (other: A-2-1)
2773 obsoleted B-1-1 (other: A-2-1)
2775 in passive mode, but
2777 update A-2-1 (other: A-1-1)
2780 in active mode. If the mode containes SOLVER_TRANSACTION_SHOW_ALL, the
2781 passive mode list will be unchanged but the active mode list will just
2784 THE TRANSACTIONCLASS CLASS
2785 --------------------------
2786 Objects of this type are returned by the classify() Transaction method.
2790 Transaction *transaction; /* read only */
2791 $class->{transaction}
2795 Back pointer to transaction object.
2797 int type; /* read only */
2802 The type of the transaction elements in the class.
2804 int count; /* read only */
2809 The number of elements in the class.
2811 const char *fromstr;
2816 The old vendor or architecture.
2823 The new vendor or architecture.
2830 The id of the old vendor or architecture.
2837 The id of the new vendor or architecture.
2842 my @solvables = $class->solvables();
2843 solvables = class.solvables()
2844 solvables = class.solvables()
2846 Return the solvables for all transaction elements in the class.
2850 Checksums (also called hashes) are used to make sure that downloaded data is
2851 not corrupt and also as a fingerprint mechanism to check if data has changed.
2853 === CLASS METHODS ===
2855 Chksum Chksum(Id type)
2856 my $chksum = solv::Chksum->new($type);
2857 chksum = solv.Chksum(type)
2858 chksum = Solv::Chksum.new(type)
2860 Create a checksum object. Currently the following types are supported:
2866 These keys are constants in the *solv* class.
2868 Chksum Chksum(Id type, const char *hex)
2869 my $chksum = solv::Chksum->new($type, $hex);
2870 chksum = solv.Chksum(type, hex)
2871 chksum = Solv::Chksum.new(type, hex)
2873 Create an already finalized checksum object.
2877 Id type; /* read only */
2882 Return the type of the checksum object.
2886 void add(const char *str)
2891 Add a string to the checksum.
2893 void add_fp(FILE *fp)
2894 $chksum->add_fp($file);
2898 Add the contents of a file to the checksum.
2900 void add_stat(const char *filename)
2901 $chksum->add_stat($filename);
2902 chksum.add_stat(filename)
2903 chksum.add_stat(filename)
2905 Stat the file and add the dev/ino/size/mtime member to the checksum. If the
2906 stat fails, the members are zeroed.
2908 void add_fstat(int fd)
2909 $chksum->add_fstat($fd);
2910 chksum.add_fstat(fd)
2911 chksum.add_fstat(fd)
2913 Same as add_stat, but instead of the filename a file descriptor is used.
2915 unsigned char *raw()
2916 my $raw = $chksum->raw();
2920 Finalize the checksum and return the result as raw bytes. This means that the
2921 result can contain NUL bytes or unprintable characters.
2924 my $raw = $chksum->hex();
2928 Finalize the checksum and return the result as hex string.
2931 if ($chksum1 == $chksum2)
2932 if chksum1 == chksum2:
2933 if chksum1 == chksum2
2935 Checksums are equal if they are of the same type and the finalized results are
2939 my $str = $chksum->str;
2943 If the checksum is finished, the checksum is returned as "<type>:<hex>" string.
2944 Otherwise "<type>:unfinished" is returned.
2949 This functions were added because libsolv uses standard *FILE* pointers to
2950 read/write files, but languages like perl have their own implementation of
2951 files. The libsolv functions also support decompression and compression, the
2952 algorithm is selected by looking at the file name extension.
2954 FILE *xfopen(char *fn, char *mode = "r")
2955 my $file = solv::xfopen($path);
2956 file = solv.xfopen(path)
2957 file = Solv::xfopen(path)
2959 Open a file at the specified path. The `mode` argument is passed on to the
2962 FILE *xfopen_fd(char *fn, int fileno)
2963 my $file = solv::xfopen_fd($path, $fileno);
2964 file = solv.xfopen_fd(path, fileno)
2965 file = Solv::xfopen_fd(path, fileno)
2967 Create a file handle from the specified file descriptor. The path argument is
2968 only used to select the correct (de-)compression algorithm, use an empty path
2969 if you want to make sure to read/write raw data.
2974 my $fileno = $file->fileno();
2975 fileno = file.fileno()
2976 fileno = file.fileno()
2978 Return file file descriptor of the file. If the file is not open, `-1` is
2982 my $fileno = $file->dup();
2986 Return a copy of the descriptor of the file. If the file is not open, `-1` is
2994 Flush the file. Returns false if there was an error. Flushing a closed file
2995 always returns true.
3002 Close the file. This is needed for languages like Ruby, that do not destruct
3003 objects right after they are no longer referenced. In that case, it is good
3004 style to close open files so that the file descriptors are freed right away.
3005 Returns false if there was an error.
3010 The Repodata stores attrinbutes for packages and the repository itself, each
3011 repository can have multiple repodata areas. You normally only need to
3012 directly access them if you implement lazy downloading of repository data.
3013 Repodata areas are created by calling the repository's add_repodata() method
3014 or by using repo_add methods without the REPO_REUSE_REPODATA or REPO_USE_LOADING
3019 Repo *repo; /* read only */
3024 Back pointer to repository object.
3026 Id id; /* read only */
3031 The id of the repodata area. Repodata ids of different repositories overlap.
3036 $data->internalize();
3040 Internalize newly added data. The lookup functions will only see the new data
3041 after it has been internalized.
3043 bool write(FILE *fp);
3048 Write the contents of the repodata area as solv file.
3050 bool add_solv(FILE *fp, int flags = 0);
3051 $data->add_solv($fp);
3055 Replace a stub repodata object with the data from a solv file. This method
3056 automatically adds the REPO_USE_LOADING flag. It should only be used from
3059 void create_stubs();
3060 $data->create_stubs()
3064 Create stub repodatas from the information stored in the repodata meta
3067 void extend_to_repo();
3068 $data->extend_to_repo();
3069 data.extend_to_repo()
3070 data.extend_to_repo()
3072 Extend the repodata so that it has the same size as the repo it belongs to.
3073 This method is only needed when switching to a just written repodata extension
3074 to make the repodata match the written extension (which is always of the
3078 if ($data1 == $data2)
3082 Two repodata objects are equal if they belong to the same repository and have
3085 === DATA RETRIEVAL METHODS ===
3087 const char *lookup_str(Id solvid, Id keyname)
3088 my $string = $data->lookup_str($solvid, $keyname);
3089 string = data.lookup_str(solvid, keyname)
3090 string = data.lookup_str(solvid, keyname)
3092 Id *lookup_idarray(Id solvid, Id keyname)
3093 my @ids = $data->lookup_idarray($solvid, $keyname);
3094 ids = data.lookup_idarray(solvid, keyname)
3095 ids = data.lookup_idarray(solvid, keyname)
3097 Chksum lookup_checksum(Id solvid, Id keyname)
3098 my $chksum = $data->lookup_checksum($solvid, $keyname);
3099 chksum = data.lookup_checksum(solvid, keyname)
3100 chksum = data.lookup_checksum(solvid, keyname)
3102 Lookup functions. Return the data element stored in the specified solvable.
3103 The methods probably only make sense to retrive data from the special
3104 SOLVID_META solvid that stores repodata meta information.
3106 === DATA STORAGE METHODS ===
3108 void set_id(Id solvid, Id keyname, DepId id);
3109 $data->set_id($solvid, $keyname, $id);
3110 data.set_id(solvid, keyname, id)
3111 data.set_id(solvid, keyname, id)
3113 void set_str(Id solvid, Id keyname, const char *str);
3114 $data->set_str($solvid, $keyname, $str);
3115 data.set_str(solvid, keyname, str)
3116 data.set_str(solvid, keyname, str)
3118 void set_poolstr(Id solvid, Id keyname, const char *str);
3119 $data->set_poolstr($solvid, $keyname, $str);
3120 data.set_poolstr(solvid, keyname, str)
3121 data.set_poolstr(solvid, keyname, str)
3123 void set_checksum(Id solvid, Id keyname, Chksum *chksum);
3124 $data->set_checksum($solvid, $keyname, $chksum);
3125 data.set_checksum(solvid, keyname, chksum)
3126 data.set_checksum(solvid, keyname, chksum)
3128 void add_idarray(Id solvid, Id keyname, DepId id);
3129 $data->add_idarray($solvid, $keyname, $id);
3130 data.add_idarray(solvid, keyname, id)
3131 data.add_idarray(solvid, keyname, id)
3134 my $handle = $data->new_handle();
3135 handle = data.new_handle()
3136 handle = data.new_handle()
3138 void add_flexarray(Id solvid, Id keyname, Id handle);
3139 $data->add_flexarray($solvid, $keyname, $handle);
3140 data.add_flexarray(solvid, keyname, handle)
3141 data.add_flexarray(solvid, keyname, handle)
3143 Data storage methods. Probably only useful to store data in the special
3144 SOLVID_META solvid that stores repodata meta information. Note that
3145 repodata areas can have their own Id pool (see the REPO_LOCALPOOL flag),
3146 so be careful if you need to store ids. Arrays are created by calling
3147 the add function for every element. A flexarray is an array of
3148 sub-structures, call new_handle to create a new structure, use the
3149 handle as solvid to fill the structure with data and call add_flexarray
3150 to put the structure in an array.
3155 Datapos objects describe a specific position in the repository data area.
3156 Thus they are only valid until the repository is modified in some way.
3157 Datapos objects can be created by the pos() and parentpos() methods of
3158 a Datamatch object or by accesing the ``meta'' attribute of a repository.
3162 Repo *repo; /* read only */
3167 Back pointer to repository object.
3171 Dataiterator(Id keyname, const char *match, int flags)
3172 my $di = $datapos->Dataiterator($keyname, $match, $flags);
3173 di = datapos.Dataiterator(keyname, match, flags)
3174 di = datapos.Dataiterator(keyname, match, flags)
3176 Create a Dataiterator at the position of the datapos object.
3178 const char *lookup_deltalocation(unsigned int *OUTPUT);
3179 my ($location, $medianr) = $datapos->lookup_deltalocation();
3180 location, medianr = datapos.lookup_deltalocation()
3181 location, medianr = datapos.lookup_deltalocation()
3183 Return a tuple containing the on-media location and an optional media number
3184 for a delta rpm. This obviously only works if the data position points to
3185 structure describing a delta rpm.
3187 const char *lookup_deltaseq();
3188 my $seq = $datapos->lookup_deltaseq();
3189 seq = datapos.lookup_deltaseq();
3190 seq = datapos.lookup_deltaseq();
3192 Return the delta rpm sequence from the structure describing a delta rpm.
3194 === DATA RETRIEVAL METHODS ===
3196 const char *lookup_str(Id keyname)
3197 my $string = $datapos->lookup_str($keyname);
3198 string = datapos.lookup_str(keyname)
3199 string = datapos.lookup_str(keyname)
3201 Id lookup_id(Id solvid, Id keyname)
3202 my $id = $datapos->lookup_id($keyname);
3203 id = datapos.lookup_id(keyname)
3204 id = datapos.lookup_id(keyname)
3206 unsigned long long lookup_num(Id keyname, unsigned long long notfound = 0)
3207 my $num = $datapos->lookup_num($keyname);
3208 num = datapos.lookup_num(keyname)
3209 num = datapos.lookup_num(keyname)
3211 bool lookup_void(Id keyname)
3212 my $bool = $datapos->lookup_void($keyname);
3213 bool = datapos.lookup_void(keyname)
3214 bool = datapos.lookup_void(keyname)
3216 Id *lookup_idarray(Id keyname)
3217 my @ids = $datapos->lookup_idarray($keyname);
3218 ids = datapos.lookup_idarray(keyname)
3219 ids = datapos.lookup_idarray(keyname)
3221 Chksum lookup_checksum(Id keyname)
3222 my $chksum = $datapos->lookup_checksum($keyname);
3223 chksum = datapos.lookup_checksum(keyname)
3224 chksum = datapos.lookup_checksum(keyname)
3226 Lookup functions. Note that the returned Ids are always translated into
3227 the Ids of the global pool even if the repodata area contains its own pool.
3231 Michael Schroeder <mls@suse.de>