libzypp  14.29.1
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;
97  std::string servicesTargetDistro;
98 
100  Pathname rootDir;
101  };
102 
103 
104 
110  {
111  friend std::ostream & operator<<( std::ostream & str, const RepoManager & obj );
112 
113  public:
115  class Impl;
116 
118  typedef std::set<ServiceInfo> ServiceSet;
119  typedef ServiceSet::const_iterator ServiceConstIterator;
121 
123  typedef std::set<RepoInfo> RepoSet;
124  typedef RepoSet::const_iterator RepoConstIterator;
126 
127  public:
128  RepoManager( const RepoManagerOptions &options = RepoManagerOptions() );
130  ~RepoManager();
131 
133  {
137  };
138 
140  {
143  };
144 
147  {
149  };
150  ZYPP_DECLARE_FLAGS(RefreshServiceFlags,RefreshServiceBit);
151 
153  typedef RefreshServiceFlags RefreshServiceOptions;
154 
155 
163  bool repoEmpty() const;
164  RepoSizeType repoSize() const;
165  RepoConstIterator repoBegin() const;
166  RepoConstIterator repoEnd() const;
167 
169  std::list<RepoInfo> knownRepositories() const
170  { return std::list<RepoInfo>(repoBegin(),repoEnd()); }
171 
173  RepoInfo getRepo( const std::string & alias ) const;
175  RepoInfo getRepo( const RepoInfo & info_r ) const
176  { return getRepo( info_r.alias() ); }
177 
179  bool hasRepo( const std::string & alias ) const;
181  bool hasRepo( const RepoInfo & info_r ) const
182  { return hasRepo( info_r.alias() ); }
183 
187  static std::string makeStupidAlias( const Url & url_r = Url() );
189 
193  RepoStatus metadataStatus( const RepoInfo &info ) const;
194 
202  };
203 
259  const Url &url,
261 
272  Pathname metadataPath( const RepoInfo &info ) const;
273 
274 
285  Pathname packagesPath( const RepoInfo &info ) const;
286 
287 
302  void refreshMetadata( const RepoInfo &info,
304  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
305 
314  void cleanMetadata( const RepoInfo &info,
315  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
316 
325  void cleanPackages( const RepoInfo &info,
326  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
327 
331  RepoStatus cacheStatus( const RepoInfo &info ) const;
332 
351  void buildCache( const RepoInfo &info,
353  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
354 
367  void cleanCache( const RepoInfo &info,
368  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
369 
375  bool isCached( const RepoInfo &info ) const;
376 
377 
387  void loadFromCache( const RepoInfo &info,
388  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
389 
398 
406  repo::RepoType probe( const Url & url, const Pathname & path ) const;
410  repo::RepoType probe( const Url & url ) const;
411 
412 
427  void addRepository( const RepoInfo &info,
428  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
429 
442  void addRepositories( const Url &url,
443  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
449  void removeRepository( const RepoInfo & info,
450  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
451 
461  void modifyRepository( const std::string &alias,
462  const RepoInfo & newinfo,
463  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
465  void modifyRepository( const RepoInfo & newinfo,
466  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() )
467  { modifyRepository( newinfo.alias(), newinfo, progressrcv ); }
468 
482  RepoInfo getRepositoryInfo( const std::string &alias,
483  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
484 
504  RepoInfo getRepositoryInfo( const Url & url,
505  const url::ViewOption & urlview = url::ViewOption::DEFAULTS,
506  const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
507 
508 
521  bool serviceEmpty() const;
522 
528  ServiceSizeType serviceSize() const;
529 
535  ServiceConstIterator serviceBegin() const;
536 
541  ServiceConstIterator serviceEnd() const;
542 
544  std::list<ServiceInfo> knownServices() const
545  { return std::list<ServiceInfo>(serviceBegin(),serviceEnd()); }
546 
553  ServiceInfo getService( const std::string & alias ) const;
554 
556  bool hasService( const std::string & alias ) const;
558 
562  repo::ServiceType probeService( const Url &url ) const;
563 
572  void addService( const std::string & alias, const Url& url );
573 
581  void addService( const ServiceInfo & service );
582 
591  void removeService( const std::string & alias );
593  void removeService( const ServiceInfo & service );
594 
595 
601  void refreshServices( const RefreshServiceOptions & options_r = RefreshServiceOptions() );
602 
611  void refreshService( const std::string & alias, const RefreshServiceOptions & options_r = RefreshServiceOptions() );
613  void refreshService( const ServiceInfo & service, const RefreshServiceOptions & options_r = RefreshServiceOptions() );
614 
631  void modifyService( const std::string & oldAlias, const ServiceInfo & service );
633  void modifyService( const ServiceInfo & service )
634  { modifyService( service.alias(), service ); }
635 
636  private:
641  {
642  public:
643  MatchServiceAlias( const std::string & alias_ ) : alias(alias_) {}
644  bool operator()( const RepoInfo & info ) const
645  { return info.service() == alias; }
646  private:
647  std::string alias;
648  };
649 
650  public:
651 
684  template<typename OutputIterator>
685  void getRepositoriesInService( const std::string & alias,
686  OutputIterator out ) const
687  {
688  MatchServiceAlias filter(alias);
689 
690  std::copy( boost::make_filter_iterator( filter, repoBegin(), repoEnd() ),
691  boost::make_filter_iterator( filter, repoEnd(), repoEnd() ),
692  out);
693  }
694 
695  private:
698  };
699  ZYPP_DECLARE_OPERATORS_FOR_FLAGS(RepoManager::RefreshServiceFlags);
701 
703  std::ostream & operator<<( std::ostream & str, const RepoManager & obj );
704 
706 } // namespace zypp
708 #endif // ZYPP2_REPOMANAGER_H
RepoManager(const RepoManagerOptions &options=RepoManagerOptions())
void removeService(const std::string &alias)
Removes service specified by its name.
refresh is delayed due to settings
Definition: RepoManager.h:201
RepoManagerOptions(const Pathname &root_r=Pathname())
Default ctor following ZConfig global settings.
Definition: RepoManager.cc:386
std::string alias() const
unique identifier for this source.
void modifyService(const ServiceInfo &service)
Definition: RepoManager.h:633
bool serviceEmpty() const
Gets true if no service is in RepoManager (so no one in specified location)
void modifyService(const std::string &oldAlias, const ServiceInfo &service)
Modifies service file (rewrites it with new values) and underlying repositories if needed...
RWCOW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: RepoManager.h:697
void cleanCacheDirGarbage(const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Remove any subdirectories of cache directories which no longer belong to any of known repositories...
void refreshServices(const RefreshServiceOptions &options_r=RefreshServiceOptions())
Refreshes all enabled services.
RepoStatus metadataStatus(const RepoInfo &info) const
Status of local metadata.
RefreshCheckStatus
Possibly return state of checkIfRefreshMEtadata function.
Definition: RepoManager.h:198
Pathname metadataPath(const RepoInfo &info) const
Path where the metadata is downloaded and kept.
RepoSet::size_type RepoSizeType
Definition: RepoManager.h:125
void loadFromCache(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Load resolvables into the pool.
ServiceConstIterator serviceEnd() const
Iterator to place behind last service in internal storage.
repo::RepoType probe(const Url &url, const Pathname &path) const
Probe repo metadata type.
ZYPP_DECLARE_OPERATORS_FOR_FLAGS(DiskUsageCounter::MountPoint::HintFlags)
RepoConstIterator repoBegin() const
void refreshMetadata(const RepoInfo &info, RawMetadataRefreshPolicy policy=RefreshIfNeeded, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Refresh local raw cache.
Pathname packagesPath(const RepoInfo &info) const
Path where the rpm packages are downloaded and kept.
String related utilities and Regular expression matching.
RefreshServiceFlags RefreshServiceOptions
Options tuning RefreshService.
Definition: RepoManager.h:153
void refreshService(const std::string &alias, const RefreshServiceOptions &options_r=RefreshServiceOptions())
Refresh specific service.
What is known about a repository.
Definition: RepoInfo.h:66
void removeRepository(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Remove the best matching repository from known repos list.
RepoSet::const_iterator RepoConstIterator
Definition: RepoManager.h:124
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
Definition: ProgressData.h:139
Url::asString() view options.
Definition: UrlBase.h:39
void getRepositoriesInService(const std::string &alias, OutputIterator out) const
fill to output iterator repositories in service name.
Definition: RepoManager.h:685
void modifyRepository(const std::string &alias, const RepoInfo &newinfo, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Modify repository attributes.
RefreshServiceBit
Flags for tuning RefreshService.
Definition: RepoManager.h:146
RepoSizeType repoSize() const
Repo manager settings.
Definition: RepoManager.h:53
RepoManager implementation.
Definition: RepoManager.cc:434
std::set< RepoInfo > RepoSet
RepoInfo typedefs.
Definition: RepoManager.h:123
static RepoManagerOptions makeTestSetup(const Pathname &root_r)
Test setup adjusting all paths to be located below one root_r directory.
Definition: RepoManager.cc:400
Pathname rootDir
remembers root_r value for later use
Definition: RepoManager.h:100
RepoInfo getRepo(const RepoInfo &info_r) const
Definition: RepoManager.h:175
RepoConstIterator repoEnd() const
bool hasRepo(const RepoInfo &info_r) const
Definition: RepoManager.h:181
MatchServiceAlias(const std::string &alias_)
Definition: RepoManager.h:643
Service type enumeration.
Definition: ServiceType.h:26
ServiceSet::const_iterator ServiceConstIterator
Definition: RepoManager.h:119
repo::ServiceType probeService(const Url &url) const
Probe the type or the service.
ZYPP_DECLARE_FLAGS(RefreshServiceFlags, RefreshServiceBit)
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:301
zypp::Url url
Definition: MediaCurl.cc:193
void addRepository(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Adds a repository to the list of known repositories.
RepoInfo getRepositoryInfo(const std::string &alias, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Find a matching repository info.
static std::string makeStupidAlias(const Url &url_r=Url())
Some stupid string but suitable as alias for your url if nothing better is available.
RefreshCheckStatus checkIfToRefreshMetadata(const RepoInfo &info, const Url &url, RawMetadataRefreshPolicy policy=RefreshIfNeeded)
Checks whether to refresh metadata for specified repository and url.
void cleanCache(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
clean local cache
ServiceSet::size_type ServiceSizeType
Definition: RepoManager.h:120
SolvableIdType size_type
Definition: PoolMember.h:99
ServiceInfo getService(const std::string &alias) const
Finds ServiceInfo by alias or return ServiceInfo::noService.
std::ostream & copy(std::istream &from_r, std::ostream &to_r)
Copy istream to ostream.
Definition: IOStream.h:50
bool hasRepo(const std::string &alias) const
Return whether there is a known repository for alias.
creates and provides information about known sources.
Definition: RepoManager.h:109
RepoStatus cacheStatus(const RepoInfo &info) const
Status of metadata cache.
bool operator()(const RepoInfo &info) const
Definition: RepoManager.h:644
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:365
RepoInfo getRepo(const std::string &alias) const
Find RepoInfo by alias or return RepoInfo::noRepo.
repository not changed
Definition: RepoManager.h:200
void buildCache(const RepoInfo &info, CacheBuildPolicy policy=BuildIfNeeded, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Refresh local cache.
void modifyRepository(const RepoInfo &newinfo, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Definition: RepoManager.h:465
std::list< RepoInfo > knownRepositories() const
List of known repositories.
Definition: RepoManager.h:169
void addRepositories(const Url &url, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Adds repositores from a repo file to the list of known repositories.
std::set< ServiceInfo > ServiceSet
ServiceInfo typedefs.
Definition: RepoManager.h:115
std::string servicesTargetDistro
Target distro ID to be used when refreshing repo index services.
Definition: RepoManager.h:97
Force restoring repo enabled/disabled staus.
Definition: RepoManager.h:148
Functor thats filter RepoInfo by service which it belongs to.
Definition: RepoManager.h:640
bool isCached(const RepoInfo &info) const
Whether a repository exists in cache.
Pathname repoPackagesCachePath
Definition: RepoManager.h:82
bool hasService(const std::string &alias) const
Return whether there is a known service for alias.
static const ViewOption DEFAULTS
Default combination of view options.
Definition: UrlBase.h:177
friend std::ostream & operator<<(std::ostream &str, const RepoManager &obj)
ServiceSizeType serviceSize() const
Gets count of service in RepoManager (in specified location)
Track changing files or directories.
Definition: RepoStatus.h:38
void cleanPackages(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Clean local package cache.
ServiceConstIterator serviceBegin() const
Iterator to first service in internal storage.
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
std::list< ServiceInfo > knownServices() const
List of known services.
Definition: RepoManager.h:544
bool repoEmpty() const
void addService(const std::string &alias, const Url &url)
Adds new service by it's alias and url.
Url manipulation class.
Definition: Url.h:87
void cleanMetadata(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Clean local metadata.
Repository type enumeration.
Definition: RepoType.h:27