1
/*---------------------------------------------------------------------\
3
| |__ / \ / / . \ . \ |
8
\---------------------------------------------------------------------*/
9
/** \file zypp/parser/RepoFileReader.cc
13
#include "zypp/base/Logger.h"
14
#include "zypp/base/String.h"
15
#include "zypp/base/InputStream.h"
16
#include "zypp/base/UserRequestException.h"
18
#include "zypp/parser/IniDict.h"
19
#include "zypp/parser/ServiceFileReader.h"
20
#include "zypp/ServiceInfo.h"
23
using zypp::parser::IniDict;
25
///////////////////////////////////////////////////////////////////
27
{ /////////////////////////////////////////////////////////////////
28
///////////////////////////////////////////////////////////////////
30
{ /////////////////////////////////////////////////////////////////
32
class ServiceFileReader::Impl
35
static void parseServices( const Pathname & file,
36
const ServiceFileReader::ProcessService & callback );
39
void ServiceFileReader::Impl::parseServices( const Pathname & file,
40
const ServiceFileReader::ProcessService & callback/*,
41
const ProgressData::ReceiverFnc &progress*/ )
44
if( is.stream().fail() )
46
ZYPP_THROW(Exception("Failed to open service file"));
49
parser::IniDict dict(is);
50
for ( parser::IniDict::section_const_iterator its = dict.sectionsBegin();
51
its != dict.sectionsEnd();
54
MIL << (*its) << endl;
56
ServiceInfo service(*its);
58
for ( IniDict::entry_const_iterator it = dict.entriesBegin(*its);
59
it != dict.entriesEnd(*its);
62
// MIL << (*it).first << endl;
63
if ( it->first == "name" )
64
service.setName( it->second );
65
else if ( it->first == "url" && ! it->second.empty() )
66
service.setUrl( Url (it->second) );
67
else if ( it->first == "enabled" )
68
service.setEnabled( str::strToTrue( it->second ) );
69
else if ( it->first == "autorefresh" )
70
service.setAutorefresh( str::strToTrue( it->second ) );
71
else if ( it->first == "type" )
72
service.setType( repo::ServiceType(it->second) );
73
else if ( it->first == "repostoenable" )
75
std::vector<std::string> aliases;
76
str::splitEscaped( it->second, std::back_inserter(aliases) );
77
for_( ait, aliases.begin(), aliases.end() )
79
service.addRepoToEnable( *ait );
82
else if ( it->first == "repostodisable" )
84
std::vector<std::string> aliases;
85
str::splitEscaped( it->second, std::back_inserter(aliases) );
86
for_( ait, aliases.begin(), aliases.end() )
88
service.addRepoToDisable( *ait );
92
ERR << "Unknown attribute " << it->first << " ignored" << endl;
95
MIL << "Linking ServiceInfo with file " << file << endl;
96
service.setFilepath(file);
98
// add it to the list.
99
if ( !callback(service) )
100
ZYPP_THROW(AbortRequestException());
104
///////////////////////////////////////////////////////////////////
106
// CLASS NAME : RepoFileReader
108
///////////////////////////////////////////////////////////////////
110
ServiceFileReader::ServiceFileReader( const Pathname & repo_file,
111
const ProcessService & callback/*,
112
const ProgressData::ReceiverFnc &progress */)
114
Impl::parseServices(repo_file, callback/*, progress*/);
115
//MIL << "Done" << endl;
118
ServiceFileReader::~ServiceFileReader()
121
std::ostream & operator<<( std::ostream & str, const ServiceFileReader & obj )
126
/////////////////////////////////////////////////////////////////
127
} // namespace parser
128
///////////////////////////////////////////////////////////////////
129
/////////////////////////////////////////////////////////////////
131
///////////////////////////////////////////////////////////////////