Author: lslezak
Date: Tue Dec 4 15:59:22 2007
New Revision: 42666
URL: http://svn.opensuse.org/viewcvs/yast?rev=42666&view=rev
Log:
- SourceLoad() - split into stages
Modified:
trunk/pkg-bindings/src/Source.cc
Modified: trunk/pkg-bindings/src/Source.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/pkg-bindings/src/Source.cc?rev=42666&r1=42665&r2=42666&view=diff
==============================================================================
--- trunk/pkg-bindings/src/Source.cc (original)
+++ trunk/pkg-bindings/src/Source.cc Tue Dec 4 15:59:22 2007
@@ -434,6 +434,9 @@
// 3 steps per repository (download, cache rebuild, load resolvables)
ProcessStart("Loading the Package Manager...", stages, "help");
+ // mark refreshing as in progress now
+ ProcessNextStage();
+
ptr = this;
YCPValue ret = SourceLoadImpl(source_receiver);
@@ -473,6 +476,9 @@
zypp::ProgressData prog_total(repos_to_load * 3);
prog_total.sendTo(progress);
+ zypp::RepoManager repomanager = CreateRepoManager();
+
+ // refresh metadata
for (std::vector::iterator it = repos.begin();
it != repos.end(); ++it)
{
@@ -481,8 +487,6 @@
{
// sub tasks
zypp::CombinedProgressData refresh_subprogress(prog_total, 1);
- zypp::CombinedProgressData rebuild_subprogress(prog_total, 1);
- zypp::CombinedProgressData load_subprogress(prog_total, 1);
if (AnyResolvableFrom((*it)->repoInfo().alias()))
{
@@ -490,28 +494,62 @@
}
else
{
- zypp::RepoManager repomanager = CreateRepoManager();
-
// autorefresh the source
if ((*it)->repoInfo().autorefresh())
{
try
{
y2milestone("Autorefreshing source: %s", (*it)->repoInfo().alias().c_str());
+ RefreshWithCallbacks((*it)->repoInfo());
zypp::ProgressData prog(1);
- prog.sendTo(refresh_subprogress);
- // TODO pass progress to RefreshWithCallbacks
+ prog.sendTo(refresh_subprogress);
RefreshWithCallbacks((*it)->repoInfo());
prog.toMax();
+ }
+ // NOTE: subtask progresses are reported as done in the descructor
+ // no need to handle them in the exception code
+ catch (const zypp::Exception& excpt)
+ {
+ y2error ("Error in SourceLoad: %s", excpt.asString().c_str());
+ _last_error.setLastError(ExceptionAsString(excpt));
+ success = false;
+ }
+ }
+ }
+ }
+ }
+
+ ProcessNextStage();
+
+ // rebuild cache
+ for (std::vector::iterator it = repos.begin();
+ it != repos.end(); ++it)
+ {
+ // load resolvables only from enabled repos which are not deleted
+ if ((*it)->repoInfo().enabled() && !(*it)->isDeleted())
+ {
+ // sub tasks
+ zypp::CombinedProgressData rebuild_subprogress(prog_total, 1);
+ if (AnyResolvableFrom((*it)->repoInfo().alias()))
+ {
+ y2milestone("Resolvables from '%s' are already present, not loading", (*it)->repoInfo().alias().c_str());
+ }
+ else
+ {
+ // autorefresh the source
+ if ((*it)->repoInfo().autorefresh())
+ {
+ try
+ {
// rebuild cache (the default policy is "if needed")
y2milestone("Rebuilding cache for '%s'...", (*it)->repoInfo().alias().c_str());
- zypp::ProgressData prog_build(1);
- prog.sendTo(rebuild_subprogress);
+ zypp::ProgressData prog(1);
+ prog.sendTo(rebuild_subprogress);
repomanager.buildCache((*it)->repoInfo());
- prog_build.toMax();
+ prog.toMax();
}
// NOTE: subtask progresses are reported as done in the descructor
// no need to handle them in the exception code
@@ -522,13 +560,40 @@
success = false;
}
}
+ }
+ }
+ }
+
+ ProcessNextStage();
+
+ for (std::vector::iterator it = repos.begin();
+ it != repos.end(); ++it)
+ {
+ // load resolvables only from enabled repos which are not deleted
+ if ((*it)->repoInfo().enabled() && !(*it)->isDeleted())
+ {
+ // sub tasks
+ zypp::CombinedProgressData load_subprogress(prog_total, 1);
+
+ if (AnyResolvableFrom((*it)->repoInfo().alias()))
+ {
+ y2milestone("Resolvables from '%s' are already present, not loading", (*it)->repoInfo().alias().c_str());
+ }
+ else
+ {
+ zypp::ProgressData prog(1);
+ prog.sendTo(load_subprogress);
// load objects
success = LoadResolvablesFrom((*it)->repoInfo()) && success;
+
+ prog.toMax();
}
}
}
+ ProcessNextStage();
+
// report 100%
prog_total.toMax();
@@ -559,7 +624,7 @@
}
// enable all sources and load the resolvables
- success = YCPBoolean(SourceLoadImpl()->asBoolean()->value() && success->asBoolean()->value());
+ success = YCPBoolean(SourceLoad()->asBoolean()->value() && success->asBoolean()->value());
}
return success;
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org