libzypp  17.37.16
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/RepoManagerFlags.h>
32 #include <utility>
33 #include <zypp-core/ui/ProgressData>
34 #include <zypp-core/TriBool.h>
35 
37 namespace zypp
38 {
39 
53  std::list<RepoInfo> readRepoFile(const Url & repo_file) ZYPP_API;
54 
59  class ZYPP_API RepoManager
60  {
61  friend std::ostream & operator<<( std::ostream & str, const RepoManager & obj );
62 
63  public:
65  struct Impl;
66 
68  using ServiceSet = std::set<ServiceInfo>;
69  using ServiceConstIterator = ServiceSet::const_iterator;
71 
73  using RepoSet = std::set<RepoInfo>;
74  using RepoConstIterator = RepoSet::const_iterator;
76 
77  public:
80  ~RepoManager();
81 
86 
90 
95 
96  using RefreshServiceFlags = RepoManagerFlags::RefreshServiceFlags;
97 
99  using RefreshServiceOptions = RepoManagerFlags::RefreshServiceFlags;
100 
108  bool repoEmpty() const;
109  RepoSizeType repoSize() const;
110  RepoConstIterator repoBegin() const;
111  RepoConstIterator repoEnd() const;
112  Iterable<RepoConstIterator> repos() const;
113 
115  std::list<RepoInfo> knownRepositories() const
116  { return std::list<RepoInfo>(repoBegin(),repoEnd()); }
117 
119  RepoInfo getRepo( const std::string & alias ) const;
121  RepoInfo getRepo( const RepoInfo & info_r ) const
122  { return getRepo( info_r.alias() ); }
123 
125  bool hasRepo( const std::string & alias ) const;
127  bool hasRepo( const RepoInfo & info_r ) const
128  { return hasRepo( info_r.alias() ); }
129 
133  static std::string makeStupidAlias( const Url & url_r = Url() );
135 
139  RepoStatus metadataStatus( const RepoInfo &info ) const;
140 
201  const Url &url,
203 
212  const zypp::MirroredOrigin &origin,
214 
225  Pathname metadataPath( const RepoInfo &info ) const;
226 
227 
238  Pathname packagesPath( const RepoInfo &info ) const;
239 
240 
256  void refreshMetadata( const RepoInfo &info,
258  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
259 
268  void cleanMetadata( const RepoInfo &info,
269  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
270 
279  void cleanPackages( const RepoInfo &info,
280  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
281 
285  RepoStatus cacheStatus( const RepoInfo &info ) const;
286 
306  void buildCache( const RepoInfo &info,
308  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
309 
322  void cleanCache( const RepoInfo &info,
323  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
324 
330  bool isCached( const RepoInfo &info ) const;
331 
332 
342  void loadFromCache( const RepoInfo &info,
343  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
344 
352  void cleanCacheDirGarbage( const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
353 
361  repo::RepoType probe( const Url & url, const Pathname & path ) const;
365  repo::RepoType probe( const Url & url ) const;
366 
367 
382  void addRepository( const RepoInfo &info,
383  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
385  void addRepository( const RepoInfo &info, const TriBool & forcedProbe,
386  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
399  void addRepositories( const Url &url,
400  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
406  void removeRepository( const RepoInfo & info,
407  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
408 
418  void modifyRepository( const std::string &alias,
419  const RepoInfo & newinfo,
420  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
422  void modifyRepository( const RepoInfo & newinfo,
423  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() )
424  { modifyRepository( newinfo.alias(), newinfo, progressrcv ); }
425 
439  RepoInfo getRepositoryInfo( const std::string &alias,
440  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
441 
461  RepoInfo getRepositoryInfo( const Url & url,
462  const url::ViewOption & urlview = url::ViewOption::DEFAULTS,
463  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
464 
465 
478  bool serviceEmpty() const;
479 
485  ServiceSizeType serviceSize() const;
486 
492  ServiceConstIterator serviceBegin() const;
493 
498  ServiceConstIterator serviceEnd() const;
499 
501  Iterable<ServiceConstIterator> services() const;
502 
504  std::list<ServiceInfo> knownServices() const
505  { return std::list<ServiceInfo>(serviceBegin(),serviceEnd()); }
506 
513  ServiceInfo getService( const std::string & alias ) const;
514 
516  bool hasService( const std::string & alias ) const;
518 
522  repo::ServiceType probeService( const Url &url ) const;
523 
532  void addService( const std::string & alias, const Url& url );
533 
541  void addService( const ServiceInfo & service );
542 
551  void removeService( const std::string & alias );
553  void removeService( const ServiceInfo & service );
554 
555 
561  void refreshServices( const RefreshServiceOptions & options_r = RefreshServiceOptions() );
562 
571  void refreshService( const std::string & alias, const RefreshServiceOptions & options_r = RefreshServiceOptions() );
573  void refreshService( const ServiceInfo & service, const RefreshServiceOptions & options_r = RefreshServiceOptions() );
574 
591  void modifyService( const std::string & oldAlias, const ServiceInfo & service );
593  void modifyService( const ServiceInfo & service )
594  { modifyService( service.alias(), service ); }
595 
600  void refreshGeoIp ( const RepoInfo::url_set &urls );
601 
602  private:
607  {
608  public:
609  MatchServiceAlias( std::string alias_ ) : alias(std::move(alias_)) {}
610  bool operator()( const RepoInfo & info ) const
611  { return info.service() == alias; }
612  private:
613  std::string alias;
614  };
615 
616  public:
617 
650  template<typename OutputIterator>
651  void getRepositoriesInService( const std::string & alias,
652  OutputIterator out ) const
653  {
654  MatchServiceAlias filter(alias);
655 
656  std::copy( boost::make_filter_iterator( filter, repoBegin(), repoEnd() ),
657  boost::make_filter_iterator( filter, repoEnd(), repoEnd() ),
658  out);
659  }
660 
661  private:
664  };
666 
668  std::ostream & operator<<( std::ostream & str, const RepoManager & obj ) ZYPP_API;
669 
672  { return makeIterable( repoBegin(), repoEnd() ); }
673 
676  { return makeIterable( serviceBegin(), serviceEnd() ); }
677 
679 } // namespace zypp
681 #endif // ZYPP2_REPOMANAGER_H
Service data.
Definition: ServiceInfo.h:36
Force restoring repo enabled/disabled status.
RepoSet::size_type RepoSizeType
Definition: RepoManager.h:75
void getRepositoriesInService(const std::string &alias, OutputIterator out) const
fill to output iterator repositories in service name.
Definition: RepoManager.h:651
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
Definition: String.h:31
RepoManagerFlags::RefreshServiceFlags RefreshServiceOptions
Options tuning RefreshService.
Definition: RepoManager.h:99
std::string service() const
Gets name of the service to which this repository belongs or empty string if it has been added manual...
Definition: RepoInfo.cc:786
RefreshServiceFlags RefreshServiceOptions
Options tuning RefreshService.
Force refresh even if TTL is not reached.
AsyncOpRef< expected< repo::AsyncRefreshContextRef > > refreshMetadata(repo::AsyncRefreshContextRef refCtx, LazyMediaHandle< Provide > medium, ProgressObserverRef progressObserver)
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
Definition: progressdata.h:140
void modifyRepository(const RepoInfo &newinfo, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Definition: RepoManager.h:422
bool hasRepo(const RepoInfo &info_r) const
Definition: RepoManager.h:127
String related utilities and Regular expression matching.
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
Definition: SerialNumber.cc:52
Definition: Arch.h:363
What is known about a repository.
Definition: RepoInfo.h:71
AsyncOpRef< expected< repo::AsyncRefreshContextRef > > buildCache(repo::AsyncRefreshContextRef refCtx, zypp::RepoManagerFlags::CacheBuildPolicy policy, ProgressObserverRef progressObserver)
Url::asString() view options.
Definition: UrlBase.h:40
Repo manager settings.
RepoInfo getRepo(const RepoInfo &info_r) const
Definition: RepoManager.h:121
std::list< RepoInfo > readRepoFile(const Url &repo_file)
Parses repo_file and returns a list of RepoInfo objects corresponding to repositories found within th...
Definition: RepoManager.cc:278
std::set< ServiceInfo > ServiceSet
ServiceInfo typedefs.
Definition: RepoManager.h:68
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
std::string alias() const
unique identifier for this source.
const Arch Arch_armv7hnl Arch_armv7nhl ZYPP_API
Definition: ResTraits.h:93
Service type enumeration.
Definition: ServiceType.h:26
MatchServiceAlias(std::string alias_)
Definition: RepoManager.h:609
ServiceSet::size_type ServiceSizeType
Definition: RepoManager.h:70
Iterable< RepoConstIterator > repos() const
Iterate the known repositories.
Definition: RepoManager.h:671
std::list< Url > url_set
Definition: RepoInfo.h:108
RepoManagerFlags::RefreshServiceFlags RefreshServiceFlags
Definition: RepoManager.h:96
ServiceConstIterator serviceBegin() const
Iterator to first service in internal storage.
Definition: RepoManager.cc:231
ServiceConstIterator serviceEnd() const
Iterator to place behind last service in internal storage.
Definition: RepoManager.cc:234
std::ostream & copy(std::istream &from_r, std::ostream &to_r)
Copy istream to ostream.
Definition: IOStream.h:51
zypp::Url Url
Definition: url.h:15
AsyncOpRef< expected< RepoInfo > > addRepository(AsyncRepoManagerRef mgr, RepoInfo info, ProgressObserverRef myProgress, const zypp::TriBool &forcedProbe)
RWCOW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: RepoManager.h:663
bool operator()(const RepoInfo &info) const
Definition: RepoManager.h:610
std::list< RepoInfo > knownRepositories() const
List of known repositories.
Definition: RepoManager.h:115
RepoConstIterator repoBegin() const
Definition: RepoManager.cc:93
refresh is delayed due to settings
Functor thats filter RepoInfo by service which it belongs to.
Definition: RepoManager.h:606
AsyncOpRef< expected< void > > refreshService(AsyncRepoManagerRef repoMgr, ServiceInfo info, zypp::RepoManagerFlags::RefreshServiceOptions options)
Definition: serviceswf.cc:763
std::set< RepoInfo > RepoSet
RepoInfo typedefs.
Definition: RepoManager.h:73
RepoSet::const_iterator RepoConstIterator
Definition: RepoManager.h:74
AsyncOpRef< expected< repo::RefreshCheckStatus > > checkIfToRefreshMetadata(repo::AsyncRefreshContextRef refCtx, LazyMediaHandle< Provide > medium, ProgressObserverRef progressObserver)
void modifyService(const ServiceInfo &service)
Definition: RepoManager.h:593
RefreshCheckStatus
Possibly return state of RepoManager::checkIfToRefreshMetadata function.
Track changing files or directories.
Definition: RepoStatus.h:40
Iterable< ServiceConstIterator > services() const
Iterate the known services.
Definition: RepoManager.h:675
Easy-to use interface to the ZYPP dependency resolver.
Definition: Application.cc:19
RefreshServiceBit
Flags for tuning RefreshService.
AsyncOpRef< expected< void > > addRepositories(AsyncRepoManagerRef mgr, zypp::Url url, ProgressObserverRef myProgress)
SolvableIdType size_type
Definition: PoolMember.h:126
RepoConstIterator repoEnd() const
Definition: RepoManager.cc:96
zypp::RepoManagerOptions RepoManagerOptions
Definition: repomanager.h:41
Url manipulation class.
Definition: Url.h:92
std::list< ServiceInfo > knownServices() const
List of known services.
Definition: RepoManager.h:504
Repository type enumeration.
Definition: RepoType.h:28
ServiceSet::const_iterator ServiceConstIterator
Definition: RepoManager.h:69