libzypp  14.48.5
Repository.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_SAT_REPOSITORY_H
13 #define ZYPP_SAT_REPOSITORY_H
14 
15 #include <iosfwd>
16 #include "zypp/Pathname.h"
18 #include "zypp/sat/LookupAttr.h" // LookupAttrTools.h included at EOF
19 #include "zypp/sat/Solvable.h"
20 #include "zypp/RepoInfo.h"
21 #include "zypp/Date.h"
22 #include "zypp/CpeId.h"
23 
25 namespace zypp
26 {
27 
28  namespace detail
29  {
30  struct ByRepository;
31  }
32 
34  //
35  // CLASS NAME : Repository
36  //
39  {
40  public:
41  typedef filter_iterator<detail::ByRepository, sat::detail::SolvableIterator> SolvableIterator;
44 
46 
47  typedef std::string ContentRevision;
48  typedef std::string ContentIdentifier;
49 
50  public:
53  : _id( sat::detail::noRepoId ) {}
54 
56  explicit Repository( IdType id_r )
57  : _id( id_r ) {}
58 
59  public:
61  static const Repository noRepository;
62 
64  explicit operator bool() const
65  { return get() != nullptr; }
66 
68  static const std::string & systemRepoAlias();
69 
71  bool isSystemRepo() const;
72 
73  public:
83  std::string alias() const;
84 
86  std::string name() const;
87 
89  std::string label() const;
90 
92  std::string asUserString() const
93  { return label(); }
94 
95  public:
100 
113 
115  bool hasContentIdentifier( const ContentIdentifier & id_r ) const;
116 
133  Date generatedTimestamp() const;
134 
152 
156  Keywords keywords() const;
157 
159  bool hasKeyword( const std::string & val_r ) const;
160 
169  bool maybeOutdated() const;
170 
177  bool isUpdateRepo() const;
178 
185  bool providesUpdatesFor( const CpeId & cpeid_r ) const;
186 
188  bool solvablesEmpty() const;
189 
191  size_type solvablesSize() const;
192 
195 
198 
199  public:
200 
202  class ProductInfoIterator;
203 
211  ProductInfoIterator compatibleWithProductBegin() const;
212 
218  ProductInfoIterator compatibleWithProductEnd() const;
219 
228  ProductInfoIterator updatesProductBegin() const;
229 
235  ProductInfoIterator updatesProductEnd() const;
236 
237  public:
239  RepoInfo info() const;
240 
246  void setInfo( const RepoInfo & info_r );
247 
249  void clearInfo();
250 
251  public:
253  void eraseFromPool();
254 
256  struct EraseFromPool;
257 
258  public:
260  Repository nextInPool() const;
261 
262  public:
274  void addSolv( const Pathname & file_r );
275 
283  void addHelix( const Pathname & file_r );
284 
286  sat::Solvable::IdType addSolvables( unsigned count_r );
289  { return addSolvables( 1 ); }
291 
292  public:
294  sat::detail::CRepo * get() const;
296  IdType id() const { return _id; }
305  int satInternalPriority() const;
306  int satInternalSubPriority() const;
308 
309  private:
311  };
313 
315  std::ostream & operator<<( std::ostream & str, const Repository & obj );
316 
318  std::ostream & dumpAsXmlOn( std::ostream & str, const Repository & obj );
319 
321  inline bool operator==( const Repository & lhs, const Repository & rhs )
322  { return lhs.get() == rhs.get(); }
323 
325  inline bool operator!=( const Repository & lhs, const Repository & rhs )
326  { return lhs.get() != rhs.get(); }
327 
329  inline bool operator<( const Repository & lhs, const Repository & rhs )
330  { return lhs.get() < rhs.get(); }
331 
333 
352  class Repository::ProductInfoIterator : public boost::iterator_adaptor<
353  Repository::ProductInfoIterator // Derived
354  , sat::LookupAttr::iterator // Base
355  , int // Value
356  , boost::forward_traversal_tag // CategoryOrTraversal
357  , int // Reference
358  >
359  {
360  public:
362  {}
363 
365  std::string label() const;
366 
368  CpeId cpeId() const;
369 
370  private:
371  friend class Repository;
373  explicit ProductInfoIterator( sat::SolvAttr attr_r, Repository repo_r );
374 
375  private:
377  int dereference() const { return 0; }
378  };
380 
382  //
383  // CLASS NAME : Repository::EraseFromPool
384  //
412  {
413  void operator()( Repository repository_r ) const
414  { repository_r.eraseFromPool(); }
415  };
417 
419  namespace detail
420  {
421  //
423  // CLASS NAME : RepositoryIterator
424  //
426  class RepositoryIterator : public boost::iterator_adaptor<
427  RepositoryIterator // Derived
428  , sat::detail::CRepo ** // Base
429  , Repository // Value
430  , boost::forward_traversal_tag // CategoryOrTraversal
431  , Repository // Reference
432  >
433  {
434  public:
436  : RepositoryIterator::iterator_adaptor_( 0 )
437  {}
438 
440  : RepositoryIterator::iterator_adaptor_( p )
441  {}
442 
443  private:
445 
447  { return Repository( *base() ); }
448 
449  void increment();
450  };
453  //
454  // CLASS NAME : ByRepository
455  //
458  {
459  public:
460  ByRepository( const Repository & repository_r ) : _repository( repository_r ) {}
463 
464  bool operator()( const sat::Solvable & slv_r ) const
465  { return slv_r.repository() == _repository; }
466 
467  private:
469  };
472  } // namespace detail
475 } // namespace zypp
477 
478 // Late include as sat::ArrayAttr requires Repository.h
480 
481 #endif // ZYPP_SAT_REPOSITORY_H
Repository repository() const
The Repository this Solvable belongs to.
Definition: Solvable.cc:121
RepoInfo info() const
Return any associated RepoInfo.
Definition: Repository.cc:273
RepositoryIterator(sat::detail::CRepo **p)
Definition: Repository.h:439
Functor filtering Solvable by Repository.
Definition: Repository.h:457
A Solvable object within the sat Pool.
Definition: Solvable.h:55
sat::ArrayAttr< std::string, std::string > Keywords
Definition: Repository.h:45
std::string alias() const
Short unique string to identify a repo.
Definition: Repository.cc:59
std::string name() const
Label to display for this repo.
Definition: Repository.cc:67
sat::Solvable::IdType addSolvable()
Definition: Repository.h:288
void addSolv(const Pathname &file_r)
Load Solvables from a solv-file.
Definition: Repository.cc:320
IdType id() const
Expert backdoor.
Definition: Repository.h:296
bool operator<(const Repository &lhs, const Repository &rhs)
Definition: Repository.h:329
std::string label() const
Product label.
Definition: Repository.cc:417
::_Repo CRepo
Wrapped libsolv C data type exposed as backdoor.
Definition: PoolMember.h:88
sat::Solvable::IdType addSolvables(unsigned count_r)
Add count_r new empty Solvable to this Repository.
Definition: Repository.cc:361
bool operator!=(const Repository &lhs, const Repository &rhs)
Definition: Repository.h:325
static const RepoIdType noRepoId(0)
Id to denote Repo::noRepository.
void clearInfo()
Remove any RepoInfo set for this repository.
Definition: Repository.cc:291
SolvableIterator solvablesEnd() const
Iterator behind the last Solvable.
Definition: Repository.cc:241
What is known about a repository.
Definition: RepoInfo.h:72
CRepo * RepoIdType
Id type to connect Repo and sat-repo.
Definition: PoolMember.h:154
Date generatedTimestamp() const
Timestamp when this repository was generated.
Definition: Repository.cc:109
Common Platform Enumearation (2.3) See http://cpe.mitre.org/ for more information on the Common Platf...
Definition: CpeId.h:31
Repository()
Default ctor creates noRepository.
Definition: Repository.h:52
LookupAttr::transformIterator based container to retrieve list attributes.
Definition: LookupAttr.h:591
CpeId cpeId() const
The Common Platform Enumeration name for this product.
Definition: Repository.cc:420
int satInternalSubPriority() const
Definition: Repository.cc:79
bool isSystemRepo() const
Return whether this is the system repository.
Definition: Repository.cc:53
ByRepository(const Repository &repository_r)
Definition: Repository.h:460
std::string ContentRevision
Definition: Repository.h:47
filter_iterator< detail::ByRepository, sat::detail::SolvableIterator > SolvableIterator
Definition: Repository.h:41
bool isUpdateRepo() const
Hint whether the Repo may provide updates for a product.
Definition: Repository.cc:194
sat::detail::size_type size_type
Definition: Repository.h:42
bool providesUpdatesFor(const CpeId &cpeid_r) const
Hint whether the Repo may provide updates for a product identified by it's CpeId. ...
Definition: Repository.cc:160
Repository nextInPool() const
Return next Repository in Pool (or noRepository).
Definition: Repository.cc:305
std::string asUserString() const
User string: label (alias or name)
Definition: Repository.h:92
ContentIdentifier contentIdentifier() const
Unique string identifying a repositories content.
Definition: Repository.cc:92
Functor removing Repository from it's Pool.
Definition: Repository.h:411
Store and operate on date (time_t).
Definition: Date.h:32
SolvableIterator solvablesBegin() const
Iterator to the first Solvable.
Definition: Repository.cc:231
Solvable attribute keys.
Definition: SolvAttr.h:40
Backlink to the associated PoolImpl.
Definition: PoolMember.h:114
sat::detail::CRepo * get() const
Expert backdoor.
Definition: Repository.cc:42
bool operator()(const sat::Solvable &slv_r) const
Definition: Repository.h:464
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Definition: Exception.cc:120
void setInfo(const RepoInfo &info_r)
Set RepoInfo for this repository.
Definition: Repository.cc:279
Date suggestedExpirationTimestamp() const
Suggested expiration timestamp.
Definition: Repository.cc:116
void operator()(Repository repository_r) const
Definition: Repository.h:413
friend class boost::iterator_core_access
Definition: Repository.h:376
Repository(IdType id_r)
PoolImpl ctor.
Definition: Repository.h:56
Query class for Repository related products.
Definition: Repository.h:352
ContentRevision contentRevision() const
Timestamp or arbitrary user supplied string.
Definition: Repository.cc:85
bool hasKeyword(const std::string &val_r) const
Whether val_r is present in keywords.
Definition: Repository.cc:136
Keywords keywords() const
repository keywords (tags)
Definition: Repository.cc:130
bool operator==(const Repository &lhs, const Repository &rhs)
Definition: Repository.h:321
bool solvablesEmpty() const
Whether Repository contains solvables.
Definition: Repository.cc:219
ByRepository(sat::detail::RepoIdType id_r)
Definition: Repository.h:461
SolvableIdType size_type
Definition: PoolMember.h:147
bool hasContentIdentifier(const ContentIdentifier &id_r) const
Whether id_r matches this repos content identifier.
Definition: Repository.cc:99
std::string label() const
Alias or name, according to ZConfig::repoLabelIsAlias.
Definition: Repository.cc:70
std::string ContentIdentifier
Definition: Repository.h:48
size_type solvablesSize() const
Number of solvables in Repository.
Definition: Repository.cc:225
void addHelix(const Pathname &file_r)
Load Solvables from a helix-file.
Definition: Repository.cc:339
Repository dereference() const
Definition: Repository.h:446
static const Repository noRepository
Represents no Repository.
Definition: Repository.h:61
int satInternalPriority() const
libsolv internal priorities.
Definition: Repository.cc:73
void eraseFromPool()
Remove this Repository from it's Pool.
Definition: Repository.cc:297
friend class boost::iterator_core_access
Definition: Repository.h:444
ProductInfoIterator updatesProductEnd() const
Get an iterator to the end of distos the repository provides upadates for.
Definition: Repository.cc:268
sat::detail::RepoIdType IdType
Definition: Repository.h:43
static const std::string & systemRepoAlias()
Reserved system repository alias .
Definition: Repository.cc:37
sat::detail::SolvableIdType IdType
Definition: Solvable.h:58
ProductInfoIterator compatibleWithProductEnd() const
Get an iterator to the end of the repository compatible distros.
Definition: Repository.cc:257
std::ostream & dumpAsXmlOn(std::ostream &str, const _Tp &obj, const std::string &name_r)
Definition: Xml.h:185
ProductInfoIterator updatesProductBegin() const
Get an iterator to the beginning of distos the repository provides upadates for.
Definition: Repository.cc:262
bool maybeOutdated() const
The suggested expiration date of this repository already passed.
Definition: Repository.cc:144
ProductInfoIterator compatibleWithProductBegin() const
Get an iterator to the beginning of the repository compatible distros.
Definition: Repository.cc:251