libzypp  17.28.8
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/base/Iterator.h>
17 #include <zypp/Pathname.h>
19 #include <zypp/sat/LookupAttr.h> // LookupAttrTools.h included at EOF
20 #include <zypp/sat/Solvable.h>
21 #include <zypp/RepoInfo.h>
22 #include <zypp/Date.h>
23 #include <zypp/CpeId.h>
24 
26 namespace zypp
27 {
28 
29  namespace detail
30  {
31  struct ByRepository;
32  }
33 
35  //
36  // CLASS NAME : Repository
37  //
40  {
41  public:
42  typedef filter_iterator<detail::ByRepository, sat::detail::SolvableIterator> SolvableIterator;
45 
47 
48  typedef std::string ContentRevision;
49  typedef std::string ContentIdentifier;
50 
51  public:
54  : _id( sat::detail::noRepoId ) {}
55 
57  explicit Repository( IdType id_r )
58  : _id( id_r ) {}
59 
60  public:
62  static const Repository noRepository;
63 
65  explicit operator bool() const
66  { return get() != nullptr; }
67 
69  static const std::string & systemRepoAlias();
70 
72  bool isSystemRepo() const;
73 
74  public:
84  std::string alias() const;
85 
87  std::string name() const;
88 
90  std::string label() const;
91 
93  std::string asUserString() const
94  { return label(); }
95 
96  public:
101 
114 
116  bool hasContentIdentifier( const ContentIdentifier & id_r ) const;
117 
134  Date generatedTimestamp() const;
135 
153 
157  Keywords keywords() const;
158 
160  bool hasKeyword( const std::string & val_r ) const;
161 
170  bool maybeOutdated() const;
171 
178  bool isUpdateRepo() const;
179 
186  bool providesUpdatesFor( const CpeId & cpeid_r ) const;
187 
189  bool solvablesEmpty() const;
190 
192  size_type solvablesSize() const;
193 
196 
199 
202 
203  public:
204 
206  class ProductInfoIterator;
207 
215  ProductInfoIterator compatibleWithProductBegin() const;
216 
222  ProductInfoIterator compatibleWithProductEnd() const;
223 
226 
227 
236  ProductInfoIterator updatesProductBegin() const;
237 
243  ProductInfoIterator updatesProductEnd() const;
244 
247 
248  public:
250  RepoInfo info() const;
251 
257  void setInfo( const RepoInfo & info_r );
258 
260  void clearInfo();
261 
262  public:
264  void eraseFromPool();
265 
267  struct EraseFromPool;
268 
269  public:
271  Repository nextInPool() const;
272 
273  public:
285  void addSolv( const Pathname & file_r );
286 
294  void addHelix( const Pathname & file_r );
295 
303  void addTesttags(const Pathname &file_r);
304 
306  sat::Solvable::IdType addSolvables( unsigned count_r );
309  { return addSolvables( 1 ); }
311 
312  public:
314  sat::detail::CRepo * get() const;
316  IdType id() const { return _id; }
325  int satInternalPriority() const;
326  int satInternalSubPriority() const;
328  private:
330  };
332 
334  std::ostream & operator<<( std::ostream & str, const Repository & obj );
335 
337  std::ostream & dumpAsXmlOn( std::ostream & str, const Repository & obj );
338 
340  inline bool operator==( const Repository & lhs, const Repository & rhs )
341  { return lhs.get() == rhs.get(); }
342 
344  inline bool operator!=( const Repository & lhs, const Repository & rhs )
345  { return lhs.get() != rhs.get(); }
346 
348  inline bool operator<( const Repository & lhs, const Repository & rhs )
349  { return lhs.get() < rhs.get(); }
350 
352 
371  class Repository::ProductInfoIterator : public boost::iterator_adaptor<
372  Repository::ProductInfoIterator // Derived
373  , sat::LookupAttr::iterator // Base
374  , int // Value
375  , boost::forward_traversal_tag // CategoryOrTraversal
376  , int // Reference
377  >
378  {
379  public:
381  {}
382 
384  std::string label() const;
385 
387  CpeId cpeId() const;
388 
389  private:
390  friend class Repository;
392  explicit ProductInfoIterator( sat::SolvAttr attr_r, Repository repo_r );
393 
394  private:
396  int dereference() const { return 0; }
397  };
399 
402  { return makeIterable( compatibleWithProductBegin(), compatibleWithProductEnd() ); }
403 
406  { return makeIterable( updatesProductBegin(), updatesProductEnd() ); }
407 
409  //
410  // CLASS NAME : Repository::EraseFromPool
411  //
439  {
440  void operator()( Repository repository_r ) const
441  { repository_r.eraseFromPool(); }
442  };
444 
446  namespace detail
447  {
449  //
450  // CLASS NAME : RepositoryIterator
451  //
453  class RepositoryIterator : public boost::iterator_adaptor<
454  RepositoryIterator // Derived
455  , sat::detail::CRepo ** // Base
456  , Repository // Value
457  , boost::forward_traversal_tag // CategoryOrTraversal
458  , Repository // Reference
459  >
460  {
461  public:
463  : RepositoryIterator::iterator_adaptor_( 0 )
464  {}
465 
467  : RepositoryIterator::iterator_adaptor_( p )
468  {}
469 
470  private:
472 
474  { return Repository( *base() ); }
475 
476  void increment();
477  };
480  //
481  // CLASS NAME : ByRepository
482  //
485  {
486  public:
487  ByRepository( const Repository & repository_r ) : _repository( repository_r ) {}
490 
491  bool operator()( const sat::Solvable & slv_r ) const
492  { return slv_r.repository() == _repository; }
493 
494  private:
496  };
499  } // namespace detail
501 
503  { return makeIterable( solvablesBegin(), solvablesEnd() ); }
504 
506 } // namespace zypp
508 
509 // Late include as sat::ArrayAttr requires Repository.h
511 
512 #endif // ZYPP_SAT_REPOSITORY_H
Common Platform Enumearation (2.3) See http://cpe.mitre.org/ for more information on the Common Platf...
Definition: CpeId.h:32
Store and operate on date (time_t).
Definition: Date.h:33
What is known about a repository.
Definition: RepoInfo.h:72
Query class for Repository related products.
Definition: Repository.h:378
std::string label() const
Product label.
Definition: Repository.cc:439
CpeId cpeId() const
The Common Platform Enumeration name for this product.
Definition: Repository.cc:442
friend class boost::iterator_core_access
Definition: Repository.h:395
Repository nextInPool() const
Return next Repository in Pool (or noRepository).
Definition: Repository.cc:305
int satInternalSubPriority() const
Definition: Repository.cc:79
static const Repository noRepository
Represents no Repository.
Definition: Repository.h:62
void addHelix(const Pathname &file_r)
Load Solvables from a helix-file.
Definition: Repository.cc:339
Repository()
Default ctor creates noRepository.
Definition: Repository.h:53
bool hasKeyword(const std::string &val_r) const
Whether val_r is present in keywords.
Definition: Repository.cc:136
std::string ContentIdentifier
Definition: Repository.h:49
bool isUpdateRepo() const
Hint whether the Repo may provide updates for a product.
Definition: Repository.cc:194
Keywords keywords() const
repository keywords (tags)
Definition: Repository.cc:130
sat::detail::CRepo * get() const
Expert backdoor.
Definition: Repository.cc:42
bool operator==(const Repository &lhs, const Repository &rhs)
Definition: Repository.h:340
sat::detail::RepoIdType IdType
Definition: Repository.h:44
bool solvablesEmpty() const
Whether Repository contains solvables.
Definition: Repository.cc:219
std::string label() const
Alias or name, according to ZConfig::repoLabelIsAlias.
Definition: Repository.cc:70
Date suggestedExpirationTimestamp() const
Suggested expiration timestamp.
Definition: Repository.cc:116
SolvableIterator solvablesEnd() const
Iterator behind the last Solvable.
Definition: Repository.cc:241
Repository(IdType id_r)
PoolImpl ctor.
Definition: Repository.h:57
ProductInfoIterator compatibleWithProductEnd() const
Get an iterator to the end of the repository compatible distros.
Definition: Repository.cc:257
int satInternalPriority() const
libsolv internal priorities.
Definition: Repository.cc:73
void clearInfo()
Remove any RepoInfo set for this repository.
Definition: Repository.cc:291
sat::Solvable::IdType addSolvables(unsigned count_r)
Add count_r new empty Solvable to this Repository.
Definition: Repository.cc:383
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
SolvableIterator solvablesBegin() const
Iterator to the first Solvable.
Definition: Repository.cc:231
void addTesttags(const Pathname &file_r)
Load Solvables from a libsolv testtags-file.
Definition: Repository.cc:361
ProductInfoIterator updatesProductEnd() const
Get an iterator to the end of distos the repository provides upadates for.
Definition: Repository.cc:268
ContentIdentifier contentIdentifier() const
Unique string identifying a repositories content.
Definition: Repository.cc:92
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
std::string alias() const
Short unique string to identify a repo.
Definition: Repository.cc:59
bool hasContentIdentifier(const ContentIdentifier &id_r) const
Whether id_r matches this repos content identifier.
Definition: Repository.cc:99
size_type solvablesSize() const
Number of solvables in Repository.
Definition: Repository.cc:225
Iterable< ProductInfoIterator > updatesProduct() const
Iterate distos the repository provides upadates for.
Definition: Repository.h:405
IdType id() const
Expert backdoor.
Definition: Repository.h:316
void setInfo(const RepoInfo &info_r)
Set RepoInfo for this repository.
Definition: Repository.cc:279
sat::Solvable::IdType addSolvable()
Definition: Repository.h:308
std::string name() const
Label to display for this repo.
Definition: Repository.cc:67
bool operator<(const Repository &lhs, const Repository &rhs)
Definition: Repository.h:348
bool operator!=(const Repository &lhs, const Repository &rhs)
Definition: Repository.h:344
void addSolv(const Pathname &file_r)
Load Solvables from a solv-file.
Definition: Repository.cc:320
ContentRevision contentRevision() const
Timestamp or arbitrary user supplied string.
Definition: Repository.cc:85
sat::detail::size_type size_type
Definition: Repository.h:43
filter_iterator< detail::ByRepository, sat::detail::SolvableIterator > SolvableIterator
Definition: Repository.h:42
Iterable< ProductInfoIterator > compatibleWithProduct() const
Iterate the repository compatible distros.
Definition: Repository.h:401
Iterable< SolvableIterator > solvables() const
Iterate the repositories Solvables.
Definition: Repository.h:502
Date generatedTimestamp() const
Timestamp when this repository was generated.
Definition: Repository.cc:109
ProductInfoIterator updatesProductBegin() const
Get an iterator to the beginning of distos the repository provides upadates for.
Definition: Repository.cc:262
std::string ContentRevision
Definition: Repository.h:48
std::string asUserString() const
User string: label (alias or name)
Definition: Repository.h:93
sat::ArrayAttr< std::string, std::string > Keywords
Definition: Repository.h:46
static const std::string & systemRepoAlias()
Reserved system repository alias @System .
Definition: Repository.cc:37
RepoInfo info() const
Return any associated RepoInfo.
Definition: Repository.cc:273
void eraseFromPool()
Remove this Repository from it's Pool.
Definition: Repository.cc:297
bool isSystemRepo() const
Return whether this is the system repository.
Definition: Repository.cc:53
Repository dereference() const
Definition: Repository.h:473
RepositoryIterator(sat::detail::CRepo **p)
Definition: Repository.h:466
friend class boost::iterator_core_access
Definition: Repository.h:471
LookupAttr::TransformIterator based container to retrieve list attributes.
Solvable attribute keys.
Definition: SolvAttr.h:41
A Solvable object within the sat Pool.
Definition: Solvable.h:54
sat::detail::SolvableIdType IdType
Definition: Solvable.h:56
Repository repository() const
The Repository this Solvable belongs to.
Definition: Solvable.cc:363
String related utilities and Regular expression matching.
static const RepoIdType noRepoId(0)
Id to denote Repo::noRepository.
SolvableIdType size_type
Definition: PoolMember.h:126
::s_Repo CRepo
Wrapped libsolv C data type exposed as backdoor.
Definition: PoolMember.h:63
CRepo * RepoIdType
Id type to connect Repo and sat-repo.
Definition: PoolMember.h:133
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::ostream & dumpAsXmlOn(std::ostream &str, const Repository &obj)
Definition: Repository.cc:406
std::ostream & operator<<(std::ostream &str, const InputStream &obj)
Definition: InputStream.cc:166
Functor removing Repository from it's Pool.
Definition: Repository.h:439
void operator()(Repository repository_r) const
Definition: Repository.h:440
Functor filtering Solvable by Repository.
Definition: Repository.h:485
ByRepository(sat::detail::RepoIdType id_r)
Definition: Repository.h:488
ByRepository(const Repository &repository_r)
Definition: Repository.h:487
bool operator()(const sat::Solvable &slv_r) const
Definition: Repository.h:491
Backlink to the associated PoolImpl.
Definition: PoolMember.h:89