From 4e5552e62d80d46257d21dd332514c5e723e52ea Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Thu, 5 Aug 2010 18:13:23 +0000 Subject: [PATCH] Fix detect directory shortname and version --- pym/cl_distr.py | 66 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/pym/cl_distr.py b/pym/cl_distr.py index 5c9b091..7f4aef8 100644 --- a/pym/cl_distr.py +++ b/pym/cl_distr.py @@ -14,6 +14,7 @@ from cl_utils import runOsCommand,isMount,removeDir,typeFile,pathJoin from shutil import copyfile from cl_template import _terms from subprocess import Popen,PIPE +from cl_fill import fillVars import threading @@ -89,6 +90,61 @@ class DistributiveRepository: else: return {} + def _get_from_metapackage(self,directory,shortname): + """Get version from meta package""" + metaPkgs = filter(lambda x:"%s-meta"%shortname.lower() in x, + os.listdir(pathjoin(directory, + 'var/db/pkg/app-misc/'))) + if metaPkgs: + reFindVer = re.compile("(?<=\-)\d+\.?\d*\.?\d*") + findVer = reFindVer.search(metaPkgs[0]) + if findVer: + return findVer.group() + return None + + def _get_from_calculate_ini(self,directory): + """Get version from calculate ini""" + path = pathjoin(directory,'/etc/calculate/calculate.ini') + if os.path.exists(path): + FD = open(path) + data = FD.readlines() + FD.close() + shortNameList = filter(lambda y:y, + map(lambda x:\ + len(x.split("="))==2 and\ + x.split("=")[0]=="linuxver" and\ + x.split("=")[1].strip(), data)) + if shortNameList: + return shortNameList[0] + + def _getdistrshortname(self,directory='/'): + """Get distributive shortname""" + makeprofile = pathjoin(directory,'etc/make.profile') + if os.path.exists(makeprofile): + link = os.readlink(makeprofile) + reMakeProfileLink = re.compile('calculate/(desktop|server)/(%s)'% + "|".join(fillVars.dictLinuxName.keys()),re.S) + shortnameSearch = reMakeProfileLink.search(link) + if shortnameSearch: + return shortnameSearch.groups()[1] + path = pathjoin(directory,'etc/calculate/calculate.ini') + if os.path.exists(path): + FD = open(path) + data = FD.readlines() + FD.close() + shortNameList = filter(lambda y:y, + map(lambda x:\ + len(x.split("="))==2 and\ + x.split("=")[0]=="calculate" and\ + x.split("=")[1].strip(), data)) + if shortNameList: + return shortNameList[0] + gentooFile = pathjoin(directory,"etc/gentoo-release") + shortName = "Linux" + if os.path.exists(gentooFile): + shortName = "Gentoo" + return shortName + def _getdistrinfo(self,filename): """Get information by distributive""" if os.path.isdir(filename): @@ -100,10 +156,10 @@ class DistributiveRepository: d['march']= 'i686' if d: d['ext'] = 'dir' - if "calculate" in d: - d["name"] = d["calculate"] - if "linuxver" in d: - d['ver'] = d['linuxver'] + d["name"] = self._getdistrshortname(filename) + d['ver'] = self._get_from_metapackage(filename,d["name"]) or \ + self._get_from_calculate_ini(filename) or \ + "0" return d else: match = self.reDistName.match(filename) @@ -127,7 +183,7 @@ class DistributiveRepository: else: return True def listdistr(path): - if pathexists(pathjoin(path,'etc/calculate')): + if pathexists(pathjoin(path,'etc/make.profile')): return [path] else: # discard inner directories