diff --git a/pym/update/update.py b/pym/update/update.py index c46e8b5..0030243 100644 --- a/pym/update/update.py +++ b/pym/update/update.py @@ -23,7 +23,7 @@ import time from calculate.core.server.gen_pid import search_worked_process from calculate.core.setup_cache import Cache as SetupCache from calculate.core.server.func import MethodsInterface -from calculate.lib.cl_template import SystemIni +from calculate.lib.cl_template import SystemIni, LayeredIni from calculate.lib.datavars import DataVarsError from calculate.lib.utils.tools import AddonError @@ -49,7 +49,8 @@ from calculate.lib.utils.portage import (Layman, EmergeLog, Colors = TextState.Colors from calculate.lib.utils.files import (getProgPath, STDOUT, removeDir, PercentProgress, process, getRunCommands, - readFile, listDirectory) + readFile, listDirectory, pathJoin, + writeFile) import emerge_parser import logging from emerge_parser import (EmergeParser, EmergeCommand, EmergeError, @@ -221,7 +222,7 @@ class Update(MethodsInterface): if not status: self.printWARNING(_("Updates autocheck is not enabled")) return False - last_check = SystemIni().getVar('update', 'last_check') or "" + last_check = SystemIni(self.clVars).getVar('update', 'last_check') or "" re_interval = re.compile("^(\d+)\s*(hours?|days?|weeks?)?", re.I) interval_match = re_interval.search(interval) MINUTE = 60 @@ -779,7 +780,7 @@ class Update(MethodsInterface): """ Установить отметку о запуске запланированной проверки """ - SystemIni().setVar('update', {'last_check': str(int(time.time()))}) + SystemIni(self.clVars).setVar('update', {'last_check': str(int(time.time()))}) def get_default_emerge_opts(self): return self.clVars.Get('cl_emerge_default_opts') @@ -1172,10 +1173,23 @@ class Update(MethodsInterface): :return: """ hosts = self.clVars.Get("update.cl_update_binhost_host") + datas = self.clVars.Get("update.cl_update_binhost_revisions") + bin_cache_fn = pathJoin(self.clVars.Get('cl_chroot_path'), + LayeredIni.IniPath.Grp) if not hosts: self.clVars.Delete('cl_update_binhost', location="system") + try: + if path.exists(bin_cache_fn): + os.unlink(bin_cache_fn) + except OSError: + raise UpdateError( + _("Failed to clear ini cache of binary repository")) + raise UpdateError(_("Failed to find the server with " "appropriate updates")) + else: + with writeFile(bin_cache_fn) as f: + f.write(datas[0].strip()+"\n") if write_binhost: if hosts[0] != self.clVars.Get('update.cl_update_binhost'): self.refresh_binhost = True diff --git a/pym/update/update_info.py b/pym/update/update_info.py index abac375..f0f5975 100644 --- a/pym/update/update_info.py +++ b/pym/update/update_info.py @@ -28,8 +28,7 @@ class UpdateInfo(object): """ Информационный объект о процессе обновления """ - section = "update" - varname = "updates" + update_file = "/var/lib/calculate/calculate-update/updates.available" def __init__(self, dv=None): if dv is None: @@ -46,15 +45,20 @@ class UpdateInfo(object): """ Проверить есть ли обновления по ini.env """ - return SystemIni().getVar(cls.section, cls.varname) == u'on' + return path.exists(cls.update_file) @classmethod def set_update_ready(cls, value): """ Установить статус обновления """ - SystemIni().setVar(cls.section, - {cls.varname:"on" if value else "off"}) + try: + if value: + writeFile(cls.update_file).close() + else: + os.unlink(cls.update_file) + except OSError: + pass def check_for_dispatch(self): """