43 const Arch & arch_r )
const
92 if ( ! ( ret->empty() ||
_package->repoInfo().keepPackages() ) )
148 std::string package_str =
_package->name() +
"-" +
_package->edition().asString();
157 ZYPP_THROW(SkipRequestException(
"User requested skip of corrupted file"));
160 ZYPP_THROW(AbortRequestException(
"User requested to abort"));
183 return shared_ptr<void>(
static_cast<void*
>(0),
184 bind( mem_fun_ref(
static_cast<void (shared_ptr<Report>::*)()
>(&shared_ptr<Report>::reset) ),
204 policy.
progressCB( bind( &Base::progressPackageDownload,
this, _1 ) );
206 return _access.provideFile( _package->repoInfo(), loc, policy );
217 if ( ! ret->empty() )
219 MIL <<
"provided Package from cache " << _package <<
" at " << ret << endl;
220 report()->infoInCache( _package, ret );
225 RepoInfo info = _package->repoInfo();
233 if ( ! loc.checksum().empty() )
236 if ( pi.isExist() && loc.checksum() ==
CheckSum( loc.checksum().type(), std::ifstream( pi.c_str() ) ) )
238 report()->start( _package, pi.path().asFileUrl() );
239 const Pathname & dest( info.
packagesPath() / loc.filename() );
246 MIL <<
"provided Package from toplevel cache " << _package <<
" at " << ret << endl;
259 MIL <<
"provide Package " << _package << endl;
263 report()->start( _package, url );
266 ret = doProvidePackage();
271 ERR <<
"Failed to provide Package " << _package << endl;
279 ERR <<
"Failed to provide Package " << _package << endl;
283 std::string package_str = _package->name() +
"-" + _package->edition().asString();
286 std::string detail_str(
str::form(
_(
"Failed to provide Package %s. Do you want to retry retrieval?"), package_str.c_str() ) );
295 ZYPP_THROW(SkipRequestException(
"User requested skip of corrupted file", excpt));
298 ZYPP_THROW(AbortRequestException(
"User requested to abort", excpt));
309 MIL <<
"provided Package " << _package <<
" at " << ret << endl;
329 virtual ManagedFile doProvidePackageFromCache()
const;
336 ManagedFile tryDelta(
const DeltaRpm & delta_r )
const;
339 {
return report()->progressDeltaDownload( value ); }
342 {
return report()->progressDeltaApply( value ); }
345 {
return _policy.queryInstalled( _package->name(), ed_r, _package->arch() ); }
357 RepoInfo info = _package->repoInfo();
368 std::list<DeltaRpm> deltaRpms;
369 _deltas.deltaRpms( _package ).swap( deltaRpms );
373 for_( it, deltaRpms.begin(), deltaRpms.end())
375 DBG <<
"tryDelta " << *it << endl;
377 if ( ! ret->empty() )
384 return Base::doProvidePackage();
410 report()->finishDeltaDownload();
412 report()->startDeltaApply( delta );
415 report()->problemDeltaApply(
_(
"applydeltarpm check failed.") );
420 Pathname destination( _package->repoInfo().packagesPath() / _package->location().filename() );
425 report()->problemDeltaApply(
_(
"applydeltarpm failed.") );
428 report()->finishDeltaApply();
444 PluginPackageProvider(
const std::string & stem_r,
449 : Base( access_r, package_r, deltas_r, policy_r )
453 virtual ManagedFile doProvidePackageFromCache()
const
455 return Base::doProvidePackageFromCache();
460 return Base::doProvidePackage();
482 :
_pimpl(
Impl::factoryMake( access_r, package_r, deltas_r, policy_r ) )
Candidate delta and patches for a package.
int assert_dir(const Pathname &path, unsigned mode)
Like 'mkdir -p'.
RepoInfo info() const
Return any associated RepoInfo.
bool failOnChecksumError() const
Redirect ProvideFilePolicy failOnChecksumError to this if needed.
virtual ManagedFile doProvidePackageFromCache() const
Lookup the final rpm in cache.
const Repository & repository() const
PackageProvider implementation.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
static ZConfig & instance()
Singleton ctor.
const BaseVersion & baseversion() const
ManagedFile providePackage() const
Provide the package.
bool isCached() const
Whether the package is cached.
ManagedFile tryDelta(const DeltaRpm &delta_r) const
urls_const_iterator baseUrlsBegin() const
iterator that points at begin of repository urls
callback::SendReport< repo::DownloadResolvableReport > Report
bool isCached() const
Whether the package is cached.
Policies and options for PackageProvider.
bool haveApplydeltarpm()
Test whether an execuatble applydeltarpm program is available.
What is known about a repository.
AutoDispose< const Pathname > ManagedFile
A Pathname plus associated cleanup code to be executed when path is no longer needed.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Edition represents [epoch:]version[-release]
void progressDeltaApply(int value) const
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
Report & report() const
Access to the DownloadResolvableReport.
Pathname packagesPath() const
Path where this repo packages are cached.
bool queryInstalled(const Edition &ed_r=Edition()) const
ManagedFile providePackageFromCache() const
Provide the package if it is cached.
QueryInstalledCB _queryInstalledCB
shared_ptr< Report > _report
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
RW_pointer< Impl > _pimpl
Implementation class.
PackageProvider(RepoMediaAccess &access, const Package::constPtr &package, const DeltaCandidates &deltas, const PackageProviderPolicy &policy_r=PackageProviderPolicy())
Ctor taking the Package to provide.
packagedelta::DeltaRpm DeltaRpm
shared_ptr< void > ScopedGuard
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
bool keepPackages() const
Whether packages downloaded from this repository will be kept in local cache.
int unlink(const Pathname &path)
Like 'unlink'.
ManagedFile providePackageFromCache() const
Provide the package if it is cached.
const Edition & edition() const
int hardlinkCopy(const Pathname &oldpath, const Pathname &newpath)
Create newpath as hardlink or copy of oldpath.
bool progressPackageDownload(int value) const
Redirect ProvideFilePolicy package download progress to this.
RpmPackageProvider(RepoMediaAccess &access_r, const Package::constPtr &package_r, const DeltaCandidates &deltas_r, const PackageProviderPolicy &policy_r)
#define _(MSG)
Return translated text.
const OnMediaLocation & location() const
virtual ManagedFile doProvidePackage() const
Actually provide the final rpm.
void setDispose(const Dispose &dispose_r)
Set a new dispose function.
RepoMediaAccess & _access
ScopedGuard newReport() const
bool baseUrlsEmpty() const
whether repository urls are available
ProvideFilePolicy & failOnChecksumErrorCB(FailOnChecksumErrorCB failOnChecksumErrorCB_r)
Set callback.
PackageProvider::Impl Base
const std::string & sequenceinfo() const
virtual ManagedFile doProvidePackageFromCache() const =0
Lookup the final rpm in cache.
Base class for Exception.
ProvideFilePolicy & progressCB(ProgressCB progressCB_r)
Set callback.
PackageProviderPolicy _policy
Provide a package from a Repo.
Impl(RepoMediaAccess &access_r, const Package::constPtr &package_r, const DeltaCandidates &deltas_r, const PackageProviderPolicy &policy_r)
Ctor taking the Package to provide.
ManagedFile providePackage() const
Provide the package.
Reference counted access to a _Tp object calling a custom Dispose function when the last AutoDispose ...
RPM PackageProvider implementation.
Pathname repoPackagesCachePath
std::string asUserHistory() const
A single (multiline) string composed of asUserString and historyAsString.
bool quickcheck(const std::string &sequenceinfo_r)
Quick via check sequence info.
bool check(const std::string &sequenceinfo_r, bool quick_r)
Check via sequence info.
virtual ManagedFile doProvidePackage() const =0
Actually provide the final rpm.
bool queryInstalled(const std::string &name_r, const Edition &ed_r, const Arch &arch_r) const
Evaluate callback.
bool progressDeltaDownload(int value) const
Base for exceptions caused by explicit user request.
static bool schemeIsDownloading(const std::string &scheme_r)
http https ftp sftp tftp
Easy-to use interface to the ZYPP dependency resolver.
Package::constPtr _package
bool provide(const Pathname &delta_r, const Pathname &new_r, const Progress &report_r)
Apply a binary delta to on-disk data to re-create a new rpm.
TraitsType::constPtrType constPtr
bool download_use_deltarpm_always() const
Whether to consider using a deltarpm even when rpm is local.
static const Edition noedition
Value representing noedition ("") This is in fact a valid Edition.
static Impl * factoryMake(RepoMediaAccess &access_r, const Package::constPtr &package_r, const DeltaCandidates &deltas_r, const PackageProviderPolicy &policy_r)
Factory method providing the appropriate implementation.