13#include <solv/solvversion.h>
18#include <zypp-core/ng/pipelines/MTry>
19#include <zypp-core/ng/pipelines/Transform>
21#include <zypp-core/ng/ui/ProgressObserver>
42#undef ZYPP_BASE_LOGGER_LOGGROUP
43#define ZYPP_BASE_LOGGER_LOGGROUP "zypp::repomanager"
57 const char *
env = getenv(
"ZYPP_PLUGIN_APPDATA_FORCE_COLLECT");
68 inline void cleanupNonRepoMetadataFolders(
const zypp::Pathname & cachePath_r,
70 const std::list<std::string> & repoEscAliases_r )
72 if ( cachePath_r != defaultCachePath_r )
75 std::list<std::string> entries;
79 std::set<std::string> oldfiles;
80 set_difference( entries.begin(), entries.end(), repoEscAliases_r.begin(), repoEscAliases_r.end(),
81 std::inserter( oldfiles, oldfiles.end() ) );
87 for (
const std::string & old : oldfiles )
91 pi( cachePath_r/old );
104#define OUTS(V) case zypp::RepoManagerFlags::V: str << #V; break
105 OUTS( RefreshIfNeeded );
106 OUTS( RefreshForced );
107 OUTS( RefreshIfNeededIgnoreDelay );
116#define OUTS(V) case zypp::RepoManagerFlags::V: str << #V; break
117 OUTS( REFRESH_NEEDED );
118 OUTS( REPO_UP_TO_DATE );
119 OUTS( REPO_CHECK_DELAYED );
128#define OUTS(V) case zypp::RepoManagerFlags::V: str << #V; break
129 OUTS( BuildIfNeeded );
139 std::string filename( alias_r );
144 MIL <<
"generating filename for " << stem_r <<
" [" << alias_r <<
"] : '" << filename <<
"'" << std::endl;
152 && !
repo.targetDistribution().empty()
156 <<
"Skipping repository meant for '" <<
repo.targetDistribution()
157 <<
"' distribution (current distro is '"
170 MIL <<
"repo file: " << file << std::endl;
188 template <
typename ZContextRef>
191 MIL <<
"directory " << dir << std::endl;
192 std::list<RepoInfo> repos;
193 bool nonroot( geteuid() != 0 );
200 std::list<zypp::Pathname> entries;
208 for ( std::list<zypp::Pathname>::const_iterator it = entries.begin(); it != entries.end(); ++it )
219 repos.insert( repos.end(), tmp.begin(), tmp.end() );
239 : _zyppContext(
std::move(zyppCtx) )
240 , _options(
std::move(opt) )
241 , _pluginRepoverification( _options.pluginsPath /
"repoverification",
251 && geteuid() == 0 && (
_options.rootDir.empty() ||
_options.rootDir ==
"/" ) )
254 std::list<zypp::Pathname> entries;
256 if ( ! entries.empty() )
259 cmd.push_back(
"<" );
260 cmd.push_back(
">" );
261 cmd.push_back(
"PROGRAM" );
262 for (
const auto & rinfo :
repos() )
264 if ( ! rinfo.enabled() )
266 cmd.push_back(
"-R" );
267 cmd.push_back( rinfo.alias() );
268 cmd.push_back(
"-t" );
269 cmd.push_back( rinfo.type().asString() );
270 cmd.push_back(
"-p" );
271 cmd.push_back( (rinfo.metadataPath()/rinfo.path()).asString() );
274 for_( it, entries.begin(), entries.end() )
320 mediarootpath = std::move(mrPath);
334 switch ( repokind.
toEnum() )
337 status =
RepoStatus( productdatapath/
"repodata/repomd.xml");
339 status = status &&
RepoStatus( mediarootpath/
"media.1/media" );
343 status =
RepoStatus( productdatapath/
"content" ) &&
RepoStatus( mediarootpath/
"media.1/media" );
360 if ( ! status.
empty() )
425 MIL <<
"going to probe the cached repo at " << path_r << std::endl;
436 MIL <<
"Probed cached type " << ret <<
" at " << path_r << std::endl;
444 MIL <<
"Going to clean up garbage in cache dirs" << std::endl;
446 std::list<zypp::Pathname> cachedirs;
447 cachedirs.push_back(
_options.repoRawCachePath);
448 cachedirs.push_back(
_options.repoPackagesCachePath);
449 cachedirs.push_back(
_options.repoSolvCachePath);
454 for(
const auto &dir : cachedirs )
463 std::list<zypp::Pathname> entries;
468 if ( !entries.size() )
472 for(
const auto &subdir : entries )
477 if ( subdir.basename() == r->escaped_alias() )
478 { found =
true;
break; }
504 MIL <<
"Removing raw metadata cache for " << info.
alias() << std::endl;
542 if ( toolversion != LIBSOLV_TOOLVERSION ) {
543 repo.eraseFromPool();
547 |
or_else( [
this, info, myProgress]( std::exception_ptr exp ) {
549 MIL <<
"Try to handle exception by rebuilding the solv-file" << std::endl;
551 |
and_then([
this, info, myProgress]{
562 |
or_else([myProgress](
auto ex ){
581 MIL <<
"Saving repo in " << repofile << std::endl;
583 std::ofstream file(repofile.
c_str());
590 tosave.dumpAsIniOn(file);
591 tosave.setFilepath(repofile);
616 MIL <<
"Going to delete repo " << info.
alias() << std::endl;
623 if ( (!info.
alias().empty()) && ( info.
alias() !=
repo.alias() ) )
639 if ( filerepos.size() == 0
640 ||(filerepos.size() == 1 && filerepos.front().alias() == todelete.
alias() ) )
644 if ( ! ( ret == 0 || ret == ENOENT ) )
649 MIL << todelete.
alias() <<
" successfully deleted." << std::endl;
667 for ( std::list<RepoInfo>::const_iterator fit = filerepos.begin();
668 fit != filerepos.end();
671 if ( (*fit).alias() != todelete.
alias() )
672 (*fit).dumpAsIniOn(file);
683 MIL << todelete.
alias() <<
" successfully deleted." << std::endl;
739 for ( std::list<RepoInfo>::const_iterator fit = filerepos.begin();
740 fit != filerepos.end();
745 if ( (*fit).alias() != toedit.
alias() )
746 (*fit).dumpAsIniOn(file);
775 MIL <<
"repo " << alias <<
" modified" << std::endl;
792 if ( it !=
repos().end() )
810 for(
const auto &origin : it->repoOrigins() )
812 if ( std::any_of( origin.begin(), origin.end(), [&
url, &urlview](
const zypp::OriginEndpoint &ep ){ return (ep.url().asString(urlview) == url.asString(urlview)); }) )
831 | [
this, info](
auto) { return zyppng::repo::RefreshContext::create( _zyppContext, info, shared_this<RepoManager>() ); }
832 |
and_then( [
this, origin, policy]( zyppng::repo::RefreshContextRef &&refCtx ) {
853 modifiedrepo.
setType( repokind );
870 |
and_then( [policy, myProgress, cb = updateProbedType]( repo::RefreshContextRef refCtx ) {
893 auto r = std::move(infos)
906 modifiedrepo.
setType( repokind );
921 |
and_then( [policy, subProgress, cb = updateProbedType]( repo::RefreshContextRef refCtx ) {
929 |
and_then([subProgress]( repo::RefreshContextRef ctx ) {
932 ctx->repoManager()->reposManip();
947 | [myProgress](
auto res ) {
973 |
and_then( [
this, path = path](
auto mediaHandle ) {
984 |
and_then( [policy, myProgress]( repo::RefreshContextRef refCtx ) {
1030 MIL <<
"added service " << toSave.
alias() << std::endl;
1057 std::vector<ServiceInfo> servicesVec;
1058 std::copy( std::make_move_iterator(servicesCopy.begin()), std::make_move_iterator(servicesCopy.end()), std::back_inserter(servicesVec));
1061 std::move(servicesVec)
1074 MIL <<
"Going to delete service " << alias << std::endl;
1079 if( location.
empty() )
1088 if ( tmpSet.size() == 1 )
1095 MIL << alias <<
" successfully deleted." << std::endl;
1101 std::ofstream file(location.
c_str());
1108 for_(it, tmpSet.begin(), tmpSet.end())
1110 if( it->alias() != alias )
1111 it->dumpAsIniOn(file);
1114 MIL << alias <<
" successfully deleted from file " << location << std::endl;
1120 boost::make_function_output_iterator( std::bind( &
RepoCollector::collect, &rcollector, std::placeholders::_1 ) ) );
1137 MIL <<
"Going to modify service " << oldAlias << std::endl;
1143 if ( service.
type() == zypp::repo::ServiceType::PLUGIN )
1151 if( location.
empty() )
1161 std::ofstream file(location.
c_str());
1162 for_(it, tmpSet.begin(), tmpSet.end())
1164 if( *it != oldAlias )
1165 it->dumpAsIniOn(file);
1178 if ( oldAlias != service.
alias()
1181 std::vector<RepoInfo> toModify;
1183 for_( it, toModify.begin(), toModify.end() )
1190 const auto & last = service.
repoStates().find( it->alias() );
1192 it->setEnabled( last->second.enabled );
1195 it->setEnabled(
false );
1198 if ( oldAlias != service.
alias() )
1199 it->setService(service.
alias());
1225 MIL <<
"saving service in " << servfile << std::endl;
1227 std::ofstream file( servfile.
c_str() );
1234 MIL <<
"done" << std::endl;
1260 const std::string & basefilename )
const
1262 std::string final_filename = basefilename;
1278 zypp::repo::RepoType repokind = info.
type();
1281 repokind = probeCache( productdatapath );
1284 return expected<void>::success();
1287 switch ( repokind.
toEnum() )
1290 p = zypp::Pathname(productdatapath +
"/repodata/repomd.xml");
1294 p = zypp::Pathname(productdatapath +
"/content");
1298 p = zypp::Pathname(productdatapath +
"/cookie");
1311 return expected<void>::success();
1316 return joinPipeline( _zyppContext, RepoManagerWorkflow::refreshGeoIPData( _zyppContext, urls) );
1319 expected<void> RepoManager::touchIndexFile(
const RepoInfo & info )
1321 return touchIndexFile( info, _options );
1325 expected<void> RepoManager::init_knownServices()
1328 zypp::Pathname dir = _options.knownServicesPath;
1329 std::list<zypp::Pathname> entries;
1330 if (zypp::PathInfo(dir).isExist())
1339 for_(it, entries.begin(), entries.end() )
1341 zypp::parser::ServiceFileReader(*it, ServiceCollector(_services));
1345 zypp::repo::PluginServices(_options.pluginsPath/
"services", ServiceCollector(_services));
1347 return expected<void>::success();
1350 return expected<void>::error( std::current_exception () );
1364 const std::list<std::string> & repoEscAliases_r )
1369 if ( cachePath_r != defaultCachePath_r )
1372 std::list<std::string> entries;
1376 std::set<std::string> oldfiles;
1377 set_difference( entries.begin(), entries.end(), repoEscAliases_r.begin(), repoEscAliases_r.end(),
1378 std::inserter( oldfiles, oldfiles.end() ) );
1384 for (
const std::string & old : oldfiles )
1388 pi( cachePath_r/old );
1403 MIL <<
"start construct known repos" << std::endl;
1407 std::list<std::string> repoEscAliases;
1408 std::list<RepoInfo> orphanedRepos;
1419 const std::string & serviceAlias( repoInfo.service() );
1420 if ( ! ( serviceAlias.empty() ||
hasService( serviceAlias ) ) )
1422 WAR <<
"Schedule orphaned service repo for deletion: " << repoInfo << std::endl;
1423 orphanedRepos.push_back( repoInfo );
1427 repoEscAliases.push_back(repoInfo.escaped_alias());
1431 if ( ! orphanedRepos.empty() )
1433 for (
const auto & repoInfo : orphanedRepos )
1435 MIL <<
"Delete orphaned service repo " << repoInfo.alias() << std::endl;
1440 % repoInfo.service()
1441 % repoInfo.alias() );
1459 repoEscAliases.sort();
1473 MIL <<
"end construct known repos" << std::endl;
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
#define ZYPP_EXCPT_PTR(EXCPT)
Drops a logline and returns Exception as a std::exception_ptr.
#define ZYPP_FWD_CURRENT_EXCPT()
Drops a logline and returns the current Exception as a std::exception_ptr.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
static const ValueType day
static Date now()
Return the current time.
Base class for Exception.
std::string asUserHistory() const
A single (multiline) string composed of asUserString and historyAsString.
Execute a program and give access to its io An object of this class encapsulates the execution of an ...
std::vector< std::string > Arguments
Writing the zypp history file.
void modifyRepository(const RepoInfo &oldrepo, const RepoInfo &newrepo)
Log certain modifications to a repository.
void addRepository(const RepoInfo &repo)
Log a newly added repository.
void removeRepository(const RepoInfo &repo)
Log recently removed repository.
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
endpoint_iterator begin()
Represents a single, configurable network endpoint, combining a URL with specific access settings.
static Pathname assertprefix(const Pathname &root_r, const Pathname &path_r)
Return path_r prefixed with root_r, unless it is already prefixed.
What is known about a repository.
MirroredOriginSet repoOrigins() const
The repodata origins.
repo::RepoType type() const
Type of repository,.
void setBaseUrl(Url url)
Clears current base URL list and adds url.
void setPackagesPath(const Pathname &path)
set the path where the local packages are stored
url_set baseUrls() const
The complete set of repository urls as configured.
bool requireStatusWithMediaFile() const
Returns true if this repository requires the media.1/media file to be included in the metadata status...
Url mirrorListUrl() const
Url of a file which contains a list of repository urls.
std::ostream & dumpAsIniOn(std::ostream &str) const override
Write this RepoInfo object into str in a .repo file format.
void setMetadataPath(const Pathname &path)
Set the path where the local metadata is stored.
void setType(const repo::RepoType &t)
set the repository type
bool repoOriginsEmpty() const
whether repo origins are available
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.
bool hasService(const std::string &alias) const
Return whether there is a known service for alias.
void addService(const std::string &alias, const Url &url)
Adds a new service by its alias and URL.
bool isCached(const RepoInfo &info) const
Whether a repository exists in cache.
void removeService(const std::string &alias)
Removes service specified by its name.
repo::ServiceType probeService(const Url &url) const
Probe the type or the service.
void cleanCache(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
clean local cache
void refreshServices(const RefreshServiceOptions &options_r=RefreshServiceOptions())
Refreshes all enabled services.
void addRepository(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Adds a repository to the list of known repositories.
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.
void refreshGeoIp(const RepoInfo::url_set &urls)
void refreshService(const std::string &alias, const RefreshServiceOptions &options_r=RefreshServiceOptions())
Refresh specific service.
ServiceConstIterator serviceEnd() const
Iterator to place behind last service in internal storage.
ServiceConstIterator serviceBegin() const
Iterator to first service in internal storage.
void modifyRepository(const std::string &alias, const RepoInfo &newinfo, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Modify repository attributes.
void removeRepository(const RepoInfo &info, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Remove the best matching repository from known repos list.
RepoInfo getRepositoryInfo(const std::string &alias, const ProgressData::ReceiverFnc &progressrcv=ProgressData::ReceiverFnc())
Find a matching repository info.
ServiceInfo getService(const std::string &alias) const
Finds ServiceInfo by alias or return ServiceInfo::noService.
RefreshCheckStatus checkIfToRefreshMetadata(const RepoInfo &info, const Url &url, RawMetadataRefreshPolicy policy=RefreshIfNeeded)
Checks whether to refresh metadata for specified repository and url.
RepoConstIterator repoBegin() const
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.
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
RepoStatus metadataStatus(const RepoInfo &info) const
Status of local metadata.
void modifyService(const std::string &oldAlias, const ServiceInfo &service)
Modifies service file (rewrites it with new values) and underlying repositories if needed.
repo::RepoType probe(const Url &url, const Pathname &path) const
Probe repo metadata type.
Track changing files or directories.
static RepoStatus fromCookieFileUseMtime(const Pathname &path)
Reads the status from a cookie file but uses the files mtime.
bool empty() const
Whether the status is empty (empty checksum).
static const std::string & systemRepoAlias()
Reserved system repository alias @System .
repo::ServiceType type() const
Service type.
const RepoStates & repoStates() const
Access the remembered repository states.
Url url() const
The service url.
std::ostream & dumpAsIniOn(std::ostream &str) const override
Writes ServiceInfo to stream in ".service" format.
bool isValid() const
Verifies the Url.
Wrapper class for stat/lstat.
const Pathname & path() const
Return current Pathname.
bool isExist() const
Return whether valid stat info exists.
const std::string & asString() const
Return current Pathname as String.
Pathname extend(const std::string &r) const
Append string r to the last component of the path.
Pathname dirname() const
Return all but the last component od this path.
const char * c_str() const
String representation.
const std::string & asString() const
String representation.
bool empty() const
Test for an empty path.
Read repository data from a .repo file.
Read service data from a .service file.
Repository already exists and some unique attribute can't be duplicated.
Exception for repository handling.
std::string label() const
Label for use in messages for the user interface.
void setFilepath(const Pathname &filename)
set the path to the .repo file
void setAlias(const std::string &alias)
set the repository alias
Pathname filepath() const
File where this repo was read from.
bool enabled() const
If enabled is false, then this repository must be ignored as if does not exists, except when checking...
std::string alias() const
unique identifier for this source.
thrown when it was impossible to determine one url for this repo.
The repository cache is not built yet so you can't create the repostories from the cache.
thrown when it was impossible to match a repository
Service already exists and some unique attribute can't be duplicated.
Base Exception for service handling.
Service plugin is immutable.
Lightweight repository attribute value lookup.
static const SolvAttr repositoryToolVersion
std::shared_ptr< T > shared_this() const
bool error(std::string msg_r, UserData userData_r=UserData())
send error text
bool warning(std::string msg_r, UserData userData_r=UserData())
send warning text
static void increase(ProgressObserverRef progress, double inc=1.0, const std::optional< std::string > &newLabel={})
static ProgressObserverRef makeSubTask(ProgressObserverRef parentProgress, float weight=1.0, const std::string &label=std::string(), int steps=100)
static void setup(ProgressObserverRef progress, const std::string &label=std::string(), int steps=100)
static void finish(ProgressObserverRef progress, ProgressObserver::FinishResult result=ProgressObserver::Success)
void setCurrent(double curr)
RepoSet::const_iterator RepoConstIterator
expected< RepoInfo > addProbedRepository(RepoInfo info, zypp::repo::RepoType probedType)
std::string generateFilename(const RepoInfo &info) const
expected< void > init_knownServices()
zypp::RepoManagerFlags::RefreshServiceOptions RefreshServiceOptions
zypp::DefaultIntegral< bool, false > _reposDirty
bool hasRepo(const std::string &alias) const
expected< void > saveService(ServiceInfo &service) const
zypp::RepoManagerFlags::RawMetadataRefreshPolicy RawMetadataRefreshPolicy
static zypp::repo::RepoType probeCache(const zypp::Pathname &path_r)
Probe Metadata in a local cache directory.
zypp::Pathname generateNonExistingName(const zypp::Pathname &dir, const std::string &basefilename) const
ContextRefType _zyppContext
expected< void > initialize()
std::set< ServiceInfo > ServiceSet
ServiceInfo typedefs.
RepoManagerOptions _options
expected< void > init_knownRepositories()
bool hasService(const std::string &alias) const
const RepoManagerOptions & options() const
zypp::RepoManagerFlags::CacheBuildPolicy CacheBuildPolicy
Functor collecting ServiceInfos into a ServiceSet.
static expected success(ConsParams &&...params)
static expected error(ConsParams &&...params)
SignalProxy< void(zypp::repo::RepoType)> sigProbedTypeChanged()
static expected< repo::RefreshContextRef > create(ContextRef zyppContext, zypp::RepoInfo info, RepoManagerRef repoManager)
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
String related utilities and Regular expression matching.
RefreshCheckStatus
Possibly return state of RepoManager::checkIfToRefreshMetadata function.
Namespace intended to collect all environment variables we use.
bool ZYPP_PLUGIN_APPDATA_FORCE_COLLECT()
To trigger appdata refresh unconditionally.
int recursive_rmdir(const Pathname &path)
Like 'rm -r DIR'.
int unlink(const Pathname &path)
Like 'unlink'.
int readdir(std::list< std::string > &retlist_r, const Pathname &path_r, bool dots_r)
Return content of directory via retlist.
int assert_dir(const Pathname &path, unsigned mode)
Like 'mkdir -p'.
int touch(const Pathname &path)
Change file's modification and access times.
std::string & replaceAll(std::string &str_r, const std::string &from_r, const std::string &to_r)
Replace all occurrences of from_r with to_r in str_r (inplace).
std::string numstring(char n, int w=0)
bool regex_match(const std::string &s, smatch &matches, const regex ®ex)
\relates regex \ingroup ZYPP_STR_REGEX \relates regex \ingroup ZYPP_STR_REGEX
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
std::string join(const ParamVec &pvec, const std::string &psep)
Join parameter vector to a string.
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
std::string asString(const Patch::Category &obj)
MaybeAwaitable< expected< repo::RefreshCheckStatus > > checkIfToRefreshMetadata(repo::RefreshContextRef refCtx, LazyMediaHandle< Provide > medium, ProgressObserverRef progressObserver)
MaybeAwaitable< expected< void > > addRepositories(RepoManagerRef mgr, zypp::Url url, ProgressObserverRef myProgress)
MaybeAwaitable< expected< zypp::repo::RepoType > > probeRepoType(ContextRef ctx, Provide::LazyMediaHandle medium, zypp::Pathname path, std::optional< zypp::Pathname > targetPath)
MaybeAwaitable< expected< RepoInfo > > addRepository(RepoManagerRef mgr, RepoInfo info, ProgressObserverRef myProgress, const zypp::TriBool &forcedProbe)
MaybeAwaitable< expected< repo::RefreshContextRef > > refreshMetadata(repo::RefreshContextRef refCtx, LazyMediaHandle< Provide > medium, ProgressObserverRef progressObserver)
MaybeAwaitable< expected< repo::RefreshContextRef > > buildCache(repo::RefreshContextRef refCtx, zypp::RepoManagerFlags::CacheBuildPolicy policy, ProgressObserverRef progressObserver)
MaybeAwaitable< expected< void > > refreshGeoIPData(ContextRef ctx, RepoInfo::url_set urls)
MaybeAwaitable< expected< void > > refreshService(RepoManagerRef repoMgr, ServiceInfo info, zypp::RepoManagerFlags::RefreshServiceOptions options)
MaybeAwaitable< expected< zypp::repo::ServiceType > > probeServiceType(ContextRef ctx, const zypp::Url &url)
auto incProgress(ProgressObserverRef progressObserver, double progrIncrease=1.0, std::optional< std::string > newStr={})
zypp::RepoManagerFlags::RawMetadataRefreshPolicy RawMetadataRefreshPolicy
bool isTmpRepo(const RepoInfo &info_r)
Whether repo is not under RM control and provides its own methadata paths.
expected< void > assert_urls(const RepoInfo &info)
std::list< RepoInfo > repositories_in_dir(ZContextRef zyppContext, const zypp::Pathname &dir)
List of RepoInfo's from a directory.
void cleanupNonRepoMetadtaFolders(const zypp::Pathname &cachePath_r, const zypp::Pathname &defaultCachePath_r, const std::list< std::string > &repoEscAliases_r)
Generate a non existing filename in a directory, using a base name.
std::string filenameFromAlias(const std::string &alias_r, const std::string &stem_r)
Generate a related filename from a repo/service infos alias.
static expected< std::decay_t< Type >, Err > make_expected_success(Type &&t)
expected< zypp::Pathname > rawcache_path_for_repoinfo(const RepoManagerOptions &opt, const RepoInfo &info)
Calculates the raw cache path for a repository, this is usually /var/cache/zypp/alias.
expected< void > assert_alias(const RepoInfo &info)
ResultType or_else(const expected< T, E > &exp, Function &&f)
ResultType and_then(const expected< T, E > &exp, Function &&f)
auto transform(Container< Msg, CArgs... > &&val, Transformation &&transformation)
expected< zypp::Pathname > solv_path_for_repoinfo(const RepoManagerOptions &opt, const RepoInfo &info)
Calculates the solv cache path for a repository.
expected< std::list< RepoInfo > > repositories_in_file(const zypp::Pathname &file)
Reads RepoInfo's from a repo file.
Iterator findAlias(const std::string &alias_r, Iterator begin_r, Iterator end_r)
Find alias_r in repo/service container.
std::enable_if_t<!std::is_same_v< void, T >, expected< Container< T >, E > > collect(Container< expected< T, E >, CArgs... > &&in)
expected< zypp::Pathname > packagescache_path_for_repoinfo(const RepoManagerOptions &opt, const RepoInfo &info)
Calculates the packages cache path for a repository.
auto joinPipeline(ContextRef ctx, T &&val)
expected< zypp::Pathname > rawproductdata_path_for_repoinfo(const RepoManagerOptions &opt, const RepoInfo &info)
Calculates the raw product metadata path for a repository, this is inside the raw cache dir,...
expected< T, E > inspect(expected< T, E > exp, Function &&f)
bool autoPruneInDir(const zypp::Pathname &path_r)
bsc#1204956: Tweak to prevent auto pruning package caches.
auto mtry(F &&f, Args &&...args)
Repository type enumeration.
static const RepoType YAST2
static const RepoType RPMMD
static const RepoType NONE
static const RepoType RPMPLAINDIR
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
Url::asString() view options.
Simple callback to collect the results.
bool collect(const RepoInfo &repo)
#define ZYPP_PRIVATE_CONSTR_ARG