1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/sat/Pool.cc
15 #include "zypp/base/Easy.h"
16 #include "zypp/base/Logger.h"
17 #include "zypp/base/Gettext.h"
18 #include "zypp/base/Exception.h"
20 #include "zypp/AutoDispose.h"
22 #include "zypp/sat/detail/PoolImpl.h"
23 #include "zypp/sat/Pool.h"
24 #include "zypp/sat/LookupAttr.h"
26 ///////////////////////////////////////////////////////////////////
28 { /////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////
31 { /////////////////////////////////////////////////////////////////
33 const std::string & Pool::systemRepoAlias()
34 { return detail::PoolImpl::systemRepoAlias(); }
36 ::_Pool * Pool::get() const
37 { return myPool().getPool(); }
39 Pool::size_type Pool::capacity() const
40 { return myPool()->nsolvables; }
42 const SerialNumber & Pool::serial() const
43 { return myPool().serial(); }
45 void Pool::prepare() const
46 { return myPool().prepare(); }
48 bool Pool::reposEmpty() const
49 { return ! myPool()->nrepos; }
51 Pool::size_type Pool::reposSize() const
52 { return myPool()->nrepos; }
54 Pool::RepositoryIterator Pool::reposBegin() const
55 { return RepositoryIterator( myPool()->repos ); }
57 Pool::RepositoryIterator Pool::reposEnd() const
58 { return RepositoryIterator( myPool()->repos+myPool()->nrepos ); }
60 bool Pool::solvablesEmpty() const
62 // return myPool()->nsolvables;
63 // nsolvables is the array size including
65 for_( it, reposBegin(), reposEnd() )
67 if ( ! it->solvablesEmpty() )
73 Pool::size_type Pool::solvablesSize() const
75 // Do not return myPool()->nsolvables;
76 // nsolvables is the array size including
79 for_( it, reposBegin(), reposEnd() )
81 ret += it->solvablesSize();
86 Pool::SolvableIterator Pool::solvablesBegin() const
87 { return SolvableIterator( myPool().getFirstId() ); }
89 Pool::SolvableIterator Pool::solvablesEnd() const
90 { return SolvableIterator(); }
92 Repository Pool::reposInsert( const std::string & alias_r )
94 Repository ret( reposFind( alias_r ) );
98 ret = Repository( myPool()._createRepo( alias_r ) );
99 if ( ret.isSystemRepo() )
101 // autoprovide (dummy) RepoInfo
103 info.setAlias( alias_r );
104 info.setName( alias_r );
105 info.setAutorefresh( true );
106 info.setEnabled( true );
112 Repository Pool::reposFind( const std::string & alias_r ) const
114 for_( it, reposBegin(), reposEnd() )
116 if ( alias_r == it->alias() )
122 Repository Pool::findSystemRepo() const
124 return Repository( myPool().systemRepo() );
127 Repository Pool::systemRepo()
129 if ( myPool().systemRepo() )
130 return Repository( myPool().systemRepo() );
131 return reposInsert( systemRepoAlias() );
134 Repository Pool::addRepoSolv( const Pathname & file_r, const std::string & alias_r )
136 // Using a temporay repo! (The additional parenthesis are required.)
137 AutoDispose<Repository> tmprepo( (Repository::EraseFromPool()) );
138 *tmprepo = reposInsert( alias_r );
139 tmprepo->addSolv( file_r );
141 // no exceptions so we keep it:
142 tmprepo.resetDispose();
146 Repository Pool::addRepoSolv( const Pathname & file_r )
147 { return addRepoSolv( file_r, file_r.basename() ); }
149 Repository Pool::addRepoSolv( const Pathname & file_r, const RepoInfo & info_r )
151 Repository ret( addRepoSolv( file_r, info_r.alias() ) );
152 ret.setInfo( info_r );
156 /////////////////////////////////////////////////////////////////
158 Repository Pool::addRepoHelix( const Pathname & file_r, const std::string & alias_r )
160 // Using a temporay repo! (The additional parenthesis are required.)
161 AutoDispose<Repository> tmprepo( (Repository::EraseFromPool()) );
162 *tmprepo = reposInsert( alias_r );
163 tmprepo->addHelix( file_r );
165 // no exceptions so we keep it:
166 tmprepo.resetDispose();
170 Repository Pool::addRepoHelix( const Pathname & file_r )
171 { return addRepoHelix( file_r, file_r.basename() ); }
173 Repository Pool::addRepoHelix( const Pathname & file_r, const RepoInfo & info_r )
175 Repository ret( addRepoHelix( file_r, info_r.alias() ) );
176 ret.setInfo( info_r );
180 /////////////////////////////////////////////////////////////////
182 void Pool::setTextLocale( const Locale & locale_r )
183 { myPool().setTextLocale( locale_r ); }
185 void Pool::setRequestedLocales( const LocaleSet & locales_r )
186 { myPool().setRequestedLocales( locales_r ); }
188 bool Pool::addRequestedLocale( const Locale & locale_r )
189 { return myPool().addRequestedLocale( locale_r ); }
191 bool Pool::eraseRequestedLocale( const Locale & locale_r )
192 { return myPool().eraseRequestedLocale( locale_r ); }
194 const LocaleSet & Pool::getRequestedLocales() const
195 { return myPool().getRequestedLocales(); }
197 bool Pool::isRequestedLocale( const Locale & locale_r ) const
198 { return myPool().isRequestedLocale( locale_r ); }
200 const LocaleSet & Pool::getAvailableLocales() const
201 { return myPool().getAvailableLocales(); }
203 bool Pool::isAvailableLocale( const Locale & locale_r ) const
204 { return myPool().isAvailableLocale( locale_r ); }
206 bool Pool::multiversionEmpty() const { return myPool().multiversionList().empty(); }
207 size_t Pool::multiversionSize() const { return myPool().multiversionList().size(); }
208 Pool::MultiversionIterator Pool::multiversionBegin() const { return myPool().multiversionList().begin(); }
209 Pool::MultiversionIterator Pool::multiversionEnd() const { return myPool().multiversionList().end(); }
210 bool Pool::isMultiversion( IdString ident_r ) const { return myPool().isMultiversion( ident_r ); }
212 /******************************************************************
214 ** FUNCTION NAME : operator<<
215 ** FUNCTION TYPE : std::ostream &
217 std::ostream & operator<<( std::ostream & str, const Pool & obj )
219 return str << "sat::pool(" << obj.serial() << ")["
220 << obj.capacity() << "]{"
221 << obj.reposSize() << "repos|"
222 << obj.solvablesSize() << "slov}";
225 /////////////////////////////////////////////////////////////////
227 ///////////////////////////////////////////////////////////////////
228 /////////////////////////////////////////////////////////////////
230 ///////////////////////////////////////////////////////////////////