libzypp 17.37.17
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>
28#include <zypp/ServiceInfo.h>
29#include <zypp/RepoStatus.h>
32#include <utility>
33#include <zypp-core/ui/ProgressData>
34#include <zypp-core/TriBool.h>
35
37namespace zypp
38{
39
53 std::list<RepoInfo> readRepoFile(const Url & repo_file) ZYPP_API;
54
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;
70 using ServiceSizeType = ServiceSet::size_type;
71
73 using RepoSet = std::set<RepoInfo>;
74 using RepoConstIterator = RepoSet::const_iterator;
75 using RepoSizeType = RepoSet::size_type;
76
77 public:
81
86
88 static constexpr CacheBuildPolicy BuildIfNeeded = CacheBuildPolicy::BuildIfNeeded;
89 static constexpr CacheBuildPolicy BuildForced = CacheBuildPolicy::BuildForced;
90
93 static constexpr RefreshServiceBit RefreshService_restoreStatus = RefreshServiceBit::RefreshService_restoreStatus;
94 static constexpr RefreshServiceBit RefreshService_forceRefresh = RefreshServiceBit::RefreshService_forceRefresh;
95
96 using RefreshServiceFlags = RepoManagerFlags::RefreshServiceFlags;
97
99 using RefreshServiceOptions = RepoManagerFlags::RefreshServiceFlags;
100
108 bool repoEmpty() const;
109 RepoSizeType repoSize() 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
142 static constexpr RefreshCheckStatus REFRESH_NEEDED = RefreshCheckStatus::REFRESH_NEEDED;
143 static constexpr RefreshCheckStatus REPO_UP_TO_DATE = RefreshCheckStatus::REPO_UP_TO_DATE;
144 static constexpr RefreshCheckStatus REPO_CHECK_DELAYED = RefreshCheckStatus::REPO_CHECK_DELAYED;
145
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,
259
268 void cleanMetadata( const RepoInfo &info,
270
279 void cleanPackages( const RepoInfo &info,
281
285 RepoStatus cacheStatus( const RepoInfo &info ) const;
286
306 void buildCache( const RepoInfo &info,
309
322 void cleanCache( const RepoInfo &info,
324
330 bool isCached( const RepoInfo &info ) const;
331
332
342 void loadFromCache( const RepoInfo &info,
344
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,
385 void addRepository( const RepoInfo &info, const TriBool & forcedProbe,
399 void addRepositories( const Url &url,
406 void removeRepository( const RepoInfo & info,
408
418 void modifyRepository( const std::string &alias,
419 const RepoInfo & newinfo,
422 void modifyRepository( const RepoInfo & newinfo,
424 { modifyRepository( newinfo.alias(), newinfo, progressrcv ); }
425
439 RepoInfo getRepositoryInfo( const std::string &alias,
441
461 RepoInfo getRepositoryInfo( const Url & url,
462 const url::ViewOption & urlview = url::ViewOption::DEFAULTS,
464
465
473
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 {
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 };
665
666
668 std::ostream & operator<<( std::ostream & str, const RepoManager & obj ) ZYPP_API;
669
673
677
679} // namespace zypp
681#endif // ZYPP2_REPOMANAGER_H
Iterable< TIterator > makeIterable(TIterator &&begin_r, TIterator &&end_r)
convenient construction.
Definition Iterable.h:88
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
What is known about a repository.
Definition RepoInfo.h:72
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
std::list< Url > url_set
Definition RepoInfo.h:108
creates and provides information about known sources.
Definition RepoManager.h:60
bool hasRepo(const std::string &alias) const
Return whether there is a known repository for alias.
static constexpr RefreshCheckStatus REPO_UP_TO_DATE
repository not changed
void cleanCacheDirGarbage(const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Remove any subdirectories of cache directories which no longer belong to any of known repositories.
void cleanMetadata(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Clean local metadata.
static constexpr RawMetadataRefreshPolicy RefreshIfNeeded
Definition RepoManager.h:83
RepoInfo getRepo(const RepoInfo &info_r) const
static constexpr RawMetadataRefreshPolicy RefreshIfNeededIgnoreDelay
Definition RepoManager.h:85
ServiceSet::const_iterator ServiceConstIterator
Definition RepoManager.h:69
static constexpr RefreshServiceBit RefreshService_restoreStatus
Definition RepoManager.h:93
static constexpr CacheBuildPolicy BuildForced
Definition RepoManager.h:89
bool isCached(const RepoInfo &info) const
Whether a repository exists in cache.
bool hasRepo(const RepoInfo &info_r) const
RepoInfo getRepo(const std::string &alias) const
Find RepoInfo by alias or return RepoInfo::noRepo.
RWCOW_pointer< Impl > _pimpl
Pointer to implementation.
std::list< ServiceInfo > knownServices() const
List of known services.
RepoManagerFlags::RawMetadataRefreshPolicy RawMetadataRefreshPolicy
Definition RepoManager.h:82
void cleanCache(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
clean local cache
void addRepository(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Adds a repository to the list of known repositories.
bool repoEmpty() const
Pathname metadataPath(const RepoInfo &info) const
Path where the metadata is downloaded and kept.
static constexpr RefreshServiceBit RefreshService_forceRefresh
Definition RepoManager.h:94
ServiceSet::size_type ServiceSizeType
Definition RepoManager.h:70
RepoManagerFlags::RefreshServiceFlags RefreshServiceFlags
Definition RepoManager.h:96
Pathname packagesPath(const RepoInfo &info) const
Path where the rpm packages are downloaded and kept.
RepoStatus cacheStatus(const RepoInfo &info) const
Status of metadata cache.
void addRepositories(const Url &url, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Adds repositores from a repo file to the list of known repositories.
void refreshMetadata(const RepoInfo &info, RawMetadataRefreshPolicy policy=RefreshIfNeeded, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Refresh local raw cache.
static constexpr RefreshCheckStatus REFRESH_NEEDED
refresh is needed
ServiceConstIterator serviceEnd() const
Iterator to place behind last service in internal storage.
RepoManagerFlags::CacheBuildPolicy CacheBuildPolicy
Definition RepoManager.h:87
static constexpr RefreshCheckStatus REPO_CHECK_DELAYED
refresh is delayed due to settings
static constexpr RawMetadataRefreshPolicy RefreshForced
Definition RepoManager.h:84
ServiceConstIterator serviceBegin() const
Iterator to first service in internal storage.
RepoManagerFlags::RefreshCheckStatus RefreshCheckStatus
void modifyService(const ServiceInfo &service)
RepoSizeType repoSize() const
void modifyRepository(const std::string &alias, const RepoInfo &newinfo, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Modify repository attributes.
Iterable< ServiceConstIterator > services() const
Iterate the known services.
void removeRepository(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Remove the best matching repository from known repos list.
void modifyRepository(const RepoInfo &newinfo, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
static constexpr CacheBuildPolicy BuildIfNeeded
Definition RepoManager.h:88
RepoManagerFlags::RefreshServiceBit RefreshServiceBit
Flags for tuning RefreshService.
Definition RepoManager.h:92
RefreshCheckStatus checkIfToRefreshMetadata(const RepoInfo &info, const Url &url, RawMetadataRefreshPolicy policy=RefreshIfNeeded)
Checks whether to refresh metadata for specified repository and url.
RepoSet::size_type RepoSizeType
Definition RepoManager.h:75
std::list< RepoInfo > knownRepositories() const
List of known repositories.
RepoConstIterator repoBegin() const
std::set< RepoInfo > RepoSet
RepoInfo typedefs.
Definition RepoManager.h:73
Iterable< RepoConstIterator > repos() const
Iterate the known repositories.
void buildCache(const RepoInfo &info, CacheBuildPolicy policy=BuildIfNeeded, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Refresh local cache.
RepoManagerFlags::RefreshServiceFlags RefreshServiceOptions
Options tuning RefreshService.
Definition RepoManager.h:99
RepoManager(RepoManagerOptions options=RepoManagerOptions())
void getRepositoriesInService(const std::string &alias, OutputIterator out) const
fill to output iterator repositories in service name.
void loadFromCache(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Load resolvables into the pool.
void cleanPackages(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Clean local package cache.
RepoConstIterator repoEnd() const
void modifyService(const std::string &oldAlias, const ServiceInfo &service)
Modifies service file (rewrites it with new values) and underlying repositories if needed.
RepoSet::const_iterator RepoConstIterator
Definition RepoManager.h:74
repo::RepoType probe(const Url &url, const Pathname &path) const
Probe repo metadata type.
std::set< ServiceInfo > ServiceSet
ServiceInfo typedefs.
Definition RepoManager.h:68
Track changing files or directories.
Definition RepoStatus.h:41
Service data.
Definition ServiceInfo.h:37
Url manipulation class.
Definition Url.h:93
std::string alias() const
unique identifier for this source.
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
Definition String.h:31
Definition Arch.h:364
String related utilities and Regular expression matching.
RefreshCheckStatus
Possibly return state of RepoManager::checkIfToRefreshMetadata function.
RefreshServiceBit
Flags for tuning RefreshService.
Url details namespace.
Definition UrlBase.cc:58
Easy-to use interface to the ZYPP dependency resolver.
std::list< RepoInfo > readRepoFile(const Url &repo_file)
Parses repo_file and returns a list of RepoInfo objects corresponding to repositories found within th...
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
const Arch Arch_armv7hnl Arch_armv7nhl ZYPP_API
Definition Arch.h:247
RW_pointer supporting 'copy on write' functionality.
Definition PtrTypes.h:469
Repo manager settings.
RepoManager implementation.
Functor thats filter RepoInfo by service which it belongs to.
MatchServiceAlias(std::string alias_)
bool operator()(const RepoInfo &info) const
Repository type enumeration.
Definition RepoType.h:29
Service type enumeration.
Definition ServiceType.h:27
Url::asString() view options.
Definition UrlBase.h:41