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 << "==============================" << endl;
42 os << problem._description << endl;
43 os << problem._details << endl;
44 os << "------------------------------" << endl;
45 os << problem._solutions;
46 os << "==============================" << endl;
52 operator<<( ostream& os, const ResolverProblemList & problemlist)
54 for (ResolverProblemList::const_iterator iter = problemlist.begin(); iter != problemlist.end(); ++iter) {
55 if (iter != problemlist.begin())
62 //---------------------------------------------------------------------------
67 ResolverProblem::ResolverProblem( const string & description, const string & details )
68 : _description (description)
76 ResolverProblem::~ResolverProblem()
81 * Return the possible solutions to this problem.
82 * All problems should have at least 2-3 (mutually exclusive) solutions:
84 * - Undo: Do not perform the offending transaction
85 * (do not install the package that had unsatisfied requirements,
86 * do not remove the package that would break other packages' requirements)
88 * - Remove referrers: Remove all packages that would break because
89 * they depend on the package that is requested to be removed
91 * - Ignore: Inject artificial "provides" for a missing requirement
92 * (pretend that requirement is satisfied)
96 ResolverProblem::solutions() const
102 * Add a solution to this problem. This class takes over ownership of
103 * the problem and will delete it when neccessary.
107 ResolverProblem::addSolution( ProblemSolution_Ptr solution,
111 _solutions.push_front (solution);
113 _solutions.push_back (solution);
118 ResolverProblem::clear()
123 ///////////////////////////////////////////////////////////////////////
125 /////////////////////////////////////////////////////////////////////////