commit:     12c4aa125889ef4518a7ecc8232a10d55b129301
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 10 21:40:48 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Jan 10 21:40:48 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=12c4aa12

Add CheckCGentooCiProject on BuildFactory update_db_cp

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

 buildbot_gentoo_ci/config/buildfactorys.py |  4 +-
 buildbot_gentoo_ci/db/categorys.py         | 76 ++++++++++++++++++++++++++++++
 buildbot_gentoo_ci/db/connector.py         |  2 +
 buildbot_gentoo_ci/db/model.py             | 10 ++--
 buildbot_gentoo_ci/steps/category.py       | 58 +++++++++++++++++++++++
 5 files changed, 143 insertions(+), 7 deletions(-)

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py 
b/buildbot_gentoo_ci/config/buildfactorys.py
index 3fae376..4a0ffcd 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -5,7 +5,7 @@ from buildbot.plugins import steps as buildbot_steps
 from buildbot.plugins import util
 
 from buildbot_gentoo_ci.steps import update_db
-#from buildbot_gentoo_ci.steps import category
+from buildbot_gentoo_ci.steps import category
 #from buildbot_gentoo_ci.steps import package
 
 def update_db_check():
@@ -37,7 +37,7 @@ def update_db_cp():
     # else
     #   add category to db step
     #   return category_data
-    #f.addStep(category.CheckCGentooCiProject())
+    f.addStep(category.CheckCGentooCiProject())
     # if package in db
     #   return package_data
     #   add check package path step at end

diff --git a/buildbot_gentoo_ci/db/categorys.py 
b/buildbot_gentoo_ci/db/categorys.py
new file mode 100644
index 0000000..f2bfde4
--- /dev/null
+++ b/buildbot_gentoo_ci/db/categorys.py
@@ -0,0 +1,76 @@
+# This file has parts from Buildbot and is modifyed by Gentoo Authors. 
+# Buildbot is free software: you can redistribute it and/or modify it 
+# under the terms of the GNU General Public License as published by the 
+# Free Software Foundation, version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright Buildbot Team Members
+# Origins: buildbot.db.*
+# Modifyed by Gentoo Authors.
+# Copyright 2021 Gentoo Authors
+
+import uuid
+import sqlalchemy as sa
+
+from twisted.internet import defer
+
+from buildbot.db import base
+
+class CategorysConnectorComponent(base.DBConnectorComponent):
+
+    @defer.inlineCallbacks
+    def getCategoryByName(self, name):
+        def thd(conn):
+            tbl = self.db.model.categorys
+            q = tbl.select()
+            q = q.where(tbl.c.name == name)
+            res = conn.execute(q)
+            row = res.fetchone()
+            if not row:
+                return None
+            return self._row2dict(conn, row)
+        res = yield self.db.pool.do(thd)
+        return res
+
+    @defer.inlineCallbacks
+    def getCategoryByUuid(self, uuid):
+        def thd(conn):
+            tbl = self.db.model.categorys
+            q = tbl.select()
+            q = q.where(tbl.c.uuid == uuid)
+            res = conn.execute(q)
+            row = res.fetchone()
+            if not row:
+                return None
+            return self._row2dict(conn, row)
+        res = yield self.db.pool.do(thd)
+        return res
+
+    @defer.inlineCallbacks
+    def addCategory(self, name):
+        def thd(conn, no_recurse=False):
+            try:
+                tbl = self.db.model.categorys
+                q = tbl.insert()
+                r = conn.execute(q, dict(name=name))
+            except (sa.exc.IntegrityError, sa.exc.ProgrammingError):
+                uuid = None
+            else:
+                uuid = r.inserted_primary_key[0]
+            return uuid
+        res = yield self.db.pool.do(thd)
+        return res
+
+    def _row2dict(self, conn, row):
+        return dict(
+            uuid=row.uuid,
+            name=row.name
+            )

diff --git a/buildbot_gentoo_ci/db/connector.py 
b/buildbot_gentoo_ci/db/connector.py
index f95a121..c10fc49 100644
--- a/buildbot_gentoo_ci/db/connector.py
+++ b/buildbot_gentoo_ci/db/connector.py
@@ -32,6 +32,7 @@ from buildbot.util import service
 from buildbot_gentoo_ci.db import model
 from buildbot_gentoo_ci.db import projects
 from buildbot_gentoo_ci.db import repositorys
+from buildbot_gentoo_ci.db import categorys
 
 upgrade_message = textwrap.dedent("""\
 
@@ -73,6 +74,7 @@ class DBConnector(service.ReconfigurableServiceMixin,
         self.model = model.Model(self)
         self.projects = projects.ProjectsConnectorComponent(self)
         self.repositorys = repositorys.RepositorysConnectorComponent(self)
+        self.categorys = categorys.CategorysConnectorComponent(self)
 
     @defer.inlineCallbacks
     def setup(self, config, check_version=True, verbose=True):

diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index 1ab5990..e01462f 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -138,7 +138,7 @@ class Model(base.DBConnectorComponent):
     )
 
     categorys = sautils.Table(
-        "categories", metadata,
+        "categorys", metadata,
         sa.Column('uuid', sa.String(36), primary_key=True,
                   default=lambda: str(uuid.uuid4())
                   ),
@@ -152,7 +152,7 @@ class Model(base.DBConnectorComponent):
                   ),
         sa.Column('name', sa.String(255), nullable=False),
         sa.Column('category_uuid', sa.String(36),
-                  sa.ForeignKey('categories.uuid', ondelete='CASCADE'),
+                  sa.ForeignKey('categorys.uuid', ondelete='CASCADE'),
                   nullable=False),
         sa.Column('repository_uuid', sa.String(36),
                   sa.ForeignKey('repositorys.uuid', ondelete='CASCADE'),
@@ -175,14 +175,14 @@ class Model(base.DBConnectorComponent):
         sa.Column('deleted_at', sa.Integer, nullable=True),
     )
 
-    ebuildkeywords = sautils.Table(
-        "ebuildkeywords", metadata,
+    ebuilds_keywords = sautils.Table(
+        "ebuilds_keywords", metadata,
         # unique id per project
         sa.Column('id', sa.Integer, primary_key=True),
         # project's name
         sa.Column('keyword_id', sa.Integer,
                   sa.ForeignKey('keywords.id', ondelete='CASCADE')),
-        sa.Column('ebuild_uuid', sa.String(36),
+        sa.Column('ebuilds_uuid', sa.String(36),
                   sa.ForeignKey('ebuilds.uuid', ondelete='CASCADE')),
         sa.Column('status', sa.String(255), nullable=False),
     )

diff --git a/buildbot_gentoo_ci/steps/category.py 
b/buildbot_gentoo_ci/steps/category.py
new file mode 100644
index 0000000..e641a97
--- /dev/null
+++ b/buildbot_gentoo_ci/steps/category.py
@@ -0,0 +1,58 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import re
+import os
+
+from portage.xml.metadata import MetaDataXML
+from portage.checksum import perform_checksum
+
+from twisted.internet import defer
+from twisted.python import log
+
+from buildbot.process.buildstep import BuildStep
+from buildbot.process.results import SUCCESS
+from buildbot.process.results import FAILURE
+
+class AddCategory(BuildStep):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
+        self.category = self.getProperty("category")
+        self.category_data = {}
+        self.category_data['name'] = self.category
+        self.category_data['uuid'] = yield 
self.gentooci.db.categorys.addCategory(self.category)
+        print(self.category_data)
+        self.setProperty("category_data", self.category_data, 'category_data')
+        self.setProperty("config_root", self.getProperty("config_root"), 
'config_root')
+        self.setProperty("project_data", self.getProperty("project_data"), 
'project_data')
+        self.setProperty("repository", self.getProperty("repository"), 
'repository')
+        self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
+        return SUCCESS
+
+class CheckCGentooCiProject(BuildStep):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
+        self.category = yield self.getProperty("cpv").split('/')[0]
+        print(self.category)
+        self.category_data = yield 
self.gentooci.db.categorys.getCategoryByName(self.category)
+        self.setProperty("config_root", self.getProperty("config_root"), 
'config_root')
+        self.setProperty("project_data", self.getProperty("project_data"), 
'project_data')
+        self.setProperty("repository", self.getProperty("repository"), 
'repository')
+        self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
+        print(self.category_data)
+        if self.category_data is None:
+            self.setProperty("category", self.category, 'category')
+            yield self.build.addStepsAfterCurrentStep([AddCategory()])
+            #yield self.build.addStepsAfterLastStep([AddMetadataCategory()])
+            return SUCCESS
+        self.setProperty("category_data", self.category_data, 'category_data')
+        #yield self.build.addStepsAfterLastStep([CheckPathCategory()])
+        return SUCCESS

Reply via email to