libzypp  17.14.0
RepoManager.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_REPOMANAGER_H
13 #define ZYPP_REPOMANAGER_H
14 
15 #include <iosfwd>
16 #include <list>
17 
18 #include "zypp/base/PtrTypes.h"
19 #include "zypp/base/Iterator.h"
20 #include "zypp/base/Flags.h"
21 
22 #include "zypp/Pathname.h"
23 #include "zypp/ZConfig.h"
24 #include "zypp/RepoInfo.h"
26 #include "zypp/repo/RepoType.h"
27 #include "zypp/repo/ServiceType.h"
28 #include "zypp/ServiceInfo.h"
29 #include "zypp/RepoStatus.h"
30 #include "zypp/ProgressData.h"
31 
33 namespace zypp
34 {
35 
47  std::list<RepoInfo> readRepoFile(const Url & repo_file);
48 
54  {
66  RepoManagerOptions( const Pathname & root_r = Pathname() );
67 
77  static RepoManagerOptions makeTestSetup( const Pathname & root_r );
78 
79  Pathname repoCachePath;
80  Pathname repoRawCachePath;
83  Pathname knownReposPath;
85  Pathname pluginsPath;
86  bool probe;
93  std::string servicesTargetDistro;
94 
96  Pathname rootDir;
97  };
98 
99 
100 
106  {
107  friend std::ostream & operator<<( std::ostream & str, const RepoManager & obj );
108 
109  public:
111  struct Impl;
112 
114  typedef std::set<ServiceInfo> ServiceSet;
115  typedef ServiceSet::const_iterator ServiceConstIterator;
117 
119  typedef std::set<RepoInfo> RepoSet;
120  typedef RepoSet::const_iterator RepoConstIterator;
122 
123  public:
124  RepoManager( const RepoManagerOptions &options = RepoManagerOptions() );
126  ~RepoManager();
127 
129  {
133  };
134 
136  {
139  };
140 
143  {
146  };
147  ZYPP_DECLARE_FLAGS(RefreshServiceFlags,RefreshServiceBit);
148 
150  typedef RefreshServiceFlags RefreshServiceOptions;
151 
152 
160  bool repoEmpty() const;
161  RepoSizeType repoSize() const;
163  RepoConstIterator repoEnd() const;
165 
167  std::list<RepoInfo> knownRepositories() const
168  { return std::list<RepoInfo>(repoBegin(),repoEnd()); }
169 
171  RepoInfo getRepo( const std::string & alias ) const;
173  RepoInfo getRepo( const RepoInfo & info_r ) const
174  { return getRepo( info_r.alias() ); }
175 
177  bool hasRepo( const std::string & alias ) const;
179  bool hasRepo( const RepoInfo & info_r ) const
180  { return hasRepo( info_r.alias() ); }
181 
185  static std::string makeStupidAlias( const Url & url_r = Url() );
187 
191  RepoStatus metadataStatus( const RepoInfo &info ) const;
192 
200  };
201 
257  const Url &url,
259 
270  Pathname metadataPath( const RepoInfo &info ) const;
271 
272 
283  Pathname packagesPath( const RepoInfo &info ) const;
284 
285 
300  void refreshMetadata( const RepoInfo &info,
302  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
303 
312  void cleanMetadata( const RepoInfo &info,
313  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
314 
323  void cleanPackages( const RepoInfo &info,
324  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
325 
329  RepoStatus cacheStatus( const RepoInfo &info ) const;
330 
349  void buildCache( const RepoInfo &info,
351  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
352 
365  void cleanCache( const RepoInfo &info,
366  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
367 
373  bool isCached( const RepoInfo &info ) const;
374 
375 
385  void loadFromCache( const RepoInfo &info,
386  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
387 
396 
404  repo::RepoType probe( const Url & url, const Pathname & path ) const;
408  repo::RepoType probe( const Url & url ) const;
409 
410 
425  void addRepository( const RepoInfo &info,
426  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
427 
440  void addRepositories( const Url &url,
441  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
447  void removeRepository( const RepoInfo & info,
448  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
449 
459  void modifyRepository( const std::string &alias,
460  const RepoInfo & newinfo,
461  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
463  void modifyRepository( const RepoInfo & newinfo,
464  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() )
465  { modifyRepository( newinfo.alias(), newinfo, progressrcv ); }
466 
480  RepoInfo getRepositoryInfo( const std::string &alias,
481  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
482 
502  RepoInfo getRepositoryInfo( const Url & url,
503  const url::ViewOption & urlview = url::ViewOption::DEFAULTS,
504  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
505 
506 
519  bool serviceEmpty() const;
520 
527 
534 
540 
543 
545  std::list<ServiceInfo> knownServices() const
546  { return std::list<ServiceInfo>(serviceBegin(),serviceEnd()); }
547 
554  ServiceInfo getService( const std::string & alias ) const;
555 
557  bool hasService( const std::string & alias ) const;
559 
563  repo::ServiceType probeService( const Url &url ) const;
564 
573  void addService( const std::string & alias, const Url& url );
574 
582  void addService( const ServiceInfo & service );
583 
592  void removeService( const std::string & alias );
594  void removeService( const ServiceInfo & service );
595 
596 
602  void refreshServices( const RefreshServiceOptions & options_r = RefreshServiceOptions() );
603 
612  void refreshService( const std::string & alias, const RefreshServiceOptions & options_r = RefreshServiceOptions() );
614  void refreshService( const ServiceInfo & service, const RefreshServiceOptions & options_r = RefreshServiceOptions() );
615 
632  void modifyService( const std::string & oldAlias, const ServiceInfo & service );
634  void modifyService( const ServiceInfo & service )
635  { modifyService( service.alias(), service ); }
636 
637  private:
642  {
643  public:
644  MatchServiceAlias( const std::string & alias_ ) : alias(alias_) {}
645  bool operator()( const RepoInfo & info ) const
646  { return info.service() == alias; }
647  private:
648  std::string alias;
649  };
650 
651  public:
652 
685  template<typename OutputIterator>
686  void getRepositoriesInService( const std::string & alias,
687  OutputIterator out ) const
688  {
689  MatchServiceAlias filter(alias);
690 
691  std::copy( boost::make_filter_iterator( filter, repoBegin(), repoEnd() ),
692  boost::make_filter_iterator( filter, repoEnd(), repoEnd() ),
693  out);
694  }
695 
696  private:
699  };
700  ZYPP_DECLARE_OPERATORS_FOR_FLAGS(RepoManager::RefreshServiceFlags);
702 
704  std::ostream & operator<<( std::ostream & str, const RepoManager & obj );
705 
708  { return makeIterable( repoBegin(), repoEnd() ); }
709 
712  { return makeIterable( serviceBegin(), serviceEnd() ); }
713 
715 } // namespace zypp
717 #endif // ZYPP2_REPOMANAGER_H