30 template<
class Executor,
class OpType>
31 struct StatusLogic :
public LogicBase<Executor, OpType>{
37 using ZyppContextType =
typename DlContextRefType::element_type::ContextType;
38 using ProvideType =
typename ZyppContextType::ProvideType;
39 using MediaHandle =
typename ProvideType::MediaHandle;
42 StatusLogic( DlContextRefType ctx, MediaHandle &&
media )
43 : _ctx(std::move(ctx))
44 , _handle(std::move(
media))
47 MaybeAsyncRef<expected<zypp::RepoStatus>> execute() {
48 return _ctx->zyppContext()->provider()->provide( _handle, _ctx->repoInfo().path() /
"/repodata/repomd.xml" ,
ProvideFileSpec().setMirrorsAllowed(
false) )
56 if ( !status.
empty() && _ctx->repoInfo ().requireStatusWithMediaFile()) {
57 return _ctx->zyppContext()->provider()->provide( _handle,
"/media.1/media" ,
ProvideFileSpec().setMirrorsAllowed(
false) )
69 DlContextRefType _ctx;
89 template<
class Executor,
class OpType>
96 using ZyppContextType =
typename DlContextRefType::element_type::ContextType;
97 using ProvideType =
typename ZyppContextType::ProvideType;
98 using MediaHandle =
typename ProvideType::MediaHandle;
101 DlLogic( DlContextRefType ctx, MediaHandle &&mediaHandle, ProgressObserverRef &&progressObserver )
102 :
zypp::
repo::yum::RepomdFileCollector( ctx->destDir() )
103 , _ctx(
std::move(ctx))
104 , _mediaHandle(
std::move(mediaHandle))
105 , _progressObserver(
std::move(progressObserver))
114 if ( mediaInfo ) _ctx->files().push_back ( std::move(mediaInfo.get()) );
116 if ( _progressObserver ) _progressObserver->inc();
120 |
and_then( [
this] ( DlContextRefType && ) {
123 std::vector<zypp::OnMediaLocation> requiredFiles;
126 finalize([&](
const zypp::OnMediaLocation &file ){
129 ZYPP_THROW(zypp::repo::RepoException( _ctx->repoInfo(),
"Repo can only require metadata files from primary medium."));
131 requiredFiles.push_back( file );
138 if ( _progressObserver ) _progressObserver->setBaseSteps ( _progressObserver->baseSteps () + requiredFiles.size() );
140 return transform_collect ( std::move(requiredFiles), [
this]( zypp::OnMediaLocation file ) {
145 }) |
and_then ( [
this]( std::vector<zypp::ManagedFile> &&dlFiles ) {
146 auto &downloadedFiles = _ctx->files();
147 downloadedFiles.insert( downloadedFiles.end(), std::make_move_iterator(dlFiles.begin()), std::make_move_iterator(dlFiles.end()) );
157 const zypp::RepoInfo &repoInfo()
const override {
158 return _ctx->repoInfo();
161 const zypp::filesystem::Pathname &deltaDir()
const override {
162 return _ctx->deltaDir();
165 DlContextRefType _ctx;
166 MediaHandle _mediaHandle;
167 ProgressObserverRef _progressObserver;
Track changing files or directories.
bool empty() const
Whether the status is empty (empty checksum)