1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
4 * Easy-to use interface to the ZYPP dependency resolver
6 * Copyright (C) 2000-2002 Ximian, Inc.
7 * Copyright (C) 2005 SUSE Linux Products GmbH
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License,
11 * version 2, as published by the Free Software Foundation.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
24 #include "zypp/ResolverProblem.h"
25 #include "zypp/ProblemSolution.h"
29 /////////////////////////////////////////////////////////////////////////
31 { ///////////////////////////////////////////////////////////////////////
33 IMPL_PTR_TYPE(ResolverProblem);
35 //---------------------------------------------------------------------------
38 operator<<( ostream& os, const ResolverProblem & problem)
40 os << "Problem:" << endl;
41 os << problem._description << endl;
42 os << problem._details << endl;
43 os << problem._solutions;
49 operator<<( ostream& os, const ResolverProblemList & problemlist)
51 for (ResolverProblemList::const_iterator iter = problemlist.begin(); iter != problemlist.end(); ++iter) {
52 if (iter != problemlist.begin())
59 //---------------------------------------------------------------------------
64 ResolverProblem::ResolverProblem( const string & description, const string & details )
65 : _description (description)
73 ResolverProblem::~ResolverProblem()
78 * Return the possible solutions to this problem.
79 * All problems should have at least 2-3 (mutually exclusive) solutions:
81 * - Undo: Do not perform the offending transaction
82 * (do not install the package that had unsatisfied requirements,
83 * do not remove the package that would break other packages' requirements)
85 * - Remove referrers: Remove all packages that would break because
86 * they depend on the package that is requested to be removed
88 * - Ignore: Inject artificial "provides" for a missing requirement
89 * (pretend that requirement is satisfied)
93 ResolverProblem::solutions() const
99 * Add a solution to this problem. This class takes over ownership of
100 * the problem and will delete it when neccessary.
104 ResolverProblem::addSolution( ProblemSolution_Ptr solution,
108 _solutions.push_front (solution);
110 _solutions.push_back (solution);
115 ResolverProblem::clear()
120 ///////////////////////////////////////////////////////////////////////
122 /////////////////////////////////////////////////////////////////////////