1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/solver/detail/SystemCheck.cc
16 #include "zypp/base/LogTools.h"
17 #include "zypp/base/IOStream.h"
18 #include "zypp/base/String.h"
20 #include "zypp/ZYppFactory.h"
21 #include "zypp/ZConfig.h"
22 #include "zypp/Pathname.h"
23 #include "zypp/PathInfo.h"
24 #include "zypp/solver/detail/SystemCheck.h"
28 ///////////////////////////////////////////////////////////////////
30 { /////////////////////////////////////////////////////////////////
33 CapabilitySet _require;
34 CapabilitySet _conflict;
36 typedef vector<string> CapList;
38 const SystemCheck & SystemCheck::instance()
40 static SystemCheck _val;
45 SystemCheck::SystemCheck() {
47 _file = ZConfig::instance().solver_checkSystemFile();
52 bool SystemCheck::setFile(const Pathname & file) const{
53 MIL << "Setting checkFile to : " << file << endl;
59 const Pathname & SystemCheck::file() {
63 const CapabilitySet & SystemCheck::requiredSystemCap() const{
67 const CapabilitySet & SystemCheck::conflictSystemCap() const{
71 bool SystemCheck::loadFile() const{
72 Target_Ptr trg( getZYpp()->getTarget() );
74 _file = trg->assertRootPrefix( _file );
77 if ( ! pi.isFile() ) {
78 WAR << "Can't read " << _file << " " << pi << endl;
85 std::ifstream infile( _file.c_str() );
86 for( iostr::EachLine in( infile ); in; in.next() ) {
87 std::string l( str::trim(*in) );
88 if ( ! l.empty() && l[0] != '#' )
91 str::split( l, back_inserter(capList), ":" );
92 if (capList.size() == 2 ) {
93 CapList::iterator it = capList.begin();
94 if (*it == "requires") {
95 _require.insert(Capability(*(it+1)));
96 } else if (*it == "conflicts") {
97 _conflict.insert(Capability(*(it+1)));
99 ERR << "Wrong parameter: " << l << endl;
102 ERR << "Wrong line: " << l << endl;
106 MIL << "Read " << pi << endl;
111 /******************************************************************
113 ** FUNCTION NAME : operator<<
114 ** FUNCTION TYPE : std::ostream &
116 std::ostream & operator<<( std::ostream & str, const SystemCheck & obj )
118 str << _file << endl;
119 str << "requires" << endl;
120 for (CapabilitySet::const_iterator it = _require.begin(); it != _require.end(); ++it)
121 str << " " << *it << endl;
123 str << "conflicts" << endl;
124 for (CapabilitySet::const_iterator it = _conflict.begin(); it != _conflict.end(); ++it)
125 str << " " << *it << endl;
130 /////////////////////////////////////////////////////////////////
132 ///////////////////////////////////////////////////////////////////