From 33b3c7dbc0199e922567285cffafbff7d2b6ff02 Mon Sep 17 00:00:00 2001 From: Mike Khiretskiy Date: Wed, 3 Sep 2014 11:49:22 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BD=D0=B5=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=8F=D0=B4=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update/update.py | 28 ++++++++++++++++++++++++++-- update/variables/update.py | 32 +++++++++++++++++++++++++++++++- update/wsdl_update.py | 2 +- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/update/update.py b/update/update.py index 17f64c4..b1eda94 100644 --- a/update/update.py +++ b/update/update.py @@ -706,13 +706,34 @@ class Update: Выполнить очистку системы от лишних пакетов """ deo = self.clVars.Get('cl_emerge_default_opts') - with EmergeParser(EmergeCommand(["--depclean"], - emerge_default_opts=deo)) as emerge: + emerge = None + try: + emerge = EmergeParser(EmergeCommand(["--depclean"], + emerge_default_opts=deo)) try: emerge.question.action = lambda x: False emerge.run() if not emerge.uninstall_packages.list: return True + kernel_pkg = self.clVars.Get('cl_update_kernel_pkg') + if any(("%s-%s" % (x['CATEGORY/PN'], x['PVR'])) == kernel_pkg + for x in emerge.uninstall_packages.list): + pkglist = [ + "=%s-%s" % (x['CATEGORY/PN'], x['PVR']) for x in + emerge.uninstall_packages.list + if ("%s-%s" % (x['CATEGORY/PN'], + x['PVR'])) != kernel_pkg] + emerge.command.send('n\n') + emerge.close() + emerge = None + if not pkglist: + return True + emerge = EmergeParser( + EmergeCommand(pkglist, + extra_params=["--unmerge", '--ask=y'], + emerge_default_opts=deo)) + emerge.question.action = lambda x: False + emerge.run() self._display_remove_list(emerge) except EmergeError: self.printPre(self._emerge_translate(emerge.prepare_error)) @@ -721,6 +742,9 @@ class Update: _("Would you like to unmerge these packages?")) != 'yes'): return False self._startEmerging(emerge) + finally: + if emerge: + emerge.close() return True def update_task(self, task_name): diff --git a/update/variables/update.py b/update/variables/update.py index 69845c0..acb1668 100644 --- a/update/variables/update.py +++ b/update/variables/update.py @@ -23,7 +23,7 @@ from calculate.lib.datavars import (Variable, VariableError, SimpleDataVars, DataVarsError) from calculate.lib.utils.portage import searchProfile from calculate.lib.utils.files import readLinesFile, readFile, makeDirectory, \ - listDirectory + listDirectory, process from calculate.lib.cl_lang import setLocalTranslate from calculate.lib.utils.text import simplify_profiles @@ -918,3 +918,33 @@ class VariableClUpdateAutocheckScheduleSet(Variable): def init(self): self.label = _("Consider auto-check schedule") self.help = "consider auto-check schedule" + +class VariableClUpdateKernelVersion(ReadonlyVariable): + """ + Текущая версия ядра + """ + def get(self): + return process('/bin/uname','-r').read().strip() + +class VariableClUpdateKernelSrcPath(ReadonlyVariable): + """ + Каталог содержащий исходный код текущего ядра + """ + def get(self): + module_build_path = ( + "/lib/modules/%s/build" % self.Get('cl_update_kernel_version')) + if path.exists(module_build_path): + return os.readlink(module_build_path) + +class VariableClUpdateKernelPkg(ReadonlyVariable): + """ + Пакет текущего ядра + """ + def get(self): + qfile = process('/usr/bin/qfile', '-vC', + self.Get('cl_update_kernel_src_path')) + if qfile.success(): + return qfile.read().partition(" ")[0] + else: + return "" + diff --git a/update/wsdl_update.py b/update/wsdl_update.py index 53af585..6f95581 100644 --- a/update/wsdl_update.py +++ b/update/wsdl_update.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import sys, time, os +import sys from calculate.lib.datavars import VariableError,DataVarsError,DataVars