commit:     81e7f0bdd56bf11fdbc0990191273ad59c1a3b01
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Apr  4 20:29:38 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Apr  4 20:29:38 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=81e7f0bd

Add support for Change USE, one use only

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

 buildbot_gentoo_ci/config/buildfactorys.py |  2 +-
 buildbot_gentoo_ci/steps/builders.py       | 58 ++++++++++++++++++++++++++----
 buildbot_gentoo_ci/steps/portage.py        |  1 +
 3 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py 
b/buildbot_gentoo_ci/config/buildfactorys.py
index 6e8baf6..fddfa2b 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -120,7 +120,7 @@ def run_build_request():
     # setup env
     f.addStep(portage.SetEnvDefault())
     # setup package.*
-    #f.addStep(portage.SetPackageDefault())
+    f.addStep(portage.SetPackageDefault())
     # setup files in /etc if needed
     # run --regen if needed on repo
     # update packages before any tests

diff --git a/buildbot_gentoo_ci/steps/builders.py 
b/buildbot_gentoo_ci/steps/builders.py
index b28d7e5..96572c0 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -19,6 +19,7 @@ def PersOutputOfEmerge(rc, stdout, stderr):
     emerge_output['rc'] = rc
     emerge_output['preserved_libs'] = False
     emerge_output['depclean'] = False
+    emerge_output['change_use'] = False
     package_dict = {}
     log_path_list = []
     print(stderr)
@@ -82,7 +83,20 @@ def PersOutputOfEmerge(rc, stdout, stderr):
     # split the lines
     #FIXME: Handling of stderr output
     for line in stderr.split('\n'):
-        pass
+        if 'Change USE:' in line:
+            line_list = line.split(' ')
+            change_use_list = []
+            # get cpv
+            cpv_split = line_list[1].split(':')
+            change_use_list.append(cpv_split[0])
+            # add use flags
+            if line_list[4].startswith('+') or line_list[4].startswith('-'):
+                # we only support one for now
+                if line_list[4].endswith(')'):
+                    change_use_list.append(line_list[4].replace(')', ''))
+                else:
+                    change_use_list = False
+            emerge_output['change_use'] = change_use_list
     return {
         'emerge_output' : emerge_output
         }
@@ -209,6 +223,7 @@ class SetupPropertys(BuildStep):
         self.setProperty('cpv_build', False, 'cpv_build')
         self.setProperty('pkg_check_log_data', None, 'pkg_check_log_data')
         self.setProperty('faild_version_data', None, 'faild_version_data')
+        self.setProperty('rerun', 0, 'rerun')
         print(self.getProperty("buildnumber"))
         if self.getProperty('project_build_data') is None:
             project_build_data = {}
@@ -268,13 +283,13 @@ class RunEmerge(BuildStep):
     name = 'RunEmerge'
     description = 'Running'
     descriptionDone = 'Ran'
-    descriptionSuffix = None
     haltOnFailure = True
     flunkOnFailure = True
 
     def __init__(self, step=None,**kwargs):
         self.step = step
         super().__init__(**kwargs)
+        self.descriptionSuffix = self.step
 
     @defer.inlineCallbacks
     def run(self):
@@ -388,7 +403,6 @@ class RunEmerge(BuildStep):
             cpv = self.getProperty("cpv")
             c = yield catpkgsplit(cpv)[0]
             p = yield catpkgsplit(cpv)[1]
-            shell_commad_list.append('-p')
             shell_commad_list.append('=' + self.getProperty('cpv'))
             # we don't use the bin for the requsted cpv
             shell_commad_list.append('--usepkg-exclude')
@@ -398,6 +412,7 @@ class RunEmerge(BuildStep):
             shell_commad_list.append('virtual')
             shell_commad_list.append('--buildpkg-exclude')
             shell_commad_list.append('acct-*')
+            shell_commad_list.append('-p')
             aftersteps_list.append(
                 steps.SetPropertyFromCommandNewStyle(
                         command=shell_commad_list,
@@ -444,13 +459,13 @@ class CheckEmergeLogs(BuildStep):
     name = 'CheckLogs'
     description = 'Running'
     descriptionDone = 'Ran'
-    descriptionSuffix = None
     haltOnFailure = True
     flunkOnFailure = True
 
     def __init__(self, step=None,**kwargs):
         self.step = step
         super().__init__(**kwargs)
+        self.descriptionSuffix = self.step
 
     @defer.inlineCallbacks
     def run(self):
@@ -480,10 +495,41 @@ class CheckEmergeLogs(BuildStep):
             print(self.getProperty('cpv_build'))
 
         #FIXME:
-        # update package.* if needed and rerun pre-build max X times
+        # update package.* if needed and rerun pre-build max 3 times
         if self.step == 'pre-build':
             print(emerge_output)
-
+            if self.getProperty('rerun') <= 3:
+                # when we need to change use. we could rerun pre-build with
+                # --autounmask-use=y --autounmask-write=y --autounmask-only=y
+                # but we use --binpkg--respect-use=y in EMERGE_DEFAULT_OPTS
+                # read man emerge for more
+                if emerge_output['change_use']:
+                    # add a zz file for autounmask use
+                    separator = '\n'
+                    separator2 = ' '
+                    change_use_list = []
+                    cpv = emerge_output['change_use'][0]
+                    c = yield catpkgsplit(cpv)[0]
+                    p = yield catpkgsplit(cpv)[1]
+                    change_use_list.append(c + '/' + p)
+                    # we only support one use
+                    use_flag = emerge_output['change_use'][1]
+                    if use_flag.startswith('+'):
+                        change_use_list.append(use_flag.replace('+', ''))
+                    else:
+                        change_use_list.append(use_flag)
+                    change_use_string = separator2.join(change_use_list)
+                    aftersteps_list.append(
+                        steps.StringDownload(change_use_string + separator,
+                                workerdest='zz_autouse' + 
str(self.getProperty('rerun')),
+                                workdir='/etc/portage/package.use/')
+                        )
+                    # rerun
+                    aftersteps_list.append(RunEmerge(step='pre-build'))
+                    self.setProperty('rerun', self.getProperty('rerun') + 1, 
'rerun')
+            else:
+                # trigger parse_build_log with info about pre-build and it fail
+                pass
         #FIXME:
         # Look for FAILURE and logname and download needed logfile and
         # trigger a logparser

diff --git a/buildbot_gentoo_ci/steps/portage.py 
b/buildbot_gentoo_ci/steps/portage.py
index d66c952..7822af1 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -286,6 +286,7 @@ class SetPackageDefault(BuildStep):
         aftersteps_list = []
         packagedir_list = []
         packagedir_list.append('env')
+        packagedir_list.append('use')
         #FIXME:
         # get list what dir we need to make from db
         # create the dirs

Reply via email to