libzypp  17.14.0
PoolImpl.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_SAT_DETAIL_POOLIMPL_H
13 #define ZYPP_SAT_DETAIL_POOLIMPL_H
14 extern "C"
15 {
16 #include <solv/pool.h>
17 #include <solv/repo.h>
18 #include <solv/solvable.h>
19 #include <solv/poolarch.h>
20 #include <solv/repo_solv.h>
21 }
22 #include <iosfwd>
23 
24 #include "zypp/base/Hash.h"
25 #include "zypp/base/NonCopyable.h"
26 #include "zypp/base/SerialNumber.h"
27 #include "zypp/base/SetTracker.h"
29 #include "zypp/sat/SolvableSpec.h"
30 #include "zypp/sat/Queue.h"
31 #include "zypp/RepoInfo.h"
32 #include "zypp/Locale.h"
33 #include "zypp/Capability.h"
34 #include "zypp/IdString.h"
35 
37 namespace zypp
38 {
39 
40  namespace sat
41  {
42  class SolvableSet;
44  namespace detail
45  {
46 
48  //
49  // CLASS NAME : PoolImpl
50  //
52  class PoolImpl : private base::NonCopyable
53  {
54  public:
56  PoolImpl();
57 
59  ~PoolImpl();
60 
63  { return _pool; }
64 
65  public:
67  const SerialNumber & serial() const
68  { return _serial; }
69 
71  const SerialNumber & serialIDs() const
72  { return _serialIDs; }
73 
77  void prepare() const;
78 
79  private:
83  void setDirty( const char * a1 = 0, const char * a2 = 0, const char * a3 = 0 );
84 
87  void localeSetDirty( const char * a1 = 0, const char * a2 = 0, const char * a3 = 0 );
88 
91  void depSetDirty( const char * a1 = 0, const char * a2 = 0, const char * a3 = 0 );
92 
94  static detail::IdType nsCallback( CPool *, void * data, detail::IdType lhs, detail::IdType rhs );
95 
96  public:
98  static const std::string & systemRepoAlias();
99 
100  bool isSystemRepo( CRepo * repo_r ) const
101  { return repo_r && _pool->installed == repo_r; }
102 
103  CRepo * systemRepo() const
104  { return _pool->installed; }
105 
107  Pathname rootDir() const
108  {
109  const char * rd = ::pool_get_rootdir( _pool );
110  return( rd ? rd : "/" );
111  }
112 
114  void rootDir( const Pathname & root_r )
115  {
116  if ( root_r.empty() || root_r == "/" )
117  ::pool_set_rootdir( _pool, nullptr );
118  else
119  ::pool_set_rootdir( _pool, root_r.c_str() );
120  }
121 
122  public:
129  CRepo * _createRepo( const std::string & name_r );
130 
132  void _deleteRepo( CRepo * repo_r );
133 
138  int _addSolv( CRepo * repo_r, FILE * file_r );
139 
144  int _addHelix( CRepo * repo_r, FILE * file_r );
145 
147  detail::SolvableIdType _addSolvables( CRepo * repo_r, unsigned count_r );
149 
151  void _postRepoAdd( CRepo * repo_r );
152 
153  public:
155  bool validSolvable( const CSolvable & slv_r ) const
156  { return slv_r.repo; }
158  bool validSolvable( SolvableIdType id_r ) const
159  { return id_r < unsigned(_pool->nsolvables) && validSolvable( _pool->solvables[id_r] ); }
161  bool validSolvable( const CSolvable * slv_r ) const
162  { return _pool->solvables <= slv_r && slv_r <= _pool->solvables+_pool->nsolvables && validSolvable( *slv_r ); }
163 
164  public:
165  CPool * getPool() const
166  { return _pool; }
167 
169  CRepo * getRepo( RepoIdType id_r ) const
170  { return id_r; }
171 
176  {
177  if ( validSolvable( id_r ) )
178  return &_pool->solvables[id_r];
179  return 0;
180  }
181 
182  public:
187  { return getNextId( 1 ); }
188 
195  {
196  for( ++id_r; id_r < unsigned(_pool->nsolvables); ++id_r )
197  {
198  if ( validSolvable( _pool->solvables[id_r] ) )
199  return id_r;
200  }
201  return noSolvableId;
202  }
203 
204  public:
206  const RepoInfo & repoInfo( RepoIdType id_r )
207  { return _repoinfos[id_r]; }
209  void setRepoInfo( RepoIdType id_r, const RepoInfo & info_r );
212  { _repoinfos.erase( id_r ); }
213 
214  public:
218  const sat::detail::IdType whatProvidesData( unsigned offset_r )
219  { return _pool->whatprovidesdata[offset_r]; }
220 
224  unsigned whatProvides( Capability cap_r )
225  { prepare(); return ::pool_whatprovides( _pool, cap_r.id() ); }
226 
227  public:
234 
235 
236  void setTextLocale( const Locale & locale_r );
237 
238 
242  void initRequestedLocales( const LocaleSet & locales_r );
243 
246  { return _requestedLocalesTracker.added(); }
247 
250  { return _requestedLocalesTracker.removed(); }
251 
254  { return _requestedLocalesTracker.current(); }
255 
256  bool isRequestedLocale( const Locale & locale_r ) const
257  { return _requestedLocalesTracker.contains( locale_r ); }
258 
260  void setRequestedLocales( const LocaleSet & locales_r );
262  bool addRequestedLocale( const Locale & locale_r );
264  bool eraseRequestedLocale( const Locale & locale_r );
265 
267  const LocaleSet & getAvailableLocales() const;
268 
269  bool isAvailableLocale( const Locale & locale_r ) const
270  {
271  const LocaleSet & avl( getAvailableLocales() );
272  LocaleSet::const_iterator it( avl.find( locale_r ) );
273  return it != avl.end();
274  }
275 
277 
279  const TrackedLocaleIds & trackedLocaleIds() const;
281 
282  public:
286 
287  const MultiversionList & multiversionList() const;
288 
289  bool isMultiversion( const Solvable & solv_r ) const;
290 
293 
294  public:
299  { return _autoinstalled; }
300 
302  void setAutoInstalled( const StringQueue & autoInstalled_r )
303  { _autoinstalled = autoInstalled_r; }
304 
305  bool isOnSystemByUser( IdString ident_r ) const
306  { return !_autoinstalled.contains( ident_r.id() ); }
307 
308  bool isOnSystemByAuto( IdString ident_r ) const
309  { return _autoinstalled.contains( ident_r.id() ); }
311 
312  public:
316  void setNeedrebootSpec( sat::SolvableSpec needrebootSpec_r )
317  {
318  _needrebootSpec = std::move(needrebootSpec_r);
320  }
321 
323  bool isNeedreboot( const Solvable & solv_r ) const
324  { return _needrebootSpec.contains( solv_r ); }
326 
327  public:
329  const std::set<std::string> & requiredFilesystems() const;
330 
331  private:
341  std::map<RepoIdType,RepoInfo> _repoinfos;
342 
345  mutable scoped_ptr<TrackedLocaleIds> _trackedLocaleIdsPtr;
346 
347  mutable scoped_ptr<LocaleSet> _availableLocalesPtr;
348 
350  void multiversionListInit() const;
351  mutable scoped_ptr<MultiversionList> _multiversionListPtr;
352 
355 
358 
360  mutable scoped_ptr<std::set<std::string> > _requiredFilesystemsPtr;
361  };
363 
365  } // namespace detail
368  } // namespace sat
371 } // namespace zypp
373 #define POOL_SETDIRTY
374 #endif // ZYPP_SAT_DETAIL_POOLIMPL_H