atratsevskiy
Mike khiretskiy 11 years ago
parent 5142b2d205
commit ac14f1815d

@ -19,6 +19,7 @@ AUX calculate-lib-3.1.9-r4.patch 6380 SHA256 52b89cdd45270c7784d21c30a6466eb2096
AUX calculate-lib-3.1.9-r5.patch 9701 SHA256 c938ff5701c594cfaabe59592b4c9da88fccc1cee393eca547afa2e5e083c01b SHA512 3bc08e98faf3e15a8688ae519536b3810a67c61fe64e36bd77b35ea534a08b74dd4b21fa7487553188a2a4b21249a2873793bc245ec53fc1c93b490a1c8bf94b WHIRLPOOL 223f80a5966271c6fd3c9f590b5b209ac7f2e9ca8775ac4f5c9206cdf7c0eb8402b0f0cc2a8209eb228ea0eecb5658b612a1e92d2e9714cfc3a821df66d7341c
AUX calculate-lib-3.1.9-r6.patch 9705 SHA256 565b7141eeb6ca7fd252f7c894841122448db083949bacdcbbe8afc29a98d3a7 SHA512 5aefd6716dd5cd26a9ca35a27e9ff93473b415653d40a6ebcd0c4c32484ddef5a6237f8ad54e1f68a54de797de202d6f71a482f4636b730dd66fd03df0908c48 WHIRLPOOL 194888e0fee07c163332c73e52b62c7c8f54ac02cb32eae5b4b6b8f45446482b5bb8e9e6d71ddc2ace3d4d9d6e8247026c9c2c282e86007c955e4b9a16392cb9
AUX calculate-lib-3.1.9-r7.patch 21086 SHA256 3fd406dc604d9991d895b59fa8d04c5d61654bff6166600c3e649b1748b0123c SHA512 cdb1ac84ac1d15d4b3b8d63669aca3757ff80efcfb6ee09d49f4bd47c31a5eb251c1859cbf944c6151029fa2ea5188ded90fbd3d3c13472e7441d88a4c7dbb92 WHIRLPOOL b57d61a13de7f6fd4c78951b65f3000d1c81168f946b29929f85fecdcfdc5cdbc2e95a181a5dca2d12faac07ccd9e7b834babbb519eec2b7749e2c37bd3ee9c1
AUX calculate-lib-3.1.9-r8.patch 21138 SHA256 ed7150a9b4ec1e63c9a955f2e78ace02214c712a1fe1ca8efbffa4f7cadf68a7 SHA512 6eb61d32bbc10abd9c6f277108f5b2798fc6833d9f70f686081fd0f4e798b771e536e3715b8e20fa9af831335cc19a6c6e736dda4a96ce5b1d04a2f85c1816c1 WHIRLPOOL 83ff4e645e56c77911d92ee0ceb3e868b38b387d5827e896156869afdd6955139063c21337531487a705d1ee22f50f2b705457b638b7a4d84c8e8217bc61a700
DIST calculate-lib-2.1.11.tar.bz2 61687 SHA256 62976c08d4fb4810389ace6f5a99abb5a962f6c8d9053ff943d0669480fb5599 SHA512 e3bc2168a55367cf19ad3a27921b53e5e845643238bf171209ab29752c91b5d4d338a2120774764ac1c79abd93f2deff8680f8faa1407940984ea9fd6a199e67 WHIRLPOOL 0ced92ea493dd8db02b0ae1514ebbb51ee76dc6f441b4a38c984c39da2121fb81dd1f2e840c4c5b71a117a12817a2a269d85676288202aa9801f69727e3338dc
DIST calculate-lib-2.2.31.tar.bz2 120044 SHA256 ba38052d8b2349a1c60adc589a74eb8a3ffcbf6f3c1124e4c1fb0da3aa777f12 SHA512 902871b9159f2bcf7a0cc767fb6df5b19902fce6cf9468d96f902c383a422738b65debe3094c92d1f82de2124936496f89631c6eb9670da00807b63156b101b7 WHIRLPOOL 5179ee691519f3a7faa3135d040ad64bd6d67c026ebf39bb17f7d641130a2b58641d1fe5da4f6cfbd45d4442d93508f0a5f641ef2cd8c43e1a322aab3d11f4b9
DIST calculate-lib-3.1.6.tar.bz2 121830 SHA256 4dc08cb3246b533466457905d4fe44f7ee75266b66e8450ac7ddcb3d210980ca SHA512 578fa1f731c7b04b061abb68de8ceeb5e7cadac6858a7957f3e57f7249f9692965419da05bf3c16963c397ddbbc10a24ea5c7feda043d067f0274a52d2c56dac WHIRLPOOL ceea0a4719a5c8a0ef645f51f07bb7f813ecdb8fe8ed99f574523cd2c242223eec92c6078a15192d40a366e8231b6ff72acf63954b7f48d0f34e5c006f2eca95
@ -44,6 +45,7 @@ EBUILD calculate-lib-3.1.9-r4.ebuild 824 SHA256 b1b73001e179931b6444e61520b003c6
EBUILD calculate-lib-3.1.9-r5.ebuild 824 SHA256 95b0ab30ab6bb4da2ebbe0b62528257eeacb3b77aa56dde3d6b3d7b90c666988 SHA512 96b18913a06eab0fa05cf5efb981d3552d28803b8dcf1487f9a41dc959ea88e7f2acc6035a26998f8c09603d504b7d8936003655bd178a13542135d8d6c98867 WHIRLPOOL 1930cb044369c5b191df8a6de376261b6e2499ae102989362c0958edb91e96ab716b5b727c69984df2e06b74c0ec447bbe7208ccad314266f9bb105750ab0169
EBUILD calculate-lib-3.1.9-r6.ebuild 824 SHA256 12909c72551140b63d7a530073997020d429364774c5f1c3c140803b3570434c SHA512 4ca9409ea34afdcc2b09325e1713d3c633d040aa74c1a3baccd8ec80a66eed5ebfcb3703011d6afdafb4399e53f77133f994db8ed5a125a44d41b5557c5138e8 WHIRLPOOL 3579d7c05b698a6f980628686dc8a3a414c0288b2f1e9281fa83228011c92d3ce7808e3e46bfe87e8dbe3de788d48691cb162342fb30597d232c7f41a8984e74
EBUILD calculate-lib-3.1.9-r7.ebuild 824 SHA256 1967eac2bf04c91425eef3213e59b60a6c1284baaeb2c3caed85bdc5872a8991 SHA512 83e5dcfdad930a2676c493e57144ccf51a0aa004d381c510dfcb815475b22b2a0d2ae9ff416f75bb4548eb588e58d915f261bbff020b19cb3b3c84a7d2e8a9f3 WHIRLPOOL d4a26d71c709eb2276955a40da3141b069444e5a92a3bd8f1e716f0f09be379d3f3de13b3867b285cf46aad88a010eb6a17832bd1cf09b3b6b05680f3010a918
EBUILD calculate-lib-3.1.9-r8.ebuild 824 SHA256 e66604f0d79b409144e46e3fa46b1645d2cc0a39c934ef0b72cd807fe0e92bdd SHA512 e6169929300b34b98a1302c6235ce5755b873378fdd2e0d7ed95fc9d17e0456dd130b4cbb4d8fd02a8eaa475ca992c7a60ef5db81dbd6038a3aeb748d7bd3842 WHIRLPOOL 56dd36d5c2aeec5ad4413ff08592f8fdc7e709750e09de048626f41fdab40ba74cd894b86d573d5c048c4f844b564197049cd88e838841340d7535a62ccfaff0
EBUILD calculate-lib-3.1.9.ebuild 690 SHA256 c89c29f5de3f70146e98f15035366506933f03e8a5066b1ad55aeccbebdeae2c SHA512 a7277c2e5fa64a5e5840be7fc8d3df9a31f41926386c5fe6a9bed31eeed6321af5881c218d9ce7eeb12aee518edb682b438e10397dcb815cc63645100430e43e WHIRLPOOL 8f19e4d46381e26fec81e20fa35599f4658b3891d6372c921a8b1354ad3b1821ea9c78f71caebf54610e0b5aacfb6e6ded018e155e1979322406a0ac1e823d09
EBUILD calculate-lib-3.1.9999.ebuild 708 SHA256 a1d64b7f014831bf6b0a38928d53cb55758b7a12e5f3e98fffd28025ffacbce1 SHA512 3873859a791941d421e2338b437521955da383ce986408f1a951305e2dd75a1a4f771c9ec2caa096c5c8ea6a1776d6d0ed99e025ffa786ba029cafdbadfa439b WHIRLPOOL 5ac1a10b53f810ab527a0ebe52bc87e8397e61375cf6e0acbed89d8f6b8385e72bf234e0fdce479c3a3f1652bb6e520710ce9356750a97d644c0db0a33f6facb
MISC ChangeLog 29851 SHA256 16ca15c794bce78eefc487ed372c3d4960078fbd4c5fe4524211688d0146ef97 SHA512 be6bdf290f391529dce0deb67bf9d367e42e407601dd581f7c08d082399b5860cff2a76d4d64dd876154d51e84f34499db06c715145ac64f78d168aae7e78dbf WHIRLPOOL 2561ccd1eefe3423d97c67aff5c0fe6c8ca624e527fb885b042c8e812194bb1635d7e7d7d86c534562eb780c6b9144d92e24893f2d0696cf8a34a6a912a45788

@ -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-r8.patch"
}

@ -0,0 +1,461 @@
diff --git calculate/lib/cl_template.py calculate/lib/cl_template.py
index 6c98b35..1def9c5 100644
--- calculate/lib/cl_template.py
+++ calculate/lib/cl_template.py
@@ -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)

@ -28,6 +28,7 @@ EBUILD calculate-utilities-3.1.9-r11.ebuild 770 SHA256 5c9954c9dc5f9a40d7a7c8c93
EBUILD calculate-utilities-3.1.9-r12.ebuild 770 SHA256 536e591b62ffadab9997d244c79cb275155c82f7ab706d6128a16d33b9b5acb6 SHA512 ab38107db46546ef9ca9cb3c1e04ce021f4655b9fcbbe91c72e624465e4a3ab514c509c5cea0ea8b1d8ecdbf25fe35e35e008b5c80a91a3c1756143d0464b935 WHIRLPOOL ae6c69b56565a05e1b480707b83092d542e2017eae9afdb70b1cd9093df4bd28f0939672843cc5edb9a15f1c3e1d68f55da8ed7792d7343acfbd6b7b51557347
EBUILD calculate-utilities-3.1.9-r14.ebuild 770 SHA256 5ceac88292b4f811fbaa8db968c8e532f6fb7fd3fd828aea03ca7fd1fc0bb363 SHA512 a3eb6eec46b0fbca4d5dfcbd36cc8d674a0f5929f68516d93cc9053b4727e858e15d7f6cae30e4e4a14628e940120f746013a5b7d28cb6dd0f14cf4fca82fd2d WHIRLPOOL 94e7ed66e770224f2691694bcf2e34801e89378984e4cacdc73363d37810481a4d597da0c7e46c8b0a1a28e56d757e9b3720265663526296cf48961404b55efe
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-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

@ -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-r8
=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 )
"
Loading…
Cancel
Save