3 * Easy-to use interface to the ZYPP dependency resolver
5 * Author: Stefan Hundhammer <sh@suse.de>
9 #ifndef ZYPP_PROBLEMSOLUTION_H
10 #define ZYPP_PROBLEMSOLUTION_H
15 #include "zypp/base/ReferenceCounted.h"
16 #include "zypp/base/PtrTypes.h"
17 #include "zypp/Resolver.h"
18 #include "zypp/solver/detail/Resolver.h"
19 #include "zypp/ResolverProblem.h"
20 #include "zypp/solver/detail/SolutionAction.h"
21 #include "zypp/solver/detail/Types.h"
23 /////////////////////////////////////////////////////////////////////////
25 { ///////////////////////////////////////////////////////////////////////
29 * Class representing one possible solution to one problem found during resolving
31 * All problems should have at least 2-3 (mutually exclusive) solutions:
33 * - Undo: Do not perform the offending transaction
34 * (do not install the package that had unsatisfied requirements,
35 * do not remove the package that would break other packages' requirements)
37 * - Remove referrers: Remove all packages that would break because
38 * they depend on the package that is requested to be removed
40 * - Ignore: Inject artificial "provides" for a missing requirement
41 * (pretend that requirement is satisfied)
43 class ProblemSolution : public base::ReferenceCounted
49 * In particular, delete all members of _actions.
56 ResolverProblem_Ptr _problem;
57 solver::detail::CSolutionActionList _actions;
58 std::string _description;
66 ProblemSolution( ResolverProblem_Ptr parent, const std::string & description, const std::string & details );
73 // ---------------------------------- I/O
75 friend std::ostream& operator<<(std::ostream&, const ProblemSolution & solution);
76 friend std::ostream& operator<<(std::ostream&, const ProblemSolutionList & solutionlist);
77 friend std::ostream& operator<<(std::ostream&, const CProblemSolutionList & solutionlist);
79 // ---------------------------------- accessors
81 * Return a one-line text description of this solution.
83 std::string description() const { return _description; }
86 * Return a (possibly multi-line) detailed description of this
87 * solution or an empty string if there are no useful details.
89 std::string details() const { return _details; }
92 * Return the parent dependency problem.
94 ResolverProblem_Ptr problem() const { return _problem; }
96 // ---------------------------------- methods
99 * Apply this solution, i.e. execute all of its actions.
101 * Returns 'true' on success, 'false' if actions could not be performed.
103 bool apply (solver::detail::Resolver & resolver);
106 * Add an action to the actions list.
108 void addAction( solver::detail::SolutionAction_constPtr action );
113 ///////////////////////////////////////////////////////////////////////
115 /////////////////////////////////////////////////////////////////////////
117 #endif // ZYPP_PROBLEMSOLUTION_H