Author: dmacvicar Date: Mon Jul 9 23:33:42 2007 New Revision: 5939 URL: http://svn.opensuse.org/viewcvs/zypp?rev=5939&view=rev Log: First prototype of ProgressData to Reports adapter it works!, zypper changes go in next commit. TODO: remove the Repository paramter from the report? Modified: branches/REFACTORING-10_3/libzypp/zypp/RepoManager.cc branches/REFACTORING-10_3/libzypp/zypp/ZYppCallbacks.h branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.cc branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.h branches/REFACTORING-10_3/libzypp/zypp/repo/RepoProvideFile.cc Modified: branches/REFACTORING-10_3/libzypp/zypp/RepoManager.cc URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/RepoManager.cc?rev=5939&r1=5938&r2=5939&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/RepoManager.cc (original) +++ branches/REFACTORING-10_3/libzypp/zypp/RepoManager.cc Mon Jul 9 23:33:42 2007 @@ -16,6 +16,7 @@ #include <algorithm> #include "zypp/base/InputStream.h" #include "zypp/base/Logger.h" +#include "zypp/base/Gettext.h" #include "zypp/base/Function.h" #include "zypp/PathInfo.h" #include "zypp/TmpPath.h" @@ -35,6 +36,8 @@ #include "zypp/repo/susetags/Downloader.h" #include "zypp/parser/susetags/RepoParser.h" +#include "zypp/ZYppCallbacks.h" + using namespace std; using namespace zypp; using namespace zypp::repo; @@ -454,14 +457,52 @@ filesystem::recursive_rmdir(rawcache_path_for_repoinfo(_pimpl->options, info)); } + struct RepoReportAdaptor + { + + RepoReportAdaptor( const ProgressData::ReceiverFnc &fnc, callback::SendReport<RepoReport> &report ) + : _fnc(fnc), _report(report), _first(true) + { + } + + bool report( const ProgressData &progress ) + { + if ( _first ) + { + _report->start( Repository::noRepository, progress.name()); + _first = false; + } + + _report->progress( progress.val() ); + bool value = true; + if ( _fnc ) + value = _fnc(progress); + + if ( progress.val() == progress.max() ) + { + _report->finish( Repository::noRepository, progress.name(), repo::RepoReport::NO_ERROR, ""); + } + + return value; + } + + ProgressData::ReceiverFnc _fnc; + callback::SendReport<RepoReport> &_report; + bool _first; + }; + //////////////////////////////////////////////////////////////////////////// void RepoManager::buildCache( const RepoInfo &info, CacheBuildPolicy policy, const ProgressData::ReceiverFnc & progressrcv ) { - ProgressData progress; - progress.sendTo(progressrcv); + ProgressData progress(100); + callback::SendReport<RepoReport> report; + RepoReportAdaptor adaptor( progressrcv, report ); + + progress.sendTo( bind( &RepoReportAdaptor::report, &adaptor, _1) ); + progress.name(str::form(_("Building repository '%s' cache"), info.alias().c_str())); progress.toMin(); assert_alias(info); Pathname rawpath = rawcache_path_for_repoinfo(_pimpl->options, info); @@ -494,52 +535,54 @@ // do we have type? repo::RepoType repokind = info.type(); - // if the type is unknown, try probing. - switch ( repokind.toEnum() ) - { - case RepoType::NONE_e: - // unknown, probe the local metadata - repokind = probe(rawpath.asUrl()); - break; - default: - break; - } + // if the type is unknown, try probing. + switch ( repokind.toEnum() ) + { + case RepoType::NONE_e: + // unknown, probe the local metadata + repokind = probe(rawpath.asUrl()); + break; + default: + break; + } - switch ( repokind.toEnum() ) + CombinedProgressData subprogrcv( progress, 100); + + switch ( repokind.toEnum() ) + { + case RepoType::RPMMD_e : { - case RepoType::RPMMD_e : - { - parser::yum::RepoParser parser(id, store); - parser.parse(rawpath); - // no error - } - break; - case RepoType::YAST2_e : - { - parser::susetags::RepoParser parser(id, store); - parser.parse(rawpath); + parser::yum::RepoParser parser(id, store, parser::yum::RepoParserOpts(), subprogrcv); + parser.parse(rawpath); // no error - } - case RepoType::RPMPLAINDIR_e : - { - InputStream is(rawpath + "cookie"); - string buffer; - getline( is.stream(), buffer); - Url url(buffer); - parser::plaindir::RepoParser parser(id, store); - parser.parse(url.getPathName()); - } - break; - default: - ZYPP_THROW(RepoUnknownTypeException()); } + break; + case RepoType::YAST2_e : + { + parser::susetags::RepoParser parser(id, store, subprogrcv); + parser.parse(rawpath); + // no error + } + case RepoType::RPMPLAINDIR_e : + { + InputStream is(rawpath + "cookie"); + string buffer; + getline( is.stream(), buffer); + Url url(buffer); + parser::plaindir::RepoParser parser(id, store, subprogrcv); + parser.parse(url.getPathName()); + } + break; + default: + ZYPP_THROW(RepoUnknownTypeException()); + } - // update timestamp and checksum - store.updateRepositoryStatus(id, raw_metadata_status); + // update timestamp and checksum + store.updateRepositoryStatus(id, raw_metadata_status); - MIL << "Commit cache.." << endl; - store.commit(); - progress.toMax(); + MIL << "Commit cache.." << endl; + store.commit(); + progress.toMax(); } //////////////////////////////////////////////////////////////////////////// Modified: branches/REFACTORING-10_3/libzypp/zypp/ZYppCallbacks.h URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/ZYppCallbacks.h?rev=5939&r1=5938&r2=5939&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/ZYppCallbacks.h (original) +++ branches/REFACTORING-10_3/libzypp/zypp/ZYppCallbacks.h Mon Jul 9 23:33:42 2007 @@ -18,12 +18,13 @@ #include "zypp/Pathname.h" #include "zypp/Message.h" #include "zypp/Url.h" +#include "zypp/ProgressData.h" #include "zypp/media/MediaUserAuth.h" /////////////////////////////////////////////////////////////////// namespace zypp { ///////////////////////////////////////////////////////////////// - namespace source + namespace repo { // progress for downloading a resolvable struct DownloadResolvableReport : public callback::ReportBase Modified: branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.cc URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.cc?rev=5939&r1=5938&r2=5939&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.cc (original) +++ branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.cc Mon Jul 9 23:33:42 2007 @@ -113,7 +113,7 @@ } } while ( _retry ); - report()->finish( _package, source::DownloadResolvableReport::NO_ERROR, std::string() ); + report()->finish( _package, repo::DownloadResolvableReport::NO_ERROR, std::string() ); MIL << "provided Package " << _package << " at " << ret << endl; return ret; } @@ -299,12 +299,12 @@ std::string package_str = _package->name() + "-" + _package->edition().asString(); // TranslatorExplanation %s = package being checked for integrity - switch ( report()->problem( _package, source::DownloadResolvableReport::INVALID, str::form(_("Package %s fails integrity check. Do you want to retry?"), package_str.c_str() ) ) ) + switch ( report()->problem( _package, repo::DownloadResolvableReport::INVALID, str::form(_("Package %s fails integrity check. Do you want to retry?"), package_str.c_str() ) ) ) { - case source::DownloadResolvableReport::RETRY: + case repo::DownloadResolvableReport::RETRY: _retry = true; break; - case source::DownloadResolvableReport::IGNORE: + case repo::DownloadResolvableReport::IGNORE: ZYPP_THROW(SkipRequestException("User requested skip of corrupted file")); break; default: @@ -318,7 +318,7 @@ ///////////////////////////////////////////////////////////////// - } // namespace source + } // namespace repo /////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// } // namespace zypp Modified: branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.h URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.h?rev=5939&r1=5938&r2=5939&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.h (original) +++ branches/REFACTORING-10_3/libzypp/zypp/repo/PackageProvider.h Mon Jul 9 23:33:42 2007 @@ -65,7 +65,7 @@ class PackageProvider : private base::NonCopyable { typedef shared_ptr<void> ScopedGuard; - typedef callback::SendReportsource::DownloadResolvableReport Report; + typedef callback::SendReportrepo::DownloadResolvableReport Report; typedef detail::ResImplTraitsPackage::Impl::constPtr PackageImpl_constPtr; typedef packagedelta::DeltaRpm DeltaRpm; Modified: branches/REFACTORING-10_3/libzypp/zypp/repo/RepoProvideFile.cc URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/repo/RepoProvideFile.cc?rev=5939&r1=5938&r2=5939&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/repo/RepoProvideFile.cc (original) +++ branches/REFACTORING-10_3/libzypp/zypp/repo/RepoProvideFile.cc Mon Jul 9 23:33:42 2007 @@ -43,7 +43,7 @@ * We redirect the static report triggered from Repository::provideFile * to feed the ProvideFilePolicy callbacks. */ - struct DownloadFileReportHack : public callback::ReceiveReportsource::RepoReport + struct DownloadFileReportHack : public callback::ReceiveReportrepo::RepoReport { virtual bool progress( int value ) { @@ -89,7 +89,7 @@ DownloadFileReportHack dumb; dumb._redirect = bind( mem_fun_ref( &ProvideFilePolicy::progress ), ref( policy_r ), _1 ); - callback::TempConnectsource::RepoReport temp( dumb ); + callback::TempConnectrepo::RepoReport temp( dumb ); Url url; RepoInfo info = repo_r.info(); -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org