Module Satsolver
In: satsolver.i

About Satsolver

Satsolver is the module namespace for sat-solver bindings.

sat-solver provides a repository data cache and a dependency solver for rpm-style dependencies based on a Satisfyability engine.

See en.opensuse.org/Package_Management/Sat_Solver for details about the internals of sat-solver.

Solving needs a Request containing a set of Jobs. Jobs install, update, remove, or lock Solvables (packages), names (a Solvable providing name), or Relations (name op +version.release+).

Successful solving creates a Transaction, listing the Solvables to install, update, or remove in order to fulfill the Request while keeping the installed system consistent.

Solver errors are reported as Problems. Each Problem has a description of what went wrong and a set of Solutions how to remediate the Problem.

Working with sat-solver bindings

The sat-solver bindings provide two main functionalities

  • An efficient cache of repository data
  • An ultra-fast dependency solver working on the cached data

The core of the repository cache is represented by the Pool. It represents the context the solver works in. The Pool holds Solvables, representing (RPM-based) packages.

Solvables have a name, a version and an architecture. Solvables usually have Dependencies, organized as sets of _Relation_s Solvables can also hold additional attribute data, typically everything from the RPM header, i.e. vendor, download size, install size, etc.

Solvables within the Pool are grouped in Repositories. Filling the Pool by loading a .solv file, representing a Repository, is the preferred way.

In a nutshell: Pool has lots of Repositories have lots of Solvables have lots of Attributes.

Classes and Modules

Class Satsolver::Covenant
Class Satsolver::Dataiterator
Class Satsolver::Decision
Class Satsolver::Dependency
Class Satsolver::Job
Class Satsolver::Pool
Class Satsolver::Problem
Class Satsolver::Relation
Class Satsolver::Repo
Class Satsolver::Repodata
Class Satsolver::Repokey
Class Satsolver::Request
Class Satsolver::Ruleinfo
Class Satsolver::Solution
Class Satsolver::SolutionElement
Class Satsolver::Solvable
Class Satsolver::Solver
Class Satsolver::Step
Class Satsolver::Transaction

Constants

INCLUDE_SOLVABLE = SOLVER_INSTALL_SOLVABLE   ensure this solvable is installed
EXCLUDE_SOLVABLE = SOLVER_ERASE_SOLVABLE   ensure this solvable is NOT installed
INCLUDE_SOLVABLE_NAME = SOLVER_INSTALL_SOLVABLE_NAME   ensure a solvable (any solvable) of this name is installed
EXCLUDE_SOLVABLE_NAME = SOLVER_ERASE_SOLVABLE_NAME   ensure NO solvable of this name is installed
INCLUDE_SOLVABLE_PROVIDES = SOLVER_INSTALL_SOLVABLE_PROVIDES   ensure a solvable (any solvable) providing this relation is installed
EXCLUDE_SOLVABLE_PROVIDES = SOLVER_ERASE_SOLVABLE_PROVIDES   ensure NO solvable providing this relation is installed
SEARCH_STRINGMASK = SEARCH_STRINGMASK
SEARCH_STRING = SEARCH_STRING   search for exact string match
SEARCH_SUBSTRING = SEARCH_SUBSTRING   search for substring match
SEARCH_GLOB = SEARCH_GLOB   search for glob
SEARCH_REGEX = SEARCH_REGEX   search for regexp. Caution this is slow
SEARCH_ERROR = SEARCH_ERROR
SEARCH_NOCASE = SEARCH_NOCASE   ignore case in matches
SEARCH_NO_STORAGE_SOLVABLE = SEARCH_NO_STORAGE_SOLVABLE
SEARCH_SUB = SEARCH_SUB
SEARCH_ARRAYSENTINEL = SEARCH_ARRAYSENTINEL
SEARCH_SKIP_KIND = SEARCH_SKIP_KIND
SEARCH_FILES = SEARCH_FILES   By default we don‘t match in attributes representing filelists because the construction of those strings is costly. Specify this flag if you want this. In that case kv->str will contain the full filename (if matched of course).
DECISION_INSTALL = DECISION_INSTALL   install a solvable
DECISION_REMOVE = DECISION_REMOVE   remove a solvable
DECISION_UPDATE = DECISION_UPDATE   update a solvable
DECISION_OBSOLETE = DECISION_OBSOLETE   obsolete a solvable (remove due to install)
DECISION_WEAK = DECISION_WEAK   weak decision modifier
DECISION_FREE = DECISION_FREE   free decision modifier
DEP_PRV = DEP_PRV   provides Dependency
DEP_REQ = DEP_REQ   requires Dependency
DEP_CON = DEP_CON   conflicts Dependency
DEP_OBS = DEP_OBS   obsoletes Dependency
DEP_REC = DEP_REC   recommends Dependency
DEP_SUG = DEP_SUG   suggests Dependency
DEP_SUP = DEP_SUP   supplements Dependency
DEP_ENH = DEP_ENH   enhances Dependency
REL_NONE = 0   the no-op relation
REL_GT = REL_GT   greater-than
REL_EQ = REL_EQ   equality
REL_LT = REL_LT   less-than
REL_AND = REL_AND   and, relation between relations
REL_OR = REL_OR   or, relation between relations
REL_WITH = REL_WITH   with, relation between relations, affecting the same solvable
REL_NAMESPACE = REL_NAMESPACE   namespace
REPOKEY_TYPE_VOID = REPOKEY_TYPE_VOID
REPOKEY_TYPE_CONSTANT = REPOKEY_TYPE_CONSTANT
REPOKEY_TYPE_CONSTANTID = REPOKEY_TYPE_CONSTANTID
REPOKEY_TYPE_ID = REPOKEY_TYPE_ID
REPOKEY_TYPE_NUM = REPOKEY_TYPE_NUM
REPOKEY_TYPE_U32 = REPOKEY_TYPE_U32
REPOKEY_TYPE_DIR = REPOKEY_TYPE_DIR
REPOKEY_TYPE_STR = REPOKEY_TYPE_STR
REPOKEY_TYPE_IDARRAY = REPOKEY_TYPE_IDARRAY
REPOKEY_TYPE_REL_IDARRAY = REPOKEY_TYPE_REL_IDARRAY
REPOKEY_TYPE_DIRSTRARRAY = REPOKEY_TYPE_DIRSTRARRAY
REPOKEY_TYPE_DIRNUMNUMARRAY = REPOKEY_TYPE_DIRNUMNUMARRAY
REPOKEY_TYPE_MD5 = REPOKEY_TYPE_MD5
REPOKEY_TYPE_SHA1 = REPOKEY_TYPE_SHA1
REPOKEY_TYPE_SHA256 = REPOKEY_TYPE_SHA256
REPOKEY_TYPE_FIXARRAY = REPOKEY_TYPE_FIXARRAY
REPOKEY_TYPE_FLEXARRAY = REPOKEY_TYPE_FLEXARRAY
SOLVER_RULE_RPM = SOLVER_RULE_RPM
SOLVER_RULE_RPM_NOT_INSTALLABLE = SOLVER_RULE_RPM_NOT_INSTALLABLE
SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP = SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP
SOLVER_RULE_RPM_PACKAGE_REQUIRES = SOLVER_RULE_RPM_PACKAGE_REQUIRES
SOLVER_RULE_RPM_SELF_CONFLICT = SOLVER_RULE_RPM_SELF_CONFLICT
SOLVER_RULE_RPM_PACKAGE_CONFLICT = SOLVER_RULE_RPM_PACKAGE_CONFLICT
SOLVER_RULE_RPM_SAME_NAME = SOLVER_RULE_RPM_SAME_NAME
SOLVER_RULE_RPM_PACKAGE_OBSOLETES = SOLVER_RULE_RPM_PACKAGE_OBSOLETES
SOLVER_RULE_RPM_IMPLICIT_OBSOLETES = SOLVER_RULE_RPM_IMPLICIT_OBSOLETES
SOLVER_RULE_UPDATE = SOLVER_RULE_UPDATE
SOLVER_RULE_FEATURE = SOLVER_RULE_FEATURE
SOLVER_RULE_JOB = SOLVER_RULE_JOB
SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP = SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP
SOLVER_RULE_DISTUPGRADE = SOLVER_RULE_DISTUPGRADE
SOLVER_RULE_INFARCH = SOLVER_RULE_INFARCH
SOLVER_RULE_LEARNT = SOLVER_RULE_LEARNT
SOLUTION_SOLVABLE = 0   caused by missing/dispensable solvable
KIND_PACKAGE = KIND_PACKAGE
KIND_PRODUCT = KIND_PRODUCT
KIND_PATCH = KIND_PATCH
KIND_SOURCE = KIND_SOURCE
KIND_PATTERN = KIND_PATTERN
KIND_NOSOURCE = KIND_PATTERN
STEP_IGNORE = SOLVER_TRANSACTION_IGNORE
STEP_ERASE = SOLVER_TRANSACTION_ERASE
STEP_REINSTALLED = SOLVER_TRANSACTION_REINSTALLED
STEP_DOWNGRADED = SOLVER_TRANSACTION_DOWNGRADED
STEP_CHANGED = SOLVER_TRANSACTION_CHANGED
STEP_UPGRADED = SOLVER_TRANSACTION_UPGRADED
STEP_OBSOLETED = SOLVER_TRANSACTION_OBSOLETED
STEP_INSTALL = SOLVER_TRANSACTION_INSTALL
STEP_REINSTALL = SOLVER_TRANSACTION_REINSTALL
STEP_DOWNGRADE = SOLVER_TRANSACTION_DOWNGRADE
STEP_CHANGE = SOLVER_TRANSACTION_CHANGE
STEP_UPGRADE = SOLVER_TRANSACTION_UPGRADE
STEP_OBSOLETES = SOLVER_TRANSACTION_OBSOLETES
STEP_MULTIINSTALL = SOLVER_TRANSACTION_MULTIINSTALL
STEP_MULTIREINSTALL = SOLVER_TRANSACTION_MULTIREINSTALL
TRANSACTION_MODE_ACTIVE = SOLVER_TRANSACTION_SHOW_ACTIVE   Modes
TRANSACTION_MODE_ALL = SOLVER_TRANSACTION_SHOW_ALL
TRANSACTION_MODE_OBSOLETES = SOLVER_TRANSACTION_SHOW_OBSOLETES
TRANSACTION_MODE_MULTIINSTALL = SOLVER_TRANSACTION_SHOW_MULTIINSTALL
TRANSACTION_MODE_IS_REINSTALL = SOLVER_TRANSACTION_CHANGE_IS_REINSTALL
TRANSACTION_MODE_MERGE_VENDORCHANGES = SOLVER_TRANSACTION_MERGE_VENDORCHANGES
TRANSACTION_MODE_MERGE_ARCHCHANGES = SOLVER_TRANSACTION_MERGE_ARCHCHANGES
TRANSACTION_MODE_RPM_ONLY = SOLVER_TRANSACTION_RPM_ONLY
TRANSACTION_KEEP_ORDERDATA = SOLVER_TRANSACTION_KEEP_ORDERDATA   order() flag

[Validate]