commit:     6ca6f7fb23f0d63bbb53a457c1bd149a9cd40795
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 17 20:40:25 2024 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Mar 17 20:40:25 2024 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=6ca6f7fb

Add more support for change use, rebuild faild bin and clean some --change-* 
emerge options

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

 buildbot_gentoo_ci/steps/builders.py | 49 ++++++++++++++++++++++++++++--------
 1 file changed, 39 insertions(+), 10 deletions(-)

diff --git a/buildbot_gentoo_ci/steps/builders.py 
b/buildbot_gentoo_ci/steps/builders.py
index 09739d7..0ac8526 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -31,6 +31,7 @@ def PersOutputOfEmerge(rc, stdout, stderr):
     emerge_output['masked'] = False
     emerge_output['failed'] = False
     package_dict = {}
+    change_use = {}
     log_path_list = []
     print('stderr')
     print(stderr)
@@ -99,7 +100,6 @@ def PersOutputOfEmerge(rc, stdout, stderr):
             change_use_list = []
             # get cpv
             cpv_split = line_list[1].split(':')
-            change_use = {}
             # add use flags
             if line_list[4].startswith('+') or line_list[4].startswith('-'):
                 # we only support tre for now
@@ -120,7 +120,21 @@ def PersOutputOfEmerge(rc, stdout, stderr):
                     change_use_list = False
             if change_use_list:
                 change_use[cpv_split[0]] = change_use_list
-                emerge_output['change_use'] = change_use
+        if 'USE changes are' in line:
+            change_use_list = []
+            change_use = {}
+            for text in stderr.split('\n'):
+                if text.startswith('>='):
+                    line_list = text.split(' ')
+                    for line2 in text.split(' '):
+                        if line2.startswith('>='):
+                            cpv = line2.split(':')[0].replace('>=', '')
+                        else:
+                            change_use_list.append(line2)
+                if change_use_list:
+                    change_use[cpv] = change_use_list
+        if change_use != {}:
+            emerge_output['change_use'] = change_use
         if line.startswith(' * '):
             if line.endswith('.log'):
                 log_path = line.split(' ')[3]
@@ -355,8 +369,9 @@ class RunEmerge(BuildStep):
     haltOnFailure = True
     flunkOnFailure = True
 
-    def __init__(self, step=None, **kwargs):
+    def __init__(self, step=None, exclude=False, **kwargs):
         self.step = step
+        self.exclude = exclude
         super().__init__(**kwargs)
         self.descriptionSuffix = self.step
         self.name = 'Setup emerge for ' + self.step + ' step'
@@ -367,6 +382,7 @@ class RunEmerge(BuildStep):
         self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
         project_data = self.getProperty('project_data')
         projects_emerge_options = yield 
self.gentooci.db.projects.getProjectEmergeOptionsByUuid(project_data['uuid'])
+        #FIXME: Use settings from gentoo-ci-settings json file
         self.stepname = 'Run emerge ' + 'step ' + self.step
         shell_commad_list = [
                     'emerge',
@@ -402,9 +418,9 @@ class RunEmerge(BuildStep):
             self.setProperty('build_env', build_env, 'build_env')
 
         if self.step == 'pre-update':
-            shell_commad_list.append('-uDN')
-            shell_commad_list.append('--changed-deps')
-            shell_commad_list.append('--changed-use')
+            shell_commad_list.append('--update')
+            shell_commad_list.append('--deep')
+            shell_commad_list.append('--newuse')
             shell_commad_list.append('--pretend')
             shell_commad_list.append('@world')
             # don't build bin for virtual and acct-*
@@ -423,9 +439,9 @@ class RunEmerge(BuildStep):
             aftersteps_list.append(CheckEmergeLogs('pre-update'))
 
         if self.step == 'update':
-            shell_commad_list.append('-uDNq')
-            shell_commad_list.append('--changed-deps')
-            shell_commad_list.append('--changed-use')
+            shell_commad_list.append('--update')
+            shell_commad_list.append('--deep')
+            shell_commad_list.append('--newuse')
             shell_commad_list.append('@world')
             # don't build bin for virtual and acct-*
             shell_commad_list.append('--buildpkg-exclude')
@@ -600,6 +616,10 @@ class RunEmerge(BuildStep):
             # we don't use the bin for the requsted cpv
             shell_commad_list.append('--usepkg-exclude')
             shell_commad_list.append(cp)
+            if self.exclude:
+                # we don't use the bin for the exclude cpv
+                shell_commad_list.append('--usepkg-exclude')
+                shell_commad_list.append(self.exclude)
             # don't build bin for virtual and acct-*
             shell_commad_list.append('--buildpkg-exclude')
             shell_commad_list.append('virtual')
@@ -1021,6 +1041,10 @@ class CheckEmergeLogs(BuildStep):
                         c = yield catpkgsplit(self.faild_cpv)[0]
                         if c == 'dev-haskell':
                             rebuild = 'haskell'
+                        for cpv, v in package_dict.items():
+                                    if cpv == self.faild_cpv:
+                                        if v['binary']:
+                                            rebuild = 'binary'
                         if not rebuild or self.getProperty('rerun') >= retrays:
                             # failed and build requested cpv
                             if cpv == self.faild_cpv:
@@ -1066,11 +1090,16 @@ class CheckEmergeLogs(BuildStep):
                         #FIXME: Set build timeout in config
                         build_timeout = 6600
                         shell_commad_list = []
+                        exclude = False
                         # rebuild broken haskell
                         if rebuild == 'haskell':
                             shell_commad_list.append('haskell-updater')
                             shell_commad_list.append('--')
                             shell_commad_list.append('--usepkg=n')
+                        if rebuild == 'binary':
+                            c = yield catpkgsplit(self.faild_cpv)[0]
+                            p = yield catpkgsplit(self.faild_cpv)[1]
+                            exclude = c + '/' + p
                         if shell_commad_list != []:
                             self.aftersteps_list.append(
                                 steps.ShellCommand(
@@ -1079,7 +1108,7 @@ class CheckEmergeLogs(BuildStep):
                                     env=self.getProperty("build_env"),
                                     timeout=build_timeout
                             ))
-                        self.aftersteps_list.append(RunEmerge(step='build'))
+                        self.aftersteps_list.append(RunEmerge(step='build', 
exclude=exclude))
                         self.aftersteps_list.append(CheckEmergeLogs('build'))
                         self.setProperty('rerun', self.getProperty('rerun') + 
1, 'rerun')
         if not self.step is None and self.aftersteps_list != []:

Reply via email to