Исправление calculate-lib для установки fglrx

atratsevskiy
Mike khiretskiy 10 years ago
parent a3273ba38d
commit d058cb74fe

@ -17,6 +17,7 @@ AUX calculate-lib-3.1.9-r10.patch 22013 SHA256 20bb1e8692da01f66443472e385a12ca3
AUX calculate-lib-3.1.9-r11.patch 22015 SHA256 691db8e689e6321539df25f1bd8dee6db0d37057edb84fa98b59bc48e5e37c46 SHA512 a3584c6cda448f9455d83521e1d9b27aeafa0caa7a92f39406606c8c8ae0756656da6b6a81fe24082d86cca3e893841325b4dd280f407bee571a42760f071052 WHIRLPOOL bb25c68134a553b33aef2a7120c10719e3ab0e8d5683699733114ffa6d3fe7ef1aa137cfc379ee8a1f56090828f32a53729777613e5c87b872871d381e9dc98a
AUX calculate-lib-3.1.9-r12.patch 22468 SHA256 a2d33c715703061ba81c3e474a889cd1c87455e8a22f2a9cf5b977afd282cb65 SHA512 307f0759697daabbe30f7f4c91176c5b0d50cf443480688fe9d02eaf2ee7f7069fe9bd0e741da9a4de4448c912b8929255e785350bc9bc8d126d20e566e2ec79 WHIRLPOOL 7953191099a3a7b7f9bf91ebbc2929e1412782b008f1cb260e431ef18f59438b8f04c7cea717fa9b792bc864607d4547f9a28b9c514026a597133f61ea144fda
AUX calculate-lib-3.1.9-r13.patch 22468 SHA256 207509aa254b79008eeae9bcbff95f47d01588348e234e5be3f7d1e22c3b842a SHA512 99caad599a2607ee0d35d5b8d3f9208d956134ffbb95fc5c2179b30d698b470fb54def47aa098bbef436cb29e6036e4ca13a283dca645afa0380b5f17d063d82 WHIRLPOOL f3871fb3dbcc18efe77f0b524d1366a908700cd267a7d451f2b5cfd8c51859907326e308611d6d23f72b8892ab593088e5498d28edf8f8a9bce1b3042c9d9ab6
AUX calculate-lib-3.1.9-r14.patch 23190 SHA256 28deb3f5b6f818a7be6541b29d77291a0950c0b98c2a4b4de3a37e74ba2042a0 SHA512 4cbdc6b105ff598baf8ec9676cb8d436b3ef67f6c8649984bbf8434611c5503f25ac117e82001897fac7ff5bcc3bb15f3d7bb3167e7c42fa48206f4c84428d97 WHIRLPOOL 819af8d9d82534885e5af621593c8f315e9d38b1fd26c92bc45f8550a2800bfce2c30df3c9accda7e03f77ef1827907b7530d0589a17ff7109f6c029869464e0
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
@ -48,6 +49,7 @@ EBUILD calculate-lib-3.1.9-r10.ebuild 825 SHA256 d4083418ef433b2639b69fd1d18c392
EBUILD calculate-lib-3.1.9-r11.ebuild 825 SHA256 f66934d975161be69d645bf8a0a96e24b8baa1b4f8e8470c75dd769635346e0a SHA512 82dafbdcfe66a152b42e8bf89fbc4b427323f6cb9c4d7ebede9f07f0bd2e3cfb7192af8a467dc8ff3d356478f9c0b3c008e63f56f4917e6458288402fc32bb64 WHIRLPOOL 82cd049c17d2332286a200d55ad5b188d402057aa79bfeb3bdb23aad49c628198603ca72e892b3fbd0a3ff85dbbc0a4aad75415e9c014531d86a94c7b6262b99
EBUILD calculate-lib-3.1.9-r12.ebuild 825 SHA256 6eb85339b0fb4d675197d6646e2aa9519ed2edb3bfbcd656485a6a89af108084 SHA512 787845e84dcc6cab0f357a449766cbc03a869609d86ea532974fa7ed0360b468559a0da4bf06cb563f8b07a0bdf0461ce840245b66ce3b9abf13f6b036f9ff8b WHIRLPOOL 969483f49044245693f97b463073c8143821191c2051233515b460afda2b33102d638b44844768f29842ff4f61d28ef045540b5769df8ebe2648cdf3e280d501
EBUILD calculate-lib-3.1.9-r13.ebuild 825 SHA256 0f40156758c17f4c170a871b0f470c0209c0916259b08c059f62c452ce2d1889 SHA512 70fe4ec6695918779d884c4f2b5312b12cfd59f8b25c16ba53c342df0b629799fc50b8f541e2abebf51f2308c12f95dc740c5037c11317adbc2ccadcd173bb1a WHIRLPOOL 9f0cfc5bbea546fecf885f3d76ae26c006c642b37dca84a9b28f652a99ee21cbfee855f1fff3861528beeb53fd00c4b05ac7ba9be60454a75ddeea47be0b2975
EBUILD calculate-lib-3.1.9-r14.ebuild 825 SHA256 f3bb03a6dbeba8d2f2821583526e374bf7b828e012df78ba7fd0ea3528a9b62a SHA512 5daa33c8bf7fa75c8886433083c1a623d855791ee8f85a8099fd6c0788886f5fd893183a7dd5ace2f86033de3dfe260bf6d218932fc876b725a29ec10974e9d2 WHIRLPOOL fdc2ccf39697c2f2ad622488df17f716199df777577d07768a25688e980bbf79c137a9ba712bb42e53a8c03e1a21798b01a08112ea8e4fa4b662a924077ca786
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

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

@ -0,0 +1,507 @@
diff --git calculate/lib/cl_template.py calculate/lib/cl_template.py
index 6c98b35..35100db 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("'")>1:
+ 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('"')>1:
+ 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
@@ -5076,7 +5127,7 @@ gettext -d cl_template "$*"
# Создание файла
FD = open(nameFileConfig, "w")
FD.close()
- os.chown(nameFileConfig, uid, gid)
+ os.lchown(nameFileConfig, uid, gid)
except Exception as e:
if hasattr(e,'errno') and e.errno == 13 and \
"var/calculate/remote" in nameFileConfig:
@@ -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/common.py calculate/lib/utils/common.py
index 9f13c66..75dcdce 100644
--- calculate/lib/utils/common.py
+++ calculate/lib/utils/common.py
@@ -178,8 +178,9 @@ def getDistfilesVideo(prefix="/"):
return list(set(
map(lambda x:'fglrx' if "amd" in x or "ati" in x else "nvidia",
filter(lambda x:"ati" in x or "amd" in x or
- x.startswith('NVIDIA-Linux'),
- listDirectory(distFiles)))))
+ x.startswith('nvidia-linux'),
+ map(lambda x:x.lower(),
+ listDirectory(distFiles))))))
def getAvailableVideo(prefix="/"):
"""Get available video drivers (installed and maybe installed)"""
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..8792ca3 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.4"
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)

@ -47,6 +47,7 @@ EBUILD calculate-utilities-3.1.9-r27.ebuild 772 SHA256 257ddc6c781d2389d8ea1b293
EBUILD calculate-utilities-3.1.9-r28.ebuild 772 SHA256 9f03600e56b217e8294de7a8f8787afc72cecde02161ddc2c723f3e3c820e3a7 SHA512 2a1bebfdd62c083d3b84307cdc90e950f9cedc06cea30ec22c30b90cece76caf4bfc170962055e1e0df35f8df54debd664fd7ba0b131842025fee169d67a3293 WHIRLPOOL 3a64ca2e74df6b9e03aa09f531a48a01a9d6aef706719cab33262fa45e505bb0725153e777c93f893407b88febf8db6d9c4c85e1877d56007e8f8ebe493e7687
EBUILD calculate-utilities-3.1.9-r29.ebuild 772 SHA256 e2e20539a465cccc75f6be6f14ac8409b43319c87f8cd10121a29ac2ef3830ca SHA512 42bd49cde7235a1cda33f6b8d7f041a36a286cc9b3755f2106b15154ed1b481756c6d55941cd2d8176c66ebcabe9d22fcc856d78b03db965a619fb57b285d9ad WHIRLPOOL 99ec7c8c2f14be6e79dc459a35d79a6c4e14a84c7745e83c71017e94bd58c8f91d53abd5448354bdff7855b931fb1520e81a64757107dd5db276683fdc309005
EBUILD calculate-utilities-3.1.9-r3.ebuild 758 SHA256 7bdb0132b728c1a0b8ea57f0ea585afdc82f9d80aff5a13909bc152321a7ec28 SHA512 228155e8264c47456a5b375ef160e64557a87aa7e32adcb6136ef0df78f6a5b93c83d1293bf682bb00c7caa39821560ebf7c0c07200c5b65cf385b26e9607e64 WHIRLPOOL a2b35dd15636e6528f7828c9ebc1b1084c8cc3ba5384e68aea826f0c3b0220cd4376b35220eec77b40194c2ba62be1bc652407b45efab5ee999167d6c9cc90c7
EBUILD calculate-utilities-3.1.9-r30.ebuild 772 SHA256 74f0dbee3c66b1bc7c5ec1eeab7699bae12fa11ceff6d4b291e807e9a6448a6c SHA512 f3fe56540bd34441c584e4de6b1d8d454216f52a17b9d734a2449b76a3adfb59cd76ebc965bc4b6bf56d9e3a02506bcf65c7b7a00aeb32230d842cd3a9488651 WHIRLPOOL 1f14d760abd5adbba43857deda0db4e8b2ac589c71d555753b9f4f1d74c323624deed95d9b174347d1d659559fad12b0e3ccb6ae202240a383782efd583217ed
EBUILD calculate-utilities-3.1.9-r4.ebuild 761 SHA256 14ec84c6cad91bc692b12b8ba2f3f78698f76a1570faf6cbf84f644aac6baecf SHA512 a51fa4a937eb13eb6ad7048f68e86903fcdbf37531668def216a3f745c253e353b5f893e91982bc16c874bfe82146dea2165c24ef26a9a28164923a772b72f40 WHIRLPOOL 4b185030c44756d36afda759a4d5f83156b42c7b9378f4045ba5cb9cbd3e9a1f1cb337184d642be9f844962fbfe4aa1d40086c07226b8688b7ea1e1078301845
EBUILD calculate-utilities-3.1.9-r5.ebuild 761 SHA256 a6ddc522be5784c19c22e360f17c5c1149f92c7c23eabe724a00d0b20be9424d SHA512 2b8d02937095edfb747926d11140a2cc44ee266668b9b830dba86efe149e03b4cc0eeea662e2c2c299f58039de70c8dec089422e9636470a6e7039f5dd7752ab WHIRLPOOL 391954432a980cbaddf39ba75a65483067941f62375e2d955820525c8f0513e3b8c766dd377b28f4cb3d52aaab4fbb447ee2093f6bd60b39cac27973887d6b3e
EBUILD calculate-utilities-3.1.9-r6.ebuild 761 SHA256 6a80651696c1ffd3db424485b5bc840eca5cb508b52696cb3938c2bb25601b0d SHA512 9b61841e4a6c5b56bf54c47bdc0e403cb7156ac8ff6b4d0af5988eb13005cebe22beffd5f747d7f61eb87e372b7d5b35d9252dc4892dbc9ed5e4230888b7f726 WHIRLPOOL 1063ebcae15a79d20073dabf8b141b873e2e86f865fd9a50dd8d0e859e4ba7ff99de76e7d5ba3de668eb4b499ea32af59ee6502e6f2d832476062d14b8e49e61

@ -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-r12
=sys-apps/calculate-i18n-3.1.9
=sys-apps/calculate-lib-3.1.9-r14
=sys-apps/calculate-core-3.1.9-r4
=sys-apps/calculate-update-3.1.9
cl_client? ( =sys-apps/calculate-client-3.1.9-r3 )
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