commit:     8bdcac12a5c3a41d8321a55b8fef36355dc0f6e7
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Fri Apr  2 22:11:49 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Fri Apr  2 22:11:49 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=8bdcac12

Add GetAuxMetadata and use that to get aux metadata

Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>

 buildbot_gentoo_ci/steps/portage.py   | 63 ++++++++++++++++++++++++++++++++---
 buildbot_gentoo_ci/steps/update_db.py | 17 +++++++++-
 buildbot_gentoo_ci/steps/version.py   | 12 ++++---
 3 files changed, 83 insertions(+), 9 deletions(-)

diff --git a/buildbot_gentoo_ci/steps/portage.py 
b/buildbot_gentoo_ci/steps/portage.py
index 293b862..d66c952 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -10,6 +10,7 @@ from portage import _encodings
 from portage import _unicode_encode
 from portage import _parse_eapi_ebuild_head, eapi_is_supported
 from portage.versions import cpv_getversion, pkgsplit, catpkgsplit
+from portage import portdbapi
 
 from twisted.internet import defer
 from twisted.python import log
@@ -249,7 +250,7 @@ class SetMakeConf(BuildStep):
         makeconf_list.append('DISTDIR="/var/cache/portage/distfiles"')
         makeconf_list.append('PORTAGE_ELOG_CLASSES="*"')
         # We need echo:info to get the logfile name
-        makeconf_list.append('PORTAGE_ELOG_SYSTEM="save echo:info"')
+        makeconf_list.append('PORTAGE_ELOG_SYSTEM="save:* echo:info"')
         # add ACCEPT_KEYWORDS from the project_data info
         keyword_data = yield 
self.gentooci.db.keywords.getKeywordById(project_data['keyword_id'])
         if project_data['status'] == 'unstable':
@@ -395,7 +396,8 @@ class SetReposConfLocal(BuildStep):
         repos_conf_path = yield os.path.join('etc', 'portage', 'repos.conf')
         repos_conf_default_path = yield os.path.join(repos_conf_path, 
'default.conf')
         self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
-        self.repository_basedir = 
self.gentooci.config.project['repository_basedir']
+        # the path should be set in the confg
+        self.repository_basedir2 = '/home/repos2/'
         if not os.path.isfile(repos_conf_default_path):
             # setup the default.conf
             repos_conf_data = yield 
self.gentooci.db.projects.getProjectPortageByUuidAndDirectory(self.getProperty('project_data')['uuid'],
 'repos.conf')
@@ -409,7 +411,7 @@ class SetReposConfLocal(BuildStep):
             yield WriteTextToFile(repos_conf_default_path, default_conf)
         repos_conf_repository_path = yield os.path.join(repos_conf_path, 
self.getProperty("repository_data")['name'] + '.conf')
         if not os.path.isfile(repos_conf_repository_path):
-            repository_path = yield os.path.join(self.getProperty("builddir"), 
self.repository_basedir, self.getProperty("repository_data")['name'])
+            repository_path = yield os.path.join(self.repository_basedir2, 
self.getProperty("repository_data")['name'])
             repository_conf = []
             repository_conf.append('[' + 
self.getProperty("repository_data")['name'] + ']')
             repository_conf.append('location = ' + repository_path)
@@ -444,7 +446,7 @@ class SetMakeConfLocal(BuildStep):
         makeconf_list.append('ACCEPT_KEYWORDS="~amd64 amd64"')
         makeconf_list.append('EMERGE_DEFAULT_OPTS=""')
         makeconf_list.append('ABI_X86="32 64"')
-        makeconf_list.append('FEATURES=""')
+        makeconf_list.append('FEATURES="sandbox"')
         yield WriteTextToFile(make_conf_path, makeconf_list)
         return SUCCESS
 
@@ -530,3 +532,56 @@ class SetEnvForEbuildSH(BuildStep):
                                                             ))
         yield self.build.addStepsAfterCurrentStep(addStepEbuildSH)
         return SUCCESS
+
+class GetAuxMetadata(BuildStep):
+
+    name = 'GetAuxMetadata'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    #@defer.inlineCallbacks
+    def thd_getAuxDbKeys(self):
+        auxdbs = self.myportdb.aux_get(self.getProperty("cpv"), auxdbkeys, 
myrepo=self.getProperty("repository_data")['name'])
+        return auxdbs
+
+    @defer.inlineCallbacks
+    def run(self):
+        config_root = yield os.path.join(self.getProperty("builddir"), '')
+        # setup mysettings and myportdb
+        mysettings = yield portage_config(config_root = config_root)
+        self.myportdb = yield portdbapi(mysettings=mysettings)
+        auxdbs = yield self.thd_getAuxDbKeys()
+        metadata = None
+        NoSplit = []
+        NoSplit.append('DESCRIPTION')
+        # should have 22 lines
+        if len(auxdbkeys) != len(auxdbs) or not isinstance(auxdbs, list):
+            # number of lines is incorrect or not a list.
+            print("Lines don't match or not a list")
+            yield self.myportdb.close_caches()
+            yield portdbapi.portdbapi_instances.remove(self.myportdb)
+            #self.setProperty('auxdb', metadata, 'auxdb')
+            return FAILURE
+        # split all keys to list instead of speces
+        metadata = {}
+        i = 0
+        for key in auxdbkeys:
+            if auxdbs[i] == '':
+                metadata[key] = None
+            else:
+                if ' ' in auxdbs[i] and key not in NoSplit:
+                    metadata[key] = auxdbs[i].split(' ')
+                else:
+                    metadata[key] = []
+                    metadata[key].append(auxdbs[i])
+            i = i + 1
+        self.setProperty('auxdb', metadata, 'auxdb')
+        yield self.myportdb.close_caches()
+        yield portdbapi.portdbapi_instances.remove(self.myportdb)
+        return SUCCESS

diff --git a/buildbot_gentoo_ci/steps/update_db.py 
b/buildbot_gentoo_ci/steps/update_db.py
index b84e256..3594c1b 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -140,11 +140,20 @@ class UpdateRepos(BuildStep):
                 else:
                     raise AssertionError('Unknown merge analysis result')
 
+    @defer.inlineCallbacks
+    def setchmod(self, path):
+        for root, dirs, files in os.walk(path):
+            for d in dirs:
+                yield os.chmod(os.path.join(root, d), 0o0755)
+            for f in files:
+                yield os.chmod(os.path.join(root, f), 0o0644)
+
     @defer.inlineCallbacks
     def run(self):
         #FIXME check HEAD agenst local and worker local tree so we don't 
gitpull evrytime
         self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
-        self.repository_basedir = 
self.gentooci.config.project['repository_basedir']
+        #self.repository_basedir = 
self.gentooci.config.project['repository_basedir']
+        self.repository_basedir = yield os.path.join('/home', 'repos2')
         self.profile_repository_path = yield 
os.path.join(self.repository_basedir, 
self.getProperty("profile_repository_data")['name'])
         repo_path = yield 
pygit2.discover_repository(self.profile_repository_path)
         print(repo_path)
@@ -153,6 +162,9 @@ class UpdateRepos(BuildStep):
         else:
             repo = yield pygit2.Repository(repo_path)
             yield self.gitPull(repo)
+        # chmod and chown
+        yield self.setchmod(self.profile_repository_path)
+        #yield os.chown(self.profile_repository_path, 'buildbot', 'portage')
         if self.getProperty("profile_repository_data")['name'] != 
self.getProperty("repository_data")['name']:
             self.repository_path = yield os.path.join(self.repository_basedir, 
self.getProperty("repository_data")['name'])
             repo_path = yield pygit2.discover_repository(self.repository_path)
@@ -161,6 +173,9 @@ class UpdateRepos(BuildStep):
             else:
                 repo = yield pygit2.Repository(repo_path)
                 yield self.gitPull(repo)
+            # chmod and chown
+            yield self.setchmod(self.profile_repository_path)
+            #yield os.chown(self.repository_path, 'buildbot', 'portage')
         return SUCCESS
 
 class TriggerCheckForCPV(BuildStep):

diff --git a/buildbot_gentoo_ci/steps/version.py 
b/buildbot_gentoo_ci/steps/version.py
index 4c35914..426ddd4 100644
--- a/buildbot_gentoo_ci/steps/version.py
+++ b/buildbot_gentoo_ci/steps/version.py
@@ -131,7 +131,6 @@ class AddVersionKeyword(BuildStep):
             return SUCCESS
         print(auxdb)
         for keyword in auxdb:
-            print(keyword)
             status = 'stable'
             if keyword[0] in ["~"]:
                 keyword = keyword[1:]
@@ -170,7 +169,8 @@ class CheckPathHash(BuildStep):
     def run(self):
         self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
         self.repository_basedir = 
self.gentooci.config.project['repository_basedir']
-        self.repository_path = yield os.path.join(self.repository_basedir, 
self.getProperty("repository_data")['name'])
+        self.repository_path = yield os.path.join('/home', 'repos2', 
self.getProperty("repository_data")['name'])
+        #self.repository_path = yield os.path.join(self.repository_basedir, 
self.getProperty("repository_data")['name'])
         self.cp_path = yield pkgsplit(self.getProperty("cpv"))[0]
         self.file_name = yield self.getProperty("package_data")['name'] + '-' 
+ self.getProperty("version") + '.ebuild'
         self.ebuild_file = yield os.path.join(self.repository_path, 
self.cp_path, self.file_name)
@@ -256,7 +256,9 @@ class CheckV(BuildStep):
         if self.getProperty("ebuild_file") is not None and 
self.getProperty("old_version_data") is not None:
             if self.getProperty("ebuild_file_hash") != 
self.getProperty("old_version_data")['file_hash']:
                 addStepVData.append(GetCommitdata())
-                addStepVData.append(portage_steps.SetEnvForEbuildSH())
+                #FIXME: use GetAuxMetadata insted of bugy SetEnvForEbuildSH
+                #addStepVData.append(portage_steps.SetEnvForEbuildSH())
+                addStepVData.append(portage_steps.GetAuxMetadata())
                 addStepVData.append(AddVersion())
                 addStepVData.append(AddVersionKeyword())
                 addStepVData.append(TriggerBuildCheck())
@@ -265,7 +267,9 @@ class CheckV(BuildStep):
                 return SUCCESS
         if self.getProperty("ebuild_file") is not None and 
self.getProperty("old_version_data") is None:
             addStepVData.append(GetCommitdata())
-            addStepVData.append(portage_steps.SetEnvForEbuildSH())
+            #FIXME: use GetAuxMetadata insted of bugy SetEnvForEbuildSH
+            #addStepVData.append(portage_steps.SetEnvForEbuildSH())
+            addStepVData.append(portage_steps.GetAuxMetadata())
             addStepVData.append(AddVersion())
             addStepVData.append(AddVersionKeyword())
             addStepVData.append(TriggerBuildCheck())

Reply via email to