Go to the documentation of this file.
59 struct DownloadFileReportHack :
public callback::ReceiveReport<media::DownloadProgressReport>
61 typedef callback::ReceiveReport<ReportType> BaseType;
62 typedef function<
bool(
int)> RedirectType;
64 DownloadFileReportHack( RedirectType redirect_r )
65 :
_oldRec( Distributor::instance().getReceiver() )
68 ~DownloadFileReportHack()
69 {
if (
_oldRec ) Distributor::instance().setReceiver( *
_oldRec );
else Distributor::instance().noReceiver(); }
71 virtual void start(
const Url & file, Pathname localfile )
74 _oldRec->start( file, localfile );
76 BaseType::start( file, localfile );
79 virtual bool progress(
int value,
const Url & file,
double dbps_avg = -1,
double dbps_current = -1 )
83 ret &=
_oldRec->progress( value, file, dbps_avg, dbps_current );
89 virtual Action problem(
const Url & file,
Error error,
const std::string & description )
92 return _oldRec->problem( file, error, description );
93 return BaseType::problem( file, error, description );
95 virtual void finish(
const Url & file,
Error error,
const std::string & reason )
98 _oldRec->finish( file, error, reason );
100 BaseType::finish( file, error, reason );
117 return access.
provideFile(repo_r, loc_r, policy_r );
130 std::map<Url, shared_ptr<MediaSetAccess> >::iterator it;
135 it->second->release();
148 std::map<Url, shared_ptr<MediaSetAccess> >::const_iterator it;
150 shared_ptr<MediaSetAccess> media;
168 media->setLabel( repo.
name() );
175 if (
PathInfo(mediafile).isExist() )
177 std::map<shared_ptr<MediaSetAccess>,
RepoInfo>::const_iterator it;
181 if ( it->second.alias() == repo.
alias() )
198 unsigned media_nr = str::strtonum<unsigned>(buffer);
199 MIL <<
"Repository '" << repo.
alias() <<
"' has " << media_nr <<
" medias"<< endl;
201 for (
unsigned i=1; i <= media_nr; ++i )
216 WAR <<
"No media verifier for repo '" << repo.
alias() <<
"' media.1/media does not exist in '" << repo.
metadataPath() <<
"'" << endl;
221 WAR <<
"'" << repo.
alias() <<
"' metadata path is empty. Can't set verifier. Probably this repository does not come from RepoManager." << endl;
227 std::map<Url, shared_ptr<MediaSetAccess> >
_medias;
236 : _impl( new
Impl( defaultPolicy_r ) )
254 MIL << locWithPath << endl;
261 str::form(
_(
"Can't provide file '%s' from repository '%s'"),
263 repo_r.
alias().c_str() ) );
287 if ( geteuid() != 0 && ! pi.
userMayW() )
289 WAR <<
"Destination dir '" << destinationDir <<
"' is not user writable, using tmp space." << endl;
290 destinationDir = getZYpp()->tmpPath() / destinationDir;
293 MIL <<
"Added cache path " << destinationDir << endl;
307 MIL <<
"Providing file of repo '" << repo_r.
alias() <<
"' from " <<
url << endl;
311 fetcher.
start( destinationDir, *access );
320 MIL <<
"provideFile at " << ret << endl;
337 WAR <<
"Trying next url" << endl;
int assert_dir(const Pathname &path, unsigned mode)
Like 'mkdir -p'.
bool isExist() const
Return whether valid stat info exists.
Base class for Exception.
What is known about a repository.
transform_iterator< repo::RepoVariablesUrlReplacer, url_set::const_iterator > urls_const_iterator
void addCachePath(const Pathname &cache_dir)
adds a directory to the list of directories where to look for cached files
AutoDispose< const Pathname > ManagedFile
A Pathname plus associated cleanup code to be executed when path is no longer needed.
bool baseUrlsEmpty() const
whether repository urls are available
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
ManagedFile provideFile(RepoInfo repo_r, const OnMediaLocation &loc_r, const ProvideFilePolicy &policy_r)
Provide a file from a Repository.
int unlink(const Pathname &path)
Like 'unlink'.
std::string getline(std::istream &str)
Read one line from stream.
Pathname packagesPath() const
Path where this repo packages are cached.
Wrapper for const correct access via Smart pointer types.
void remember(const Exception &old_r)
Store an other Exception as history.
Wrapper class for ::stat/::lstat.
const char * c_str() const
String representation.
Policy for provideFile and RepoMediaAccess.
std::string alias() const
unique identifier for this source.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
std::string name() const
Repository name.
Easy-to use interface to the ZYPP dependency resolver.
urls_const_iterator baseUrlsBegin() const
iterator that points at begin of repository urls
void setDispose(const Dispose &dispose_r)
Set a new dispose function.
bool progress(int value) const
Evaluate callback.
void start(const Pathname &dest_dir, MediaSetAccess &media, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
start the transfer to a destination directory dest_dir You have to provde a media set access media to...
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
Pathname metadataPath() const
Path where this repo metadata was read from.
bool empty() const
Test for an empty path.
void enqueue(const OnMediaLocation &resource, const FileChecker &checker=FileChecker())
Enqueue a object for transferal, they will not be transferred until start() is called.
Exception for repository handling.
String related utilities and Regular expression matching.
urls_const_iterator baseUrlsEnd() const
iterator that points at end of repository urls
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
const std::string & asString() const
String representation.
ProvideFilePolicy & fileChecker(FileChecker fileChecker_r)
Add a FileCecker passed down to the Fetcher.
Base for exceptions caused by explicit user request.
bool keepPackages() const
Whether packages downloaded from this repository will be kept in local cache.
Pathname path() const
Repository path.
urls_size_type baseUrlsSize() const
number of repository urls
This class allows to retrieve a group of files in a confortable way, providing some smartness that do...