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; }
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;
typedef list<RepoInfoBase_Ptr> ServiceList;
+static bool refresh_service(Zypper & zypper, const ServiceInfo & service);
+
// ----------------------------------------------------------------------------
template <typename Target, typename Source>
template <class Container>
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<ServiceInfo> & 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