commit:     34d24bb7295a9b3102464e2744b6b807fe2c6c22
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Apr  5 08:07:51 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Apr  5 08:07:51 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=34d24bb7

Add support for --depclean

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

 buildbot_gentoo_ci/config/buildfactorys.py | 22 ++++------
 buildbot_gentoo_ci/steps/builders.py       | 70 +++++++++++++++++++++++++-----
 2 files changed, 67 insertions(+), 25 deletions(-)

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py 
b/buildbot_gentoo_ci/config/buildfactorys.py
index fddfa2b..817b324 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -127,21 +127,15 @@ def run_build_request():
     # run pretend on packages update on worker
     f.addStep(builders.RunEmerge(step='pre-update'))
     #   look at the log to see if we need to do stuff
-    #   run update package on worker
+    #   run update package on worker and check log
     f.addStep(builders.RunEmerge(step='update'))
-    #   check log
-    # run depclean if set
-    #   depclean pretend
+    # clean up the worker
+    # look at the log to see if we need to do stuff
+    # run pre-depclean and depclean if set
     f.addStep(builders.RunEmerge(step='pre-depclean'))
-    #   look at the log to see if we need to do stuff
-    #   depclean
-    f.addStep(builders.RunEmerge(step='depclean'))
-    # run @preserved-rebuild if needed
+    # run preserved-libs and depclean
     f.addStep(builders.RunEmerge(step='preserved-libs'))
-    #   check log
-    #   depclean
     f.addStep(builders.RunEmerge(step='depclean'))
-    #   check log
     # setup make.conf if build id has changes make.conf as dict from 
SetMakeConf
     # setup package.* env if build id has changes
     # setup pkgcheck.conf if needed
@@ -154,10 +148,10 @@ def run_build_request():
     # Add the needed steps for build
     f.addStep(builders.RunBuild())
     # clean up the worker
+    # look at the log to see if we need to do stuff
+    # run pre-depclean and depclean if set
     f.addStep(builders.RunEmerge(step='pre-depclean'))
-    #   look at the log to see if we need to do stuff
-    #   run depclean and preserved-libs
-    f.addStep(builders.RunEmerge(step='depclean'))
+    # run preserved-libs and depclean
     f.addStep(builders.RunEmerge(step='preserved-libs'))
     f.addStep(builders.RunEmerge(step='depclean'))
     return f

diff --git a/buildbot_gentoo_ci/steps/builders.py 
b/buildbot_gentoo_ci/steps/builders.py
index 96572c0..af3be9d 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -18,7 +18,6 @@ def PersOutputOfEmerge(rc, stdout, stderr):
     emerge_output = {}
     emerge_output['rc'] = rc
     emerge_output['preserved_libs'] = False
-    emerge_output['depclean'] = False
     emerge_output['change_use'] = False
     package_dict = {}
     log_path_list = []
@@ -121,6 +120,21 @@ def PersOutputOfPkgCheck(rc, stdout, stderr):
         'pkgcheck_output' : pkgcheck_output
         }
 
+def PersOutputOfDepclean(rc, stdout, stderr):
+    depclean_output = {}
+    depclean_output['rc'] = rc
+    print(stderr)
+    depclean_output['stderr'] = stderr
+    package_list = False
+    for line in stdout.split('\n'):
+        if line.startswith('All selected packages:'):
+            line_tmp = line.replace('All selected packages: ', '')
+            package_list = line_tmp.split(' ')
+    depclean_output['packages'] = package_list
+    return {
+        'depclean_output' : depclean_output
+        }
+
 class TriggerRunBuildRequest(BuildStep):
     
     name = 'TriggerRunBuildRequest'
@@ -364,22 +378,26 @@ class RunEmerge(BuildStep):
                 steps.SetPropertyFromCommandNewStyle(
                         command=shell_commad_list,
                         strip=True,
-                        extract_fn=PersOutputOfEmerge,
+                        extract_fn=PersOutputOfDepclean,
                         workdir='/'
                 ))
-            aftersteps_list.append(CheckEmergeLogs('depclean'))
+            aftersteps_list.append(CheckDepcleanLogs('pre-depclean'))
+            self.setProperty('depclean', False, 'depclean')
 
-        if self.step == 'depclean' and self.getProperty('depclean'):
+        if self.step == 'depclean' and projects_emerge_options['depclean']:
             shell_commad_list.append('-q')
             shell_commad_list.append('--depclean')
+            # add exlude cpv if needed
+            if self.getProperty('depclean'):
+                pass
             aftersteps_list.append(
                 steps.SetPropertyFromCommandNewStyle(
                         command=shell_commad_list,
                         strip=True,
-                        extract_fn=PersOutputOfEmerge,
+                        extract_fn=PersOutputOfDepclean,
                         workdir='/'
                 ))
-            aftersteps_list.append(CheckEmergeLogs('depclean'))
+            aftersteps_list.append(CheckDepcleanLogs('depclean'))
 
         if self.step == 'match':
             cpv = self.getProperty("cpv")
@@ -456,7 +474,7 @@ class RunEmerge(BuildStep):
 
 class CheckEmergeLogs(BuildStep):
 
-    name = 'CheckLogs'
+    name = 'CheckEmergeLogs'
     description = 'Running'
     descriptionDone = 'Ran'
     haltOnFailure = True
@@ -483,10 +501,6 @@ class CheckEmergeLogs(BuildStep):
         # preserved-libs
         if emerge_output['preserved_libs'] and 
projects_emerge_options['preserved_libs']:
             self.setProperty('preserved_libs', True, 'preserved-libs')
-        # depclean
-        # FIXME: check if don't remove needed stuff.
-        if emerge_output['depclean'] and projects_emerge_options['depclean']:
-            self.setProperty('depclean', True, 'depclean')
 
         # FIXME: check if cpv match
         if self.step == 'match'and 
self.getProperty('projectrepository_data')['build']:
@@ -577,6 +591,40 @@ class CheckEmergeLogs(BuildStep):
             yield self.build.addStepsAfterCurrentStep(aftersteps_list)
         return SUCCESS
 
+class CheckDepcleanLogs(BuildStep):
+
+    name = 'CheckDepcleanLogs'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    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):
+        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'])
+        depclean_output = self.getProperty('depclean_output')
+        aftersteps_list = []
+        # run depclean if needed
+        if self.step == 'pre-depclean' and projects_emerge_options['depclean']:
+            # FIXME: check if we don't remove needed stuff.
+            # add it to Property depclean if needed
+            if depclean_output['packages']:
+                for cpv_tmp in depclean_output['packages']:
+                    cpv = cpv_tmp.replace('=', '')
+                self.setProperty('depclean', False, 'depclean')
+                aftersteps_list.append(RunEmerge(step='depclean'))
+
+        if not self.step is None and aftersteps_list != []:
+            yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+        return SUCCESS
+
 class RunPkgCheck(BuildStep):
 
     name = 'RunPkgCheck'

Reply via email to