From b0cafbb72bc4938eea8da68cf5a452187a94c9aa Mon Sep 17 00:00:00 2001 From: Mike khiretskiy Date: Mon, 27 Jan 2014 10:37:15 +0400 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20cal?= =?UTF-8?q?culate-lib?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sys-apps/calculate-lib/Manifest | 2 + .../calculate-lib-3.1.9-r10.ebuild | 36 ++ .../files/calculate-lib-3.1.9-r10.patch | 482 ++++++++++++++++++ sys-apps/calculate-utilities/Manifest | 1 + .../calculate-utilities-3.1.9-r18.ebuild | 26 + 5 files changed, 547 insertions(+) create mode 100644 sys-apps/calculate-lib/calculate-lib-3.1.9-r10.ebuild create mode 100644 sys-apps/calculate-lib/files/calculate-lib-3.1.9-r10.patch create mode 100644 sys-apps/calculate-utilities/calculate-utilities-3.1.9-r18.ebuild diff --git a/sys-apps/calculate-lib/Manifest b/sys-apps/calculate-lib/Manifest index ef1a1bf39..59c169c30 100644 --- a/sys-apps/calculate-lib/Manifest +++ b/sys-apps/calculate-lib/Manifest @@ -13,6 +13,7 @@ AUX calculate-lib-3.1.8-r3.patch 3388 SHA256 b0d8c4611aa43dbc4c6a38b642d8970ef5a AUX calculate-lib-3.1.8-r4.patch 3834 SHA256 ac7a72672237ab7ea52331fc9fca1e57000502e0b3ed601b8ef6147c81c40720 SHA512 ca76b00282c0155dfe1311fc3ca8eb37308c7465ebd358e9b09581e197b65c501d703c9e0bf97177f48ac141e854b0c4880b4dde62e7ec3711bd330c79d5493f WHIRLPOOL 80cb3116fdf7be95f77de750c0dee7fd7165ae29b76aa2bd33adff6d4c7366925ffe3c6fc7b8c00313bb5b562dcd36484bb993af6723bab6d8e5fd0c31fbf19b AUX calculate-lib-3.1.8-r5.patch 5258 SHA256 ce6d9860fb69c69aebcca38ff2ceb40cafa65833b602c16303c64c0017a867fb SHA512 ba6b5a7363e133f87ed4c2c857bcb2094759d731784a2af50bccfcfef04de18df1b27123b13bc227801b878ccc677504589014efe460e8632da186282f50c59b WHIRLPOOL cc9d897183d0eae712d719574a8671bd4869a8f825fd95a2b611928ebe38354873940cec0330065a332d87415ca3ba43d2e7c83e6e3fcd1bff9783642a7c7108 AUX calculate-lib-3.1.9-r1.patch 1039 SHA256 c5bd00abd4804b19da1f8e5100033c3557d51cf5954f497a11aee8fec6254126 SHA512 e50be805c4d8b94a71b60b19cf97c3f51f2f152440c4f865b8b901da719e67d666f950f88dc8b66083111091e28cd387b1d7d5b8e6b99620842a779f081c0667 WHIRLPOOL c2a7a9e4461beeab7025bcebdf951f4291ecfbf74328b82d9b847ed5787920df8b0be6b27710dc460f1bc34b0fd09696ae452565ce84b66db47e73e938bf04c4 +AUX calculate-lib-3.1.9-r10.patch 22013 SHA256 20bb1e8692da01f66443472e385a12ca38ed3aa6fad908057c4d0fed26f2dd9c SHA512 6a41ffa070f9c8c8b480aee85b71ee15913d07a700c9a9aad1f13dc74725dc41a7752d9fde6ba5c0c9c1368b3167f28723384af9479790b618fca79957b9aa0c WHIRLPOOL fb8d9f07ce46d8f796508eb56ce2a49014ac464c1accc4ef100b3bafa7ee6550980eb88a10116e98f083fb50b50367e323a75746fe59c9c638875fde3682b1f4 AUX calculate-lib-3.1.9-r2.patch 2310 SHA256 fa08609228a82b42872606e58b5cbb0c12eee336ec1adf283f4ab484d41eed47 SHA512 b41f4e0a33c4199e50e8443f419271f945a6e25420f717c06e8f4ea2167d85b1c9843651c2f7801a65f546642c24731dcae3511c491b4aeb73eada4ee958a672 WHIRLPOOL ea5cc55d58e86eb25ad90432d555a0374b450264b6524ae28d7bf1e1a61626a30f98b4ecb7387d90cb52fa229cea91783c2a3c0b5008b0984d12e7d30d6cf648 AUX calculate-lib-3.1.9-r3.patch 5775 SHA256 972f7724c55273cd96f9f2adcd2594c9a2b2d62f35c2b26723e0b0aee6fb4c3f SHA512 97a4d78e6821a7016c7bc563af74ca87f06b172fa0499d42ce4af1caf8774234f68324aded2facaf51ea760e28099b8fe5f30467894238b008adfe890b2149d6 WHIRLPOOL 76e1adc9b4779038fe9d30afbd3b80ba21d9aeb103122a6fc64ed8048730e1ffc5f2f0ac7e1119cf654581aa1813c690b5310b61b6c107d2ef610da2f63e3d20 AUX calculate-lib-3.1.9-r4.patch 6380 SHA256 52b89cdd45270c7784d21c30a6466eb2096955bab98469b8cc67f6e84b7358fb SHA512 5b678292b332275013f8c845e54ea0ab33ec13bb70e27d60f06cb490fc896699c7fda2215c8edfef91b12d1597927a7d0fe9fc848e1d7807d706c2cbf5f14b08 WHIRLPOOL b9d85f021763bbf63f537ae5640c9fa316a97e1f5ef04794f8e09455712d3f0b4d44f10878474028b4d971272dc6b55ec2745d129e7bdf2aad75a38ae4315b0d @@ -40,6 +41,7 @@ EBUILD calculate-lib-3.1.8-r4.ebuild 824 SHA256 4e1232bd35181b158e3813c7623f4e93 EBUILD calculate-lib-3.1.8-r5.ebuild 824 SHA256 acdbb4cd0fc89d78fe04dafbc157b037d6ea188f245276399fb96b6372207f8c SHA512 28ab954fe1ecb06f649c77a84a627755c250f16cf5c49700c9f280c276adde31516425033f533e4e8721be65c6719bf7ec8bc281a445dc4966a3a59fdc0ded59 WHIRLPOOL f64e8cb981bbccf72ad06e05f4d02c6c10b96d8ad95b6ab1c5b5bf59f2a08edac4b6fad84169ff74d218ae34dd87b3669a6263a6eccdff40cc1fba9a5e2a5982 EBUILD calculate-lib-3.1.8.ebuild 690 SHA256 c89c29f5de3f70146e98f15035366506933f03e8a5066b1ad55aeccbebdeae2c SHA512 a7277c2e5fa64a5e5840be7fc8d3df9a31f41926386c5fe6a9bed31eeed6321af5881c218d9ce7eeb12aee518edb682b438e10397dcb815cc63645100430e43e WHIRLPOOL 8f19e4d46381e26fec81e20fa35599f4658b3891d6372c921a8b1354ad3b1821ea9c78f71caebf54610e0b5aacfb6e6ded018e155e1979322406a0ac1e823d09 EBUILD calculate-lib-3.1.9-r1.ebuild 824 SHA256 d3b67409877b08aaf4e4135f7bced2dc63957690901bd958a37f185210f03757 SHA512 d11f49ae5bcd01df697cfa9aabb61f78535539f4d14c7c920626033e9db8181940c2e5eea3358e09eec8ace01c17ab92b0d3a0a9d71f2c2bd3f1753ab9659a34 WHIRLPOOL 8b58dedc4d55aba969caf79b879a2fadd73903bb969a070d6182b499ec9ede15cbc9b84406ef0adcac146403b991a510a7bdb87e66f3d0b863e54c16b9a5fd05 +EBUILD calculate-lib-3.1.9-r10.ebuild 825 SHA256 d4083418ef433b2639b69fd1d18c392188aab4fb5d86cccd41cf74271e449df8 SHA512 b27e45293c65dbfb464450449a38f52e21c87c424cda72e73d3dedad0b8ca55eff28dd4e1c80d1dda820b69eaac171678182c1c6e35eb578e80edd9f7f54c8de WHIRLPOOL d19c06af5940577d238d172e224857ee0c84ae85cf16c085d45517a5616b5b8fbc818ee6964cd75ffde1e66214fbb1dbf181f17d42fbf344805b32106872e44e EBUILD calculate-lib-3.1.9-r2.ebuild 824 SHA256 ffa9e169fe308f8d7b7fc9158a56c99663c1cde9bc8b3ae24eac0a964bce27ca SHA512 d6f0e336b90476f8f7ad48897f9f054bc60c95da15fc50b0d05bf5f7deca950e249abdecbbb2dde3c11cb4533ba7a90da2da51fba2446bcd64f62cacb681dbc8 WHIRLPOOL 9a0ec32cf4b287416349ab61bae01587eca720873eef2d9ec7a7d07e21fa34fe7afb61faf84ed3f0c29c2e27b6326bef893c4859a0ef0360022a2d24da504817 EBUILD calculate-lib-3.1.9-r3.ebuild 824 SHA256 3199d484c3a5ecbaf4d254649cb4e7ee7ab072aa6fe51710cd82d7fdc78255c4 SHA512 567bcb0a0b016755dbfd69c71623854ffcb1761e4770b0ded01a7c27d3b46788ece0c21416106d24fabd7a365c0c0ae7127c2fa0bebbb6cbf060b49cba8dd0a9 WHIRLPOOL 4e733fd6f6501a5a6d1eced9c55b89a8088ff06e52576f307f853c282d437cbded80353d0b9ba122ba8efc9f614eb28fc7f5fad1714237119bab8bf75eefe35f EBUILD calculate-lib-3.1.9-r4.ebuild 824 SHA256 b1b73001e179931b6444e61520b003c610af89b96b6f4c2aea696783d079852d SHA512 d0911eeda97a7f5a8faec7787b71db43472ea18f1a377e4956db1d9e3b67a684dd4200e56ad8569a52757a4d3ac2ad2725744f5115d680ccb6b304e3242fecb4 WHIRLPOOL 1ac814a74146528810b643edce703f2824b0cf2dda7871f66f1d5a9b3fa1674b86594bdc2b3d19ed39ad15cc895c42edf06952af38c184033fe4665780e7c0d4 diff --git a/sys-apps/calculate-lib/calculate-lib-3.1.9-r10.ebuild b/sys-apps/calculate-lib/calculate-lib-3.1.9-r10.ebuild new file mode 100644 index 000000000..1f69102c9 --- /dev/null +++ b/sys-apps/calculate-lib/calculate-lib-3.1.9-r10.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="3" +SUPPORT_PYTHON_ABIS="1" +PYTHON_DEPEND="2:2.7" +RESTRICT_PYTHON_ABIS="2.4 2.5 2.6 3.*" + +inherit distutils eutils + +SRC_URI="ftp://ftp.calculate.ru/pub/calculate/calculate3/${PN}/${P}.tar.bz2" + +DESCRIPTION="The library for Calculate 3" +HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2" +LICENSE="Apache-2.0" +SLOT="3" +KEYWORDS="amd64 x86" +IUSE="minimal" +DEPEND="!minimal? ( dev-python/py-smbpasswd ) + >=dev-python/pyxml-0.8 + sys-apps/iproute2 + sys-apps/pciutils + sys-fs/lvm2 + sys-fs/mdadm + dev-python/pyinotify + sys-apps/file[python]" +RDEPEND="${DEPEND}" + +src_unpack() { + unpack "${A}" + cd "${S}" + + # apply revision changes + epatch "${FILESDIR}/calculate-lib-3.1.9-r10.patch" +} diff --git a/sys-apps/calculate-lib/files/calculate-lib-3.1.9-r10.patch b/sys-apps/calculate-lib/files/calculate-lib-3.1.9-r10.patch new file mode 100644 index 000000000..f4b17aa7f --- /dev/null +++ b/sys-apps/calculate-lib/files/calculate-lib-3.1.9-r10.patch @@ -0,0 +1,482 @@ +diff --git calculate/lib/cl_template.py calculate/lib/cl_template.py +index 6c98b35..5580275 100644 +--- calculate/lib/cl_template.py ++++ calculate/lib/cl_template.py +@@ -487,16 +487,16 @@ class _terms(_error, _shareTermsFunction): + if flagFoundQ: + listQPar = [] + for par in listPar: +- if par.endswith("'"): +- listQPar.append(par.replace("'","")) ++ if par.endswith("'") and par.count("='"): ++ listQPar.append(par[:-1].replace("='","=")) + else: + listQPar.append(par) + listPar = listQPar + if flagFoundQQ: + listQQPar = [] + for par in listPar: +- if par.endswith('"'): +- listQQPar.append(par.replace('"','')) ++ if par.endswith('"') and par.count('="'): ++ listQQPar.append(par[:-1].replace('="','=')) + else: + listQQPar.append(par) + listPar = listQQPar +@@ -511,7 +511,7 @@ class fileHeader(_terms): + "comment", "append", "force", + "link", "mirror", "symbolic", "chmod", "chown", "name", + "path", "autoupdate","protected", "run","exec","merge", +- "module","env"] ++ "module","env","postmerge"] + + # Тип шаблона + fileType = "" +@@ -705,7 +705,7 @@ class dirHeader(_terms): + """ + # Допустимые параметры заголовка + allowParam = ["append", "chmod", "chown", "name", "path", "autoupdate", +- "module","env","merge"] ++ "module","env","merge","postmerge"] + + # Тип вставки шаблона + typeAppend = "" +@@ -2492,7 +2492,7 @@ class _shareTemplate: + pwdObj = pwd.getpwnam(userName) + uid = pwdObj.pw_uid + gid = pwdObj.pw_gid +- homeDir = pwdObj.pw_dir ++ homeDir = self.objVar.Get('ur_home_path') + except: + raise TemplatesError(_("User %s not found")%str(userName)) + if groupsInfo: +@@ -2795,9 +2795,7 @@ class templateFunction(_error, _warning, _shareTemplate, _shareTermsFunction): + fileName = pathJoin(self._baseDir,fileName) + replace = "" + if os.path.exists(fileName): +- FD = open(fileName) +- replace = FD.read().strip() +- FD.close() ++ replace = readFile(fileName).strip() + if replace and lenTerms >= 2 and terms[0] == "empty": + replace ="\n".join(filter(lambda x: not self.reEmptyLoad.search(x), + replace.split("\n"))) +@@ -3753,7 +3751,12 @@ class templateFunction(_error, _warning, _shareTemplate, _shareTermsFunction): + uid, gid = getModeFile(self.fileConfigIni, "owner") + if not self.uid in (uid,PORTAGEUID) or \ + not self.gid in (gid,PORTAGEGID): +- os.chown(self.fileConfigIni, self.uid, self.gid) ++ try: ++ os.chown(self.fileConfigIni, self.uid, self.gid) ++ except OSError as e: ++ self.setError(_("error") + " " +\ ++ "'chown %d:%d %s'"%(self.uid, self.gid, ++ self.fileConfigIni)) + return textTemplateTmp + + class ChangedFiles: +@@ -3806,6 +3809,9 @@ class Template(_file,_terms,_warning,xmlShare,templateFormat,_shareTemplate): + os.environ["CONFIG_PROTECT"].split(" ")) + protectPaths = map(lambda x: os.path.normpath(x), protectPaths) + ++ def hasError(self): ++ return self.getError() or self.bHasError ++ + def __init__(self, objVar, servDir=False, dirsFilter=[], filesFilter=[], + cltObj=True, cltFilter=True, printWarning=True, + printSUCCESS=lambda x:x,printWARNING=lambda x:x, +@@ -3820,8 +3826,14 @@ class Template(_file,_terms,_warning,xmlShare,templateFormat,_shareTemplate): + self.changedFiles = ChangedFiles() + self.printSUCCESS = printSUCCESS + self.printERROR = printERROR ++ self.postmergePkgs = [] ++ self.postmergeFile = "/var/lib/calculate/-postmerge" ++ self.bHasError = False + if printERROR: +- self.setError = self.printERROR ++ def newSetError(s): ++ self.printERROR(s) ++ self.bHasError = True ++ self.setError = newSetError + self.printWARNING = printWARNING + self.askConfirm = askConfirm + self.stop = 0 +@@ -3898,7 +3910,8 @@ re.M|re.S) + self.dictProcessedTemplates = {} + if cltObj is True: + # Объект templateClt +- self.cltObj = templateClt(self.objVar,printSUCCESS=self.printSUCCESS, ++ self.cltObj = templateClt(self.objVar,self.postmergePkgs, ++ printSUCCESS=self.printSUCCESS, + printERROR=self.printERROR, + printWARNING=self.printWARNING, + askConfirm=self.askConfirm) +@@ -4253,9 +4266,10 @@ gettext -d cl_template "$*" + """Check template variable cl_name in first directories and files""" + skipDirs = [] + skipTemplates = [] ++ debug = self.objVar.Get('cl_env_debug_set') == "on" + for dirsTemplate in dirsTemplates: + filesAndDirs = map(lambda x: os.path.join(dirsTemplate,x), +- os.listdir(dirsTemplate)) ++ listDirectory(dirsTemplate)) + for dirFile in filesAndDirs: + if os.path.isdir(dirFile): + flagDir = True +@@ -4274,8 +4288,9 @@ gettext -d cl_template "$*" + if textTemplate: + headerLine = self.getHeaderText(textTemplate) + if headerLine: +- if not "cl_name==" in headerLine and \ +- not "ac_" in headerLine: ++ if not debug and \ ++ not "cl_name==" in headerLine and \ ++ not "ac_" in headerLine: + if flagDir: + skipDirs.append(dirFile) + else: +@@ -4567,7 +4582,10 @@ gettext -d cl_template "$*" + os.unlink(fn) + except Exception as e: + self.printWARNING(_("Failed to remove %s")%fn) +- pkgContents.writeContents() ++ try: ++ pkgContents.writeContents() ++ except IOError as e: ++ self.printWARNING(_("Failed to modify %s contents")%pkg) + self.filesApply = map(lambda x:autoUpdateDict.get(x,x),self.filesApply) + if filter(lambda x:"._cfg" in x, self.filesApply): + self.printWARNING(_("Some config files need updating. " +@@ -4600,7 +4618,11 @@ gettext -d cl_template "$*" + self.objVar.Get('cl_autoupdate_set') == 'on'): + optDir["autoupdate"] = True + if flagDir or stat.S_ISDIR(os.lstat(scanDir)[stat.ST_MODE]): +- for fileOrDir in sorted(os.listdir(scanDir)): ++ if not os.access(scanDir,os.R_OK|os.X_OK): ++ self.printWARNING(_("Failed to read templates directory %s")% ++ scanDir) ++ return False ++ for fileOrDir in sorted(listDirectory(scanDir)): + absPath = os.path.join(scanDir,fileOrDir) + if skipTemplates and absPath in skipTemplates: + continue +@@ -4688,6 +4710,9 @@ gettext -d cl_template "$*" + def processingDirectory(self, path, prefix, opt): + """Обработка в случае директории если возвращаем None то пропуск дир.""" + # Файл шаблона директории ++ if not os.access(path,os.R_OK|os.X_OK): ++ self.printWARNING(_("Failed to read templates directory %s")%path) ++ return None + dirInfoFile = os.path.join(path, self.templDirNameFile) + newDir = pathJoin(self._baseDir, path.partition(prefix)[2]) + newDir = "/".join(map(lambda x:x.split("?")[0], newDir.split("/"))) +@@ -4710,6 +4735,44 @@ gettext -d cl_template "$*" + if path in self.dictTemplates.keys(): + self.numberProcessTempl += self.dictTemplates[path] + return None ++ ++ def _processMergePostmerge(self,params, templateDirFile): ++ """Обработка параметров merge= , postmerge=""" ++ if "merge" in params: ++ mergePkgs = params['merge'].split(',') ++ else: ++ mergePkgs = [] ++ if "postmerge" in params: ++ postmergePkgs = params['postmerge'].split(',') ++ else: ++ postmergePkgs = [] ++ ++ if mergePkgs or postmergePkgs: ++ for wrongPkg in (x for x in mergePkgs + postmergePkgs \ ++ if not self.functObj.checkCorrectPkgName(x)): ++ self.printWARNING( ++ _("Wrong package '%s' for 'merge' in the template")% ++ wrongPkg + ": " + templateDirFile) ++ if self.objVar.Get('cl_ebuild_phase') == 'postinst': ++ for pkg in postmergePkgs: ++ if not pkg in self.objVar.Get('cl_merge_pkg_pass'): ++ self.objVar.Get('cl_merge_pkg_pass').append(pkg) ++ if not pkg in self.postmergePkgs: ++ try: ++ with open(self.postmergeFile,"a") as f: ++ f.write("%s\n"%pkg) ++ self.postmergePkgs.append(pkg) ++ except: ++ self.printWARNING( ++ _("Failed to reconfigure %s package")%pkg) ++ else: ++ mergePkgs = mergePkgs + postmergePkgs ++ ++ for pkg in mergePkgs: ++ if not pkg in self.objVar.Get('cl_merge_pkg_new') and \ ++ not pkg in self.objVar.Get('cl_merge_pkg_pass') and \ ++ not pkg in self.objVar.Get('cl_merge_pkg'): ++ self.objVar.Get('cl_merge_pkg_new').append(pkg) + + def getApplyHeadDir(self, newDir, templateDirFile, optDir): + """Применяет шаблон к директории (права, владелец, и.т. д)""" +@@ -4810,19 +4873,7 @@ gettext -d cl_template "$*" + return ("", False, []) + + # add packeges for reconfigure +- if "merge" in objHead.params: +- mergePkgs = objHead.params['merge'].split(',') +- for wrongPkg in (x for x in mergePkgs \ +- if not self.functObj.checkCorrectPkgName(x)): +- self.printWARNING( +- _("Wrong package '%s' for 'merge' in the template")% +- wrongPkg + ": " + templateDirFile) +- for pkg in mergePkgs: +- if not pkg in self.objVar.Get('cl_merge_pkg_new') and \ +- not pkg in self.objVar.Get('cl_merge_pkg_pass') and \ +- not pkg in self.objVar.Get('cl_merge_pkg'): +- self.objVar.Get('cl_merge_pkg_new').append(pkg) +- ++ self._processMergePostmerge(objHead.params, templateDirFile) + # Пропускаем директорию + if objHead.typeAppend == "skip": + applyDir = path +@@ -5145,18 +5196,7 @@ gettext -d cl_template "$*" + return ([], False) + + # add packeges for reconfigure +- if "merge" in objHeadNew.params: +- mergePkgs = objHeadNew.params['merge'].split(',') +- for wrongPkg in (x for x in mergePkgs \ +- if not self.functObj.checkCorrectPkgName(x)): +- self.printWARNING( +- _("Wrong package '%s' for 'merge' in the template")% +- wrongPkg + ": " + nameFileTemplate) +- for pkg in mergePkgs: +- if not pkg in self.objVar.Get('cl_merge_pkg_new') and \ +- not pkg in self.objVar.Get('cl_merge_pkg_pass') and \ +- not pkg in self.objVar.Get('cl_merge_pkg'): +- self.objVar.Get('cl_merge_pkg_new').append(pkg) ++ self._processMergePostmerge(objHeadNew.params, nameFileTemplate) + + # Родительская директория + path = optFile["path"] +@@ -5294,6 +5334,10 @@ gettext -d cl_template "$*" + if objHeadNew.params.has_key("mirror"): + if objHeadNew.params.has_key("link"): + templateFile = objHeadNew.params['link'] ++ if templateFile and templateFile[0] == "~": ++ # Получаем директорию пользователя ++ templateFile = os.path.join(self.homeDir, ++ templateFile.partition("/")[2],"")[:-1] + templateFile = pathJoin(self._baseDir, templateFile) + if not os.path.exists(templateFile): + if os.path.exists(pathOldFile): +@@ -5312,6 +5356,10 @@ gettext -d cl_template "$*" + if objHeadNew.params.has_key("link") and\ + not objHeadNew.params.has_key("symbolic"): + templateFile = objHeadNew.params['link'] ++ if templateFile and templateFile[0] == "~": ++ # Получаем директорию пользователя ++ templateFile = os.path.join(self.homeDir, ++ templateFile.partition("/")[2],"")[:-1] + templateFile = pathJoin(self._baseDir, templateFile) + foundTemplateFile = os.path.exists(templateFile) + if foundTemplateFile: +@@ -5981,7 +6029,7 @@ class scanDirectoryClt: + if not prefix: + prefix = os.path.realpath(scanDir) + if flagDir or stat.S_ISDIR(os.lstat(scanDir)[stat.ST_MODE]): +- for fileOrDir in sorted(os.listdir(scanDir)): ++ for fileOrDir in sorted(listDirectory(scanDir)): + try: + absPath = os.path.join(scanDir,fileOrDir) + stInfo = os.lstat(absPath) +@@ -6012,9 +6060,10 @@ class scanDirectoryClt: + class templateClt(scanDirectoryClt, Template): + """Класс для обработки шаблонов c расширением .clt""" + +- def __init__(self, objVar,**kwargs): ++ def __init__(self, objVar, postmergePkgs, **kwargs): + self.checkNumberTemplate = True + Template.__init__(self, objVar, cltObj=False,**kwargs) ++ self.postmergePkgs = postmergePkgs + applyPackages = ["calculate-core"] + self.flagApplyTemplates = False + if self.objVar.Get("cl_name") in applyPackages: +@@ -6035,6 +6084,7 @@ class templateClt(scanDirectoryClt, Template): + # Пропуск шаблонов директорийscanningTemplates + if self.templDirNameFile == os.path.split(path)[1]: + return True ++ self.functObj.currentBelong = "" + # Проверка на переменные в названии файла + if not self.getNeedTemplate(path): + if self.getError(): +diff --git calculate/lib/utils/files.py calculate/lib/utils/files.py +index e9d19ad..fca4e6e 100644 +--- calculate/lib/utils/files.py ++++ calculate/lib/utils/files.py +@@ -44,13 +44,23 @@ def timeout(seconds): + signal.signal(signal.SIGALRM, original_handler) + + try: +- from magic import open as type_file, MAGIC_NONE as MAGIC_NONE +-except ImportError: ++ from magic import (open as type_file, MAGIC_NONE, MAGIC_CONTINUE, ++ MAGIC_MIME_TYPE, MAGIC_COMPRESS, ++ MAGIC_MIME_ENCODING, MAGIC_SYMLINK) ++except ImportError as e: + try: +- from magic import open as type_file, NONE as MAGIC_NONE ++ from magic import (open as type_file, NONE as MAGIC_NONE, ++ CONTINUE as MAGIC_CONTNUE, MIME_TYPE as MAGIC_MIME_TYPE, ++ COMPRESS as MAGIC_COMPRESS,MIME_ENCODING as MIME_ENCODING, ++ SYMLINK as MAGIC_SYMLINK) + except: + type_file = None +- MAGIC_NONE = None ++ MAGIC_NONE = 0 ++ MAGIC_SYMLINK = 0x002 ++ MAGIC_COMPRESS = 0x004 ++ MAGIC_CONTINUE = 0x020 ++ MAGIC_MIME_TYPE = 0x010 ++ MAGIC_MIME_ENCODING = 0x400 + + from calculate.lib.cl_lang import setLocalTranslate + setLocalTranslate('cl_lib3',sys.modules[__name__]) +@@ -273,22 +283,33 @@ class proxy_type_file: + def close(self): + pass + ++ def _get_cmd_by_flags(self,flags): ++ """ ++ Получить команду для выполнения по флагам ++ """ ++ paramdict = {MAGIC_CONTINUE:"-k", ++ MAGIC_SYMLINK:"-L", ++ MAGIC_MIME_TYPE:"--mime-type", ++ MAGIC_MIME_ENCODING:"--mime-encoding", ++ MAGIC_COMPRESS:"-z"} ++ appendParam = map(lambda x:paramdict[x], ++ filter(lambda x:flags & x, ++ sorted(paramdict.keys()))) ++ fileCmd = getProgPath('/usr/bin/file') ++ return [fileCmd,'-b']+appendParam ++ + def file(self,filename): + if path.exists(filename): +- if self.flags == 0x410: +- processFile = process("file","-bi",filename) +- if processFile.success(): +- return processFile.read().rstrip() +- else: +- processFile = process("file","-bz",filename) +- if processFile.success(): +- return processFile.read().rstrip() ++ processFile = \ ++ process(*(self._get_cmd_by_flags(self.flags)+[filename])) ++ if processFile.success(): ++ return processFile.read().rstrip() + return None + + class typeFile: + """Получение типа файла""" + +- def __init__(self, magic=0x410): ++ def __init__(self, magic=MAGIC_MIME_ENCODING|MAGIC_MIME_TYPE): + if type_file is None: + self.magicObject = proxy_type_file(MAGIC_NONE) + else: +@@ -318,12 +339,10 @@ class typeFile: + def isBinary(self, filename): + """является ли файл бинарным""" + mime = self.getMType(filename) +- # В случае ошибки +- if mime.count("`"): +- return mime +- elif mime.count("binary"): ++ if mime.startswith("text"): ++ return False ++ else: + return True +- return False + + class scanDirectory: + """Класс для cканирования директории""" +diff --git calculate/lib/utils/ip.py calculate/lib/utils/ip.py +index 5fd7c18..25d84b5 100644 +--- calculate/lib/utils/ip.py ++++ calculate/lib/utils/ip.py +@@ -126,10 +126,17 @@ def intIpToStrIp(addr): + return "{0}.{1}.{2}.{3}".format( + addr>>24,(addr>>16)&0xff,(addr>>8)&0xff,addr&0xff) + ++def numMaskToCidr(netmask): ++ """ ++ Convert integer mask to cidr ++ """ ++ neg_net = ctypes.c_uint32(~netmask).value ++ return 32 - int(math.log(neg_net,2))-1 if neg_net else 32 ++ + def maskToCidr(mask): + """Convert mask specified by str to net""" + mask = strIpToIntIp(mask) +- return 32-int(math.log(((~mask) & 0xffffffff)+1,2)) ++ return numMaskToCidr(mask) + + def cidrToMask(cidr): + """Convert net to mask specified by str""" +@@ -234,7 +241,7 @@ def getMask(iface): + finally: + sockfd.close() + netmask = socket.ntohl(struct.unpack('16sH2xI8x', res)[2]) +- return 32 - int(math.log(ctypes.c_uint32(~netmask).value + 1, 2)) ++ return numMaskToCidr(netmask) + + def getMac(iface): + """ +diff --git calculate/lib/variables/__init__.py calculate/lib/variables/__init__.py +index 5bd1cf6..1f5bf42 100644 +--- calculate/lib/variables/__init__.py ++++ calculate/lib/variables/__init__.py +@@ -41,4 +41,4 @@ class VariableClVer(ReadonlyVariable): + """ + Package version + """ +- value = "3.1.9" ++ value = "3.1.9.3" +diff --git calculate/lib/variables/env.py calculate/lib/variables/env.py +index 6d376e5..83ecdb4 100644 +--- calculate/lib/variables/env.py ++++ calculate/lib/variables/env.py +@@ -402,3 +402,10 @@ class VariableClTemplateCltSet(ReadonlyVariable): + """ + def get(self): + return "on" if "clt" in self.Get('cl_templates_locate') else "off" ++ ++class VariableClEnvDebugSet(ReadonlyVariable): ++ """ ++ Переменная для включения отладки ++ """ ++ type = "bool" ++ value = "off" +diff --git calculate/lib/variables/system.py calculate/lib/variables/system.py +index 1e43f15..70749aa 100644 +--- calculate/lib/variables/system.py ++++ calculate/lib/variables/system.py +@@ -75,6 +75,20 @@ class VariableOsRootDev(ReadonlyVariable): + return {'none':'/dev/ram0'}.get(root_dev,root_dev) + return "" + ++class VariableOsMapperRootDev(ReadonlyVariable): ++ """ ++ Название диска через devicemapper если возможно ++ """ ++ def get(self): ++ rootdev = self.Get('os_root_dev') ++ devLinks = getUdevDeviceInfo(name=rootdev).get("DEVLINKS","") ++ if devLinks: ++ mapperName = filter(lambda x:"/dev/mapper" in x, ++ devLinks.split()) ++ if mapperName: ++ return mapperName[0] ++ return rootdev ++ + class VariableOsRootType(ReadonlyVariable): + """ + Root type (ram, hdd, usb-hdd, livecd) diff --git a/sys-apps/calculate-utilities/Manifest b/sys-apps/calculate-utilities/Manifest index e963c0dd1..6acbcda61 100644 --- a/sys-apps/calculate-utilities/Manifest +++ b/sys-apps/calculate-utilities/Manifest @@ -30,6 +30,7 @@ EBUILD calculate-utilities-3.1.9-r14.ebuild 770 SHA256 5ceac88292b4f811fbaa8db96 EBUILD calculate-utilities-3.1.9-r15.ebuild 770 SHA256 98888502982efc40c7607a0c65dfe0dadf20420401e94a32603da9333b33ad23 SHA512 7ff883a35e4123cf54fb9e48f02282547faf712239e314522bfd78a27f7b579e272b9bfc636bc4eb7ccd60f6ae0869a7a089316fe0230f9af7e2e41ed1488f4a WHIRLPOOL 468b4c64d7fd72f49eb07d2e18c9e9129113f9505d64f98074acad9ea10346c3cf44c3edcf4416c40145233a925261a647678d6481822b0cfcd381a7f6288333 EBUILD calculate-utilities-3.1.9-r16.ebuild 770 SHA256 d6d6154a1869795f508e8d33c91e09c0309f548b54af686f136a48f4e675f9e5 SHA512 4bd3daa113238a25d84ed021e66fe42dbd7e748b07585bc51c9f5863575956b8c7720a21b62732b43d28175837214a276cfeedde70fb7f561a3a0622fed32c1b WHIRLPOOL 664f47f0e1a58a449ed6d2f90394637ed7101f4cc49e7aa7656c7eb899003a67feefdd6991a13b5501550ece44c29380dbe2c2a5cae4a5ad02388e5926e76742 EBUILD calculate-utilities-3.1.9-r17.ebuild 770 SHA256 c7c25c4b1383751e599e59e0f3e92cde96854842ce7d545ffa22d5d1f4f03282 SHA512 cb057ae9ddc1572c5d16311c8b88179fab24abf94da137750171481b221f5556e93e59a966536e83d3c21255c4d493f7519234726c9cfed35cfbae462688c1ec WHIRLPOOL 74eff0dea741e9764a6bdb754870f8b703092eff6bf91cc2350a769eb548a4de445046877e6353e42cff813be4bdfaab9ddc72e514faac47f13cc25d4a7d8be6 +EBUILD calculate-utilities-3.1.9-r18.ebuild 771 SHA256 3d7e7fc62632e4300e28affba30388a65e589c46dc73d16e66fb0f13a13fa006 SHA512 8042bfaa8a8a8dd061507a189e30310fcfeb012042d5d684af2f48add0be39be72cd6271c29b6024fe72b1245f118edacad385d3cf1effd62d674cd4ea06f489 WHIRLPOOL 90ad589a336703a9906d1b31a73eed7613de801b66edba096abb8f054359a15159e30cb11f33565f7d3f375781cb4e3649b69d969d9fe7c7de4e1b91d022714f EBUILD calculate-utilities-3.1.9-r2.ebuild 755 SHA256 d8ddfbab1db607f85edbc87db7010c0ab2c5653d52bec1c45448d0ee73be73a5 SHA512 9915e5edb2cf659f64ac1bb2f495c06b15e3e66f4df04ddef31d6da0cc275778d4ec574fb276ef7999677abd986da40862720f69b44625e699c673ae4dc3d717 WHIRLPOOL deb8fc8969e6c9e2898205762d99e3ce295d53c2b8829ffc3c9590452b0a16b0b003e0d2e19ae8c2d17b9b29c6f74b7c03b878a848f481d1bbe6d4b40ba924ba EBUILD calculate-utilities-3.1.9-r3.ebuild 758 SHA256 7bdb0132b728c1a0b8ea57f0ea585afdc82f9d80aff5a13909bc152321a7ec28 SHA512 228155e8264c47456a5b375ef160e64557a87aa7e32adcb6136ef0df78f6a5b93c83d1293bf682bb00c7caa39821560ebf7c0c07200c5b65cf385b26e9607e64 WHIRLPOOL a2b35dd15636e6528f7828c9ebc1b1084c8cc3ba5384e68aea826f0c3b0220cd4376b35220eec77b40194c2ba62be1bc652407b45efab5ee999167d6c9cc90c7 EBUILD calculate-utilities-3.1.9-r4.ebuild 761 SHA256 14ec84c6cad91bc692b12b8ba2f3f78698f76a1570faf6cbf84f644aac6baecf SHA512 a51fa4a937eb13eb6ad7048f68e86903fcdbf37531668def216a3f745c253e353b5f893e91982bc16c874bfe82146dea2165c24ef26a9a28164923a772b72f40 WHIRLPOOL 4b185030c44756d36afda759a4d5f83156b42c7b9378f4045ba5cb9cbd3e9a1f1cb337184d642be9f844962fbfe4aa1d40086c07226b8688b7ea1e1078301845 diff --git a/sys-apps/calculate-utilities/calculate-utilities-3.1.9-r18.ebuild b/sys-apps/calculate-utilities/calculate-utilities-3.1.9-r18.ebuild new file mode 100644 index 000000000..bbbc151ac --- /dev/null +++ b/sys-apps/calculate-utilities/calculate-utilities-3.1.9-r18.ebuild @@ -0,0 +1,26 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=4 + +DESCRIPTION="Calculate Utilities meta package" +HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2" +SRC_URI="" + +LICENSE="Apache-2.0" +SLOT="3" +KEYWORDS="amd64 x86" +IUSE="cl_consolegui cl_client cl_desktop cl_console" + +RDEPEND="${RDEPEND} + =sys-apps/calculate-install-3.1.9-r4 + =sys-apps/calculate-i18n-3.1.9 + =sys-apps/calculate-lib-3.1.9-r10 + =sys-apps/calculate-core-3.1.9-r4 + =sys-apps/calculate-update-3.1.9 + cl_client? ( =sys-apps/calculate-client-3.1.9-r2 ) + cl_desktop? ( =sys-apps/calculate-desktop-3.1.9-r4 ) + cl_consolegui? ( =sys-apps/calculate-console-gui-3.1.9-r1 ) + cl_console? ( =sys-apps/calculate-console-3.1.9-r1 ) +"