From be6f94d3d8c158f18485ec2447bbd9ceda07f550 Mon Sep 17 00:00:00 2001 From: Ben Couturier <ben.couturier@cern.ch> Date: Thu, 1 Jun 2017 11:20:45 +0200 Subject: [PATCH] Added possibility to import projects with CMT config from gitlab --- .../LbRelease/SoftConfDB/AppImporter.py | 51 +++++++++++++++++-- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/LbRelease/python/LbRelease/SoftConfDB/AppImporter.py b/LbRelease/python/LbRelease/SoftConfDB/AppImporter.py index 4bf258b3..cb485668 100644 --- a/LbRelease/python/LbRelease/SoftConfDB/AppImporter.py +++ b/LbRelease/python/LbRelease/SoftConfDB/AppImporter.py @@ -99,6 +99,19 @@ class GitlabProject: raise return data + def getProjectCMT(self): + self.projectcmturl = self.getURL("cmt/project.cmt") + self.log.debug("Getting: %s" % self.projectcmturl) + try: + response = urllib2.urlopen(self.projectcmturl) + data = response.read() + self.log.debug("Got: %s" % self.projectcmturl) + except: + self.log.warning("Could not find Project.cmt at: %s" % self.projectcmturl) + raise + return data + + def getProjectConfig(self): """ URL folows pattern: https://gitlab.cern.ch/lhcb-dirac/LHCbDIRAC/raw/v8r6p3/dist-tools/projectConfig.json @@ -122,6 +135,18 @@ class GitlabProject: deps.append((l[0], l[1])) return deps + def getDepsFromProjectCMT(self, data): + deps = [] + for l in data.splitlines(): + m = re.match("\s*use\s+(\w+)\s+([\w\*]+)", l) + if m != None: + dp = m.group(1) + dv = m.group(2) + # removing the project name from the version if there + dv = dv.replace(dp + "_", "") + deps.append((dp, dv)) + return deps + def getDependencies(self): """ Returns the list of project dependencies """ pupper = self.project.upper() @@ -136,13 +161,28 @@ class GitlabProject: return [] else: # For all other projects use the gaudi_project macro + # First we try to find teh CMakeLists + # Second we try the projectConfig.json + # Third we try the project.cmt for legacy projects try: + self.log.warning("Looking for CMakeLists.txt") data = self.getCMakeLists() deplist = getGaudiUse(data) except: - data = self.getProjectConfig() - deplist = self.getDepsFromProjectConfig(data) - return deplist + try: + self.log.warning("Looking for projectConfig.json") + data = self.getProjectConfig() + deplist = self.getDepsFromProjectConfig(data) + return deplist + except: + try: + self.log.warning("Looking for legacy CMT project.cmt") + data = self.getProjectCMT() + deplist = self.getDepsFromProjectCMT(data) + return deplist + except: + self.log.error("Could not find project dependency metadata") + raise Exception("Could not find project metadata") return [] @@ -238,7 +278,9 @@ class AppImporter: return node_parent - + ## + # Main entry point for the importer + # def processProjectVersion(self, p, v, alreadyDone = [], recreate=False, sourceuri=None): """ Get the dependencies for a single project """ # Cleanup the project name and version and get the SVN URL @@ -262,7 +304,6 @@ class AppImporter: # we'll use this hack self.log.warning("Project %s is in Gitlab URI:%s" % (proj, sourceuri)) return self.gitlabProcessProjectVersion(p, v, alturi=sourceuri, saveURIinPV=forcedSourceURI) - # Getting the project.cmt file with dependencies if proj.upper() == "GANGA": projcmt = self.getGangaProjectCMT(ver) -- GitLab