From: Ján Kupec Date: Fri, 15 Oct 2010 12:00:44 +0000 (+0200) Subject: Auto-refresh services before loading repos. X-Git-Tag: 1.5.1~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f0612e93f1b4290993a941d42c617285474a95c6;p=platform%2Fupstream%2Fzypper.git Auto-refresh services before loading repos. --- diff --git a/src/Zypper.h b/src/Zypper.h index fdfc7cb..50ef29e 100644 --- a/src/Zypper.h +++ b/src/Zypper.h @@ -176,8 +176,13 @@ public: const std::string & commandHelp() const { return _command_help; } const ArgList & arguments() const { return _arguments; } RuntimeData & runtimeData() { return _rdata; } + zypp::RepoManager & repoManager() { if (!_rm) _rm.reset(new zypp::RepoManager(_gopts.rm_options)); return *_rm; } + + void initRepoManager() + { _rm.reset(new zypp::RepoManager(_gopts.rm_options)); } + int exitCode() const { return _exit_code; } void setExitCode(int exit) { _exit_code = exit; } bool runningShell() const { return _running_shell; } @@ -206,9 +211,6 @@ private: void setRunningShell(bool value = true) { _running_shell = value; } void setRunningHelp(bool value = true) { _running_help = value; } - void initRepoManager() - { _rm.reset(new zypp::RepoManager(_gopts.rm_options)); } - private: int _argc; diff --git a/src/repos.cc b/src/repos.cc index 9fe6e71..e25ece1 100644 --- a/src/repos.cc +++ b/src/repos.cc @@ -43,6 +43,8 @@ extern ZYpp::Ptr God; typedef list ServiceList; +static bool refresh_service(Zypper & zypper, const ServiceInfo & service); + // ---------------------------------------------------------------------------- template @@ -512,12 +514,30 @@ unsigned repo_specs_to_aliases(Zypper & zypper, template void do_init_repos(Zypper & zypper, const Container & container) { - MIL << "Going to initialize repositories." << endl; + RepoManager & manager = zypper.repoManager(); RuntimeData & gData = zypper.runtimeData(); + MIL << "Refreshing autorefresh services." << endl; + + const list & services = manager.knownServices(); + for_(s, services.begin(), services.end()) + { + bool called_refresh = false; + if (s->enabled() && s->autorefresh()) + { + refresh_service(zypper, *s); + called_refresh = true; + } + + // reinitialize the repo manager to re-read the list of repos + if (called_refresh) + zypper.initRepoManager(); + } + + MIL << "Going to initialize repositories." << endl; + // load gpg keys init_target(zypper); - RepoManager & manager = zypper.repoManager(); // get repositories specified with --repo or --catalog or in the container