|
|
|
@ -27,6 +27,8 @@ import string
|
|
|
|
|
import time
|
|
|
|
|
import glob
|
|
|
|
|
import fcntl
|
|
|
|
|
# < <= == != >= >
|
|
|
|
|
from operator import lt, le, eq, ne, ge, gt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Переопределение exit
|
|
|
|
@ -57,40 +59,111 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
# регулярное выражение для поиска функции в шаблоне
|
|
|
|
|
_reFunction = re.compile(_shareTermsFunction._reFunctionText)
|
|
|
|
|
# регулярное выражение для не версии
|
|
|
|
|
_re_not_Version = re.compile("[^0-9\.]|^$")
|
|
|
|
|
_re_not_Version = re.compile("[^0-9\.]")
|
|
|
|
|
# регулярное выражение не номер
|
|
|
|
|
_re_not_Number = re.compile("[^0-9]")
|
|
|
|
|
_suffixDict = {"pre": -2, "p": 0, "alpha": -4, "beta": -3, "rc": -1}
|
|
|
|
|
_lenSuffixDict = len(_suffixDict)
|
|
|
|
|
# Регулярное выражение для названия переменной
|
|
|
|
|
_reDenyName = re.compile("[^a-zA-Z0-9\_\-]")
|
|
|
|
|
# Регулярное выражение для сравниваемого значения
|
|
|
|
|
_reDenyValue = re.compile("[^0-9a-zA-Z_/\.-]")
|
|
|
|
|
# латинские буквы в нижнем регистре
|
|
|
|
|
_letters = list(string.ascii_lowercase)
|
|
|
|
|
|
|
|
|
|
def _splitVersion(self, strVersion):
|
|
|
|
|
"""Split version"""
|
|
|
|
|
strWorkVersion, spl, rVersion = strVersion.rpartition("-")
|
|
|
|
|
if rVersion == strVersion:
|
|
|
|
|
strWorkVersion = rVersion
|
|
|
|
|
rVersion = ""
|
|
|
|
|
numberVersion, spl, suffix = strWorkVersion.partition("_")
|
|
|
|
|
suffSpl = ""
|
|
|
|
|
suffixVersion = ""
|
|
|
|
|
if suffix:
|
|
|
|
|
suffSplList = filter(lambda x: suffix.startswith(x),
|
|
|
|
|
self._suffixDict.keys())
|
|
|
|
|
if suffSplList:
|
|
|
|
|
suffSpl = suffSplList[0]
|
|
|
|
|
lenSuffSpl = len(suffSpl)
|
|
|
|
|
suffixVersion = suffix[lenSuffSpl:]
|
|
|
|
|
letters = ""
|
|
|
|
|
if numberVersion and numberVersion[-1:] in self._letters:
|
|
|
|
|
letters = numberVersion[-1:]
|
|
|
|
|
numberVersion = numberVersion[:-1]
|
|
|
|
|
return numberVersion, letters, suffSpl, suffixVersion, rVersion
|
|
|
|
|
|
|
|
|
|
def _notVersion(self, strVersion):
|
|
|
|
|
"""strVersion is not version - True"""
|
|
|
|
|
numberVersion, letters, suffSpl, suffixVersion, rVersion =\
|
|
|
|
|
self._splitVersion(strVersion)
|
|
|
|
|
if not numberVersion.strip():
|
|
|
|
|
return True
|
|
|
|
|
if self._re_not_Version.search(numberVersion):
|
|
|
|
|
return True
|
|
|
|
|
if letters and not letters in self._letters:
|
|
|
|
|
return True
|
|
|
|
|
if suffixVersion and self._re_not_Number.search(suffixVersion):
|
|
|
|
|
return True
|
|
|
|
|
if rVersion:
|
|
|
|
|
if rVersion[0] != "r" or len(rVersion) == 1:
|
|
|
|
|
return True
|
|
|
|
|
if self._re_not_Number.search(rVersion[1:]):
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def _convertVers(self, verA, verB):
|
|
|
|
|
"""Конвертирование номеров версий для корректного сравнения
|
|
|
|
|
"""
|
|
|
|
|
elemA = verA.split(".")
|
|
|
|
|
elemB = verB.split(".")
|
|
|
|
|
if len(elemA) > len(elemB):
|
|
|
|
|
maxElemB = len(elemB)-1
|
|
|
|
|
for i in range(len(elemA)):
|
|
|
|
|
if i > maxElemB:
|
|
|
|
|
elemB.append("0")
|
|
|
|
|
else:
|
|
|
|
|
maxElemA = len(elemA)-1
|
|
|
|
|
def fillZero(elemA, elemB):
|
|
|
|
|
#elemA, elemB = elemA[], elemB[]
|
|
|
|
|
if len(elemA) > len(elemB):
|
|
|
|
|
maxElemB = len(elemB)-1
|
|
|
|
|
for i in range(len(elemA)):
|
|
|
|
|
if i > maxElemB:
|
|
|
|
|
elemB.append("0")
|
|
|
|
|
else:
|
|
|
|
|
maxElemA = len(elemA)-1
|
|
|
|
|
for i in range(len(elemB)):
|
|
|
|
|
if i > maxElemA:
|
|
|
|
|
elemA.append("0")
|
|
|
|
|
for i in range(len(elemB)):
|
|
|
|
|
if i > maxElemA:
|
|
|
|
|
elemA.append("0")
|
|
|
|
|
for i in range(len(elemB)):
|
|
|
|
|
lenA = len(elemA[i])
|
|
|
|
|
lenB = len(elemB[i])
|
|
|
|
|
if lenA == lenB:
|
|
|
|
|
pass
|
|
|
|
|
elif lenA > lenB:
|
|
|
|
|
res = lenA - lenB
|
|
|
|
|
for z in range(res):
|
|
|
|
|
elemB[i] = "0" + elemB[i]
|
|
|
|
|
elif lenB > lenA:
|
|
|
|
|
res = lenB - lenA
|
|
|
|
|
for z in range(res):
|
|
|
|
|
elemA[i] = "0" + elemA[i]
|
|
|
|
|
lenA = len(elemA[i])
|
|
|
|
|
lenB = len(elemB[i])
|
|
|
|
|
if lenA == lenB:
|
|
|
|
|
pass
|
|
|
|
|
elif lenA > lenB:
|
|
|
|
|
res = lenA - lenB
|
|
|
|
|
for z in range(res):
|
|
|
|
|
elemB[i] = "0" + elemB[i]
|
|
|
|
|
elif lenB > lenA:
|
|
|
|
|
res = lenB - lenA
|
|
|
|
|
for z in range(res):
|
|
|
|
|
elemA[i] = "0" + elemA[i]
|
|
|
|
|
|
|
|
|
|
#Version, letters, suffix, suffixVersion, rVersion
|
|
|
|
|
vA, lA, sA, svA, rvA = self._splitVersion(verA)
|
|
|
|
|
vB, lB, sB, svB, rvB = self._splitVersion(verB)
|
|
|
|
|
elemA = vA.split(".")
|
|
|
|
|
elemB = vB.split(".")
|
|
|
|
|
fillZero(elemA, elemB)
|
|
|
|
|
if lA or lB:
|
|
|
|
|
lA, lB = map(lambda x: x if x else '0', (lA, lB))
|
|
|
|
|
elemA.append(lA)
|
|
|
|
|
elemB.append(lB)
|
|
|
|
|
if sA or sB:
|
|
|
|
|
svA, svB = map(lambda x: [x] if x else ['0'], (svA, svB))
|
|
|
|
|
fillZero(svA, svB)
|
|
|
|
|
sA, sB = map(lambda x: x if x else 'p', (sA, sB))
|
|
|
|
|
elemA.append(str(self._lenSuffixDict + self._suffixDict[sA]))
|
|
|
|
|
elemA += svA
|
|
|
|
|
elemB.append(str(self._lenSuffixDict + self._suffixDict[sB]))
|
|
|
|
|
elemB += svB
|
|
|
|
|
if rvA or rvB:
|
|
|
|
|
rvA, rvB = map(lambda x: [x[1:]], (rvA, rvB))
|
|
|
|
|
fillZero(rvA, rvB)
|
|
|
|
|
elemA += rvA
|
|
|
|
|
elemB += rvB
|
|
|
|
|
return (".".join(elemA), ".".join(elemB))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -104,7 +177,8 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
"""
|
|
|
|
|
rpl = lambda x: x.replace("@@"," ")
|
|
|
|
|
trm = {"&&":"@@and@@","||":"@@or@@"}
|
|
|
|
|
rule = ["==", "!=", ">=", "<=", ">", "<"]
|
|
|
|
|
dictRuleFunc = {"==":eq, "!=":ne, ">=":ge, "<=":le, ">":gt, "<":lt}
|
|
|
|
|
rule = dictRuleFunc.keys()
|
|
|
|
|
listEqual = []
|
|
|
|
|
for k in trm.keys():
|
|
|
|
|
if k in term:
|
|
|
|
@ -174,10 +248,10 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
flagIntTypeVar = False
|
|
|
|
|
else:
|
|
|
|
|
if valVars == "" and\
|
|
|
|
|
not self._re_not_Version.search(vals[1]):
|
|
|
|
|
not self._notVersion(vals[1]):
|
|
|
|
|
valVars = "0"
|
|
|
|
|
elif vals[1] == "" and\
|
|
|
|
|
not self._re_not_Version.search(valVars):
|
|
|
|
|
not self._notVersion(valVars):
|
|
|
|
|
vals[1] = "0"
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
@ -193,15 +267,15 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
if flagFunction and flagNotEmptyVals and\
|
|
|
|
|
searchFunct.group(1) == "ini":
|
|
|
|
|
# Проверка значения на версию
|
|
|
|
|
if not self._re_not_Version.search(valVars) and\
|
|
|
|
|
not self._re_not_Version.search(vals[1]):
|
|
|
|
|
if not self._notVersion(valVars) and\
|
|
|
|
|
not self._notVersion(vals[1]):
|
|
|
|
|
verFile, verVar = self._convertVers(vals[1],valVars)
|
|
|
|
|
exec(\
|
|
|
|
|
"res=("+"'"+verVar+"'"+sepF+"'"+verFile+"'"+")")
|
|
|
|
|
res = dictRuleFunc[sepF](verVar,verFile)
|
|
|
|
|
if res:
|
|
|
|
|
listEqual.append(True)
|
|
|
|
|
else:
|
|
|
|
|
listEqual.append(False)
|
|
|
|
|
break
|
|
|
|
|
flagNotIniFunct = False
|
|
|
|
|
# Cравниваем номера версий
|
|
|
|
|
if flagNotIniFunct:
|
|
|
|
@ -211,25 +285,25 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
(flagFunction and searchFunct.group(1)=="load" and\
|
|
|
|
|
re.search("\(\s*ver\s*,",vals[0]))):
|
|
|
|
|
# Проверка значения на версию
|
|
|
|
|
if self._re_not_Version.search(vals[1]):
|
|
|
|
|
if self._notVersion(vals[1]):
|
|
|
|
|
self.setError("'%s'"%rpl(term)+" "+\
|
|
|
|
|
_("incorrect"))
|
|
|
|
|
self.setError(_("Value is not version"))
|
|
|
|
|
return False
|
|
|
|
|
# Проверка значения функции на версию
|
|
|
|
|
if self._re_not_Version.search(valVars):
|
|
|
|
|
if self._notVersion(valVars):
|
|
|
|
|
self.setError("'%s'"%rpl(term)+" "+\
|
|
|
|
|
_("incorrect"))
|
|
|
|
|
self.setError(\
|
|
|
|
|
_("Value function is not version"))
|
|
|
|
|
return False
|
|
|
|
|
verFile, verVar = self._convertVers(vals[1],valVars)
|
|
|
|
|
exec(\
|
|
|
|
|
"res=("+"'"+verVar+"'"+sepF+"'"+verFile+"'"+")")
|
|
|
|
|
res = dictRuleFunc[sepF](verVar,verFile)
|
|
|
|
|
if res:
|
|
|
|
|
listEqual.append(True)
|
|
|
|
|
else:
|
|
|
|
|
listEqual.append(False)
|
|
|
|
|
break
|
|
|
|
|
flagNotIniFunct = False
|
|
|
|
|
else:
|
|
|
|
|
if flagIntTypeVar is None:
|
|
|
|
@ -249,26 +323,28 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
self.setError(textError)
|
|
|
|
|
return False
|
|
|
|
|
valVar = valVars
|
|
|
|
|
exec("res=(%d%s%d)"%(valVar,sepF,valFile))
|
|
|
|
|
res = dictRuleFunc[sepF](valVar, valFile)
|
|
|
|
|
if res:
|
|
|
|
|
listEqual.append(True)
|
|
|
|
|
else:
|
|
|
|
|
listEqual.append(False)
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
if sepF == "!=" or sepF == "==":
|
|
|
|
|
if not vals[1].strip():
|
|
|
|
|
vals[1] = ""
|
|
|
|
|
valFile = vals[1]
|
|
|
|
|
valVar = valVars
|
|
|
|
|
exec("res=("+'"""'+valVar+'"""'+sepF+"'"+\
|
|
|
|
|
valFile + "'"+")")
|
|
|
|
|
res = dictRuleFunc[sepF](valVar, valFile)
|
|
|
|
|
if res:
|
|
|
|
|
listEqual.append(True)
|
|
|
|
|
else:
|
|
|
|
|
listEqual.append(False)
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
if not flagNotEmptyVals:
|
|
|
|
|
listEqual.append(False)
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
self.setError("'%s'"%rpl(term) + " "\
|
|
|
|
|
+ _("incorrect"))
|
|
|
|
@ -278,6 +354,7 @@ class _terms(_error, _shareTermsFunction):
|
|
|
|
|
if t == "and":
|
|
|
|
|
if listEqual == [] or False in listEqual:
|
|
|
|
|
listEqual = [False]
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
listEqual = [True]
|
|
|
|
|
else:
|
|
|
|
@ -2263,7 +2340,9 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction):
|
|
|
|
|
stackGlobalVars = []
|
|
|
|
|
|
|
|
|
|
# регулярное выражение для поиска версии
|
|
|
|
|
reFindVer = re.compile("(?<=\-)\d+\.?\d*\.?\d*")
|
|
|
|
|
reFindVer = re.compile("(?<=-)(?:\d+)(?:(?:\.\d+)*)"
|
|
|
|
|
"(?:[a-z]?)(?:(?:_(?:pre|p|beta|alpha|rc)\d*)*)"
|
|
|
|
|
"(?:-r\d+)?$")
|
|
|
|
|
|
|
|
|
|
# Имя обрабатываемого шаблона
|
|
|
|
|
nameTemplate = ""
|
|
|
|
@ -2533,7 +2612,7 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction):
|
|
|
|
|
tail = absNameFile.split(self.basePkgDir)
|
|
|
|
|
if len(tail)==2:
|
|
|
|
|
tail = tail[1].split('/')
|
|
|
|
|
if len(tail)==3 and tail[1]!='virtual':
|
|
|
|
|
if len(tail)==3 and tail[1]!='virtual':
|
|
|
|
|
pkgs.append(tail[2])
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|