commit:     94751f5a25c610be0faa036cfbaf19702c9c05cb
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 12 15:41:03 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Apr 12 15:41:03 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=94751f5a

Move repo update to new builder and change git_change

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

 buildbot_gentoo_ci/config/builders.py      |   9 ++
 buildbot_gentoo_ci/config/buildfactorys.py |  19 ++-
 buildbot_gentoo_ci/config/schedulers.py    |  53 ++++----
 buildbot_gentoo_ci/db/model.py             |   1 +
 buildbot_gentoo_ci/db/repositorys.py       |  13 +-
 buildbot_gentoo_ci/steps/portage.py        |  30 +++++
 buildbot_gentoo_ci/steps/repos.py          | 149 +++++++++++++++++++++
 buildbot_gentoo_ci/steps/update_db.py      | 203 +++++++----------------------
 8 files changed, 292 insertions(+), 185 deletions(-)

diff --git a/buildbot_gentoo_ci/config/builders.py 
b/buildbot_gentoo_ci/config/builders.py
index 25b180c..d022ac7 100644
--- a/buildbot_gentoo_ci/config/builders.py
+++ b/buildbot_gentoo_ci/config/builders.py
@@ -15,6 +15,15 @@ def gentoo_builders(b=[]):
         )
     )
     # FIXME: get workers from db
+    b.append(util.BuilderConfig(
+        name='update_repo_check',
+        workername='updatedb_1',
+        workerbuilddir='builds',
+        collapseRequests=True,
+        factory=buildfactorys.update_repo_check()
+        )
+    )
+    # FIXME: get workers from db
     # Use multiplay workers depend on Property(cpv)
     # if cp do not match next one, use diffrent worker then
     # or first cp have done its buildsteps.

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py 
b/buildbot_gentoo_ci/config/buildfactorys.py
index 817b324..962eeb0 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -11,6 +11,7 @@ from buildbot_gentoo_ci.steps import version
 from buildbot_gentoo_ci.steps import builders
 from buildbot_gentoo_ci.steps import portage
 from buildbot_gentoo_ci.steps import logs
+from buildbot_gentoo_ci.steps import repos
 
 def update_db_check():
     f = util.BuildFactory()
@@ -18,10 +19,10 @@ def update_db_check():
     # Get base project data from db
     #   return profile_repository, project
     f.addStep(update_db.GetDataGentooCiProject())
-    # Check if needed path is there
-    f.addStep(update_db.CheckPath())
     # update the repos
-    f.addStep(update_db.UpdateRepos())
+    f.addStep(update_db.TriggerUpdateRepositorys())
+    # Check if needed path is there
+    f.addStep(portage.CheckPathLocal())
     # setup the profile
     f.addStep(portage.SetMakeProfileLocal())
     # setup repos.conf dir
@@ -33,6 +34,18 @@ def update_db_check():
     f.addStep(update_db.TriggerCheckForCPV())
     return f
 
+def update_repo_check():
+    f = util.BuildFactory()
+    # FIXME: 6
+    # Check if needed path is there
+    f.addStep(repos.CheckPathRepositoryLocal())
+    # update the repos
+    # FIXME:
+    # use doStepIf so we don't need to do step=profile
+    f.addStep(repos.CheckRepository(step='profile'))
+    f.addStep(repos.CheckRepository())
+    return f
+
 def update_db_cp():
     f = util.BuildFactory()
     # FIXME: 2

diff --git a/buildbot_gentoo_ci/config/schedulers.py 
b/buildbot_gentoo_ci/config/schedulers.py
index 5be8419..107bb3c 100644
--- a/buildbot_gentoo_ci/config/schedulers.py
+++ b/buildbot_gentoo_ci/config/schedulers.py
@@ -13,37 +13,37 @@ def builderUpdateDbNames(props):
 
 @util.renderer
 def gitUpdateDb(props):
-    git_changes = []
-    print(props.changes)
-    for k in props.changes:
-        change_data = {}
-        print(k)
-        change_data['cpvs'] = []
-        for v in k['files']:
-            if v.endswith('.ebuild'):
-                c = v.split('/')[0]
-                pv = v.split('/')[2][:-7]
-                cpv = c + '/' + pv
-                print(cpv)
-                change_data['cpvs'].append(cpv)
-        if k['repository'].endswith('.git'):
-            for v in k['repository'].split('/'):
-                if v.endswith('.git'):
-                    change_data['repository'] = v[:-4]
-        change_data['author'] = k['author']
-        change_data['committer'] = k['committer']
-        change_data['comments'] = k['comments']
-        change_data['revision'] = k['revision']
-        git_changes.append(change_data)
-    print(git_changes)
-    return git_changes
+    k = props.changes[0]
+    change_data = {}
+    print(k)
+    change_data['cpvs'] = []
+    for v in k['files']:
+        if v.endswith('.ebuild'):
+            c = v.split('/')[0]
+            p = v.split('/')[1]
+            pv = v.split('/')[2][:-7]
+            cpv = c + '/' + pv
+            print(cpv)
+            change_data['cp'] = c + '/' + p
+            change_data['cpvs'].append(cpv)
+    if k['repository'].endswith('.git'):
+        for v in k['repository'].split('/'):
+            if v.endswith('.git'):
+                change_data['repository'] = v[:-4]
+    change_data['author'] = k['author']
+    change_data['committer'] = k['committer']
+    change_data['comments'] = k['comments']
+    change_data['revision'] = k['revision']
+    change_data['timestamp'] =k['when_timestamp']
+    print(change_data)
+    return change_data
 
 def gentoo_schedulers():
     scheduler_update_db = schedulers.SingleBranchScheduler(
         name='scheduler_update_db',
         treeStableTimer=0,
         properties = {
-                        'git_changes' : gitUpdateDb,
+                        'git_change' : gitUpdateDb,
                     },
         builderNames = builderUpdateDbNames,
         change_filter=util.ChangeFilter(branch='master'),
@@ -68,6 +68,8 @@ def gentoo_schedulers():
     ])
     update_cpv_data = schedulers.Triggerable(name="update_cpv_data",
                                builderNames=["update_cpv_data"])
+    update_repo_check = schedulers.Triggerable(name="update_repo_check",
+                               builderNames=["update_repo_check"])
     update_v_data = schedulers.Triggerable(name="update_v_data",
                                builderNames=["update_v_data"])
     build_request_data = schedulers.Triggerable(name="build_request_data",
@@ -79,6 +81,7 @@ def gentoo_schedulers():
     s = []
     s.append(test_updatedb)
     s.append(scheduler_update_db)
+    s.append(update_repo_check)
     s.append(update_cpv_data)
     s.append(update_v_data)
     s.append(build_request_data)

diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index 3abc686..54c964f 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -91,6 +91,7 @@ class Model(base.DBConnectorComponent):
         sa.Column('poll_interval', sa.Integer, nullable=False, default=600),
         sa.Column('poll_random_delay_min', sa.Integer, nullable=False, 
default=600),
         sa.Column('poll_random_delay_max', sa.Integer, nullable=False, 
default=600),
+        sa.Column('updated_at', sa.Integer, nullable=True),
     )
 
     projects = sautils.Table(

diff --git a/buildbot_gentoo_ci/db/repositorys.py 
b/buildbot_gentoo_ci/db/repositorys.py
index 6a4ef83..8806dd1 100644
--- a/buildbot_gentoo_ci/db/repositorys.py
+++ b/buildbot_gentoo_ci/db/repositorys.py
@@ -80,6 +80,16 @@ class 
RepositorysConnectorComponent(base.DBConnectorComponent):
         res = yield self.db.pool.do(thd)
         return res
 
+    @defer.inlineCallbacks
+    def updateGitPollerTime(self, uuid):
+        updated_at = int(self.master.reactor.seconds())
+        def thd(conn, no_recurse=False):
+                tbl = self.db.model.repositorys_gitpullers
+                q = tbl.update()
+                q = q.where(tbl.c.repository_uuid == uuid)
+                conn.execute(q, updated_at=updated_at)
+        yield self.db.pool.do(thd)
+
     def _row2dict(self, conn, row):
         return dict(
             uuid=row.uuid,
@@ -101,5 +111,6 @@ class 
RepositorysConnectorComponent(base.DBConnectorComponent):
             branches=row.branches,
             poll_interval=row.poll_interval,
             poll_random_delay_min=row.poll_random_delay_min,
-            poll_random_delay_max=row.poll_random_delay_max
+            poll_random_delay_max=row.poll_random_delay_max,
+            updated_at=row.updated_at
             )

diff --git a/buildbot_gentoo_ci/steps/portage.py 
b/buildbot_gentoo_ci/steps/portage.py
index 7822af1..2308617 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -353,6 +353,36 @@ class SetEnvDefault(BuildStep):
         yield self.build.addStepsAfterCurrentStep(aftersteps_list)
         return SUCCESS
 
+class CheckPathLocal(BuildStep):
+
+    name = 'CheckPathLocal'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.portage_path = yield os.path.join('etc', 'portage')
+        self.profile_path = yield os.path.join(self.portage_path, 
'make.profile')
+        self.repos_path = yield os.path.join(self.portage_path, 'repos.conf')
+        print(os.getcwd())
+        print(self.getProperty("builddir"))
+        yield os.chdir(self.getProperty("builddir"))
+        print(os.getcwd())
+        for x in [
+                self.portage_path,
+                self.profile_path,
+                self.repos_path,
+                ]:
+            if not os.path.isdir(x):
+                os.makedirs(x)
+        return SUCCESS
+
 class SetMakeProfileLocal(BuildStep):
 
     name = 'SetMakeProfileLocal'

diff --git a/buildbot_gentoo_ci/steps/repos.py 
b/buildbot_gentoo_ci/steps/repos.py
new file mode 100644
index 0000000..bc06e45
--- /dev/null
+++ b/buildbot_gentoo_ci/steps/repos.py
@@ -0,0 +1,149 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import os
+import pygit2
+
+from twisted.internet import defer
+
+from buildbot.process.buildstep import BuildStep
+from buildbot.process.results import SUCCESS
+from buildbot.process.results import FAILURE
+from buildbot.process.results import SKIPPED
+from buildbot.plugins import steps
+from buildbot.config import error as config_error
+
+class CheckPathRepositoryLocal(BuildStep):
+
+    name = 'CheckPathRepositoryLocal'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    def run(self):
+        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
+        # self.repository_basedir = 
self.gentooci.config.project['mirror_repository_basedir']
+        repository_basedir = '/home/repos2/'
+        self.setProperty("repository_basedir", repository_basedir, 
'repository_basedir')
+        if os.path.isdir(repository_basedir):
+            return SUCCESS
+        return FAILURE
+
+class CheckRepository(BuildStep):
+
+    name = 'CheckRepository'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, step=None, **kwargs):
+        self.step = step
+        super().__init__(**kwargs)
+
+    # Origin: 
https://github.com/MichaelBoselowitz/pygit2-examples/blob/master/examples.py#L54
+    # Modifyed by Gentoo Authors.
+    def gitPull(self, repo, remote_name='origin', branch='master'):
+        for remote in repo.remotes:
+            if remote.name == remote_name:
+                remote.fetch()
+                remote_master_id = 
repo.lookup_reference('refs/remotes/origin/%s' % (branch)).target
+                print(remote_master_id)
+                merge_result, _ = repo.merge_analysis(remote_master_id)
+                print(merge_result)
+                # Up to date, do nothing
+                if merge_result & pygit2.GIT_MERGE_ANALYSIS_UP_TO_DATE:
+                    print('UP_TO_DATE')
+                    return None
+                # We can just fastforward
+                elif merge_result & pygit2.GIT_MERGE_ANALYSIS_FASTFORWARD:
+                    print('FASTFORWARD')
+                    repo.checkout_tree(repo.get(remote_master_id))
+                    try:
+                        master_ref = repo.lookup_reference('refs/heads/%s' % 
(branch))
+                        master_ref.set_target(remote_master_id)
+                    except KeyError:
+                        repo.create_branch(branch, repo.get(remote_master_id))
+                    repo.head.set_target(remote_master_id)
+                    return True
+                elif merge_result & pygit2.GIT_MERGE_ANALYSIS_NORMAL:
+                    print('NORMAL')
+                    repo.merge(remote_master_id)
+                    if repo.index.conflicts is not None:
+                        for conflict in repo.index.conflicts:
+                            print('Conflicts found in:', conflict[0].path)
+                        raise AssertionError('Conflicts, ahhhhh!!')
+
+                    user = repo.default_signature
+                    tree = repo.index.write_tree()
+                    commit = repo.create_commit('HEAD',
+                                            user,
+                                            user,
+                                            'Merge!',
+                                            tree,
+                                            [repo.head.target, 
remote_master_id])
+                    # We need to do this or git CLI will think we are still 
merging.
+                    repo.state_cleanup()
+                    return True
+                else:
+                    raise AssertionError('Unknown merge analysis result')
+        return True
+
+    @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 checkRepos(self, repository_data):
+        repository_path = yield 
os.path.join(self.getProperty("repository_basedir"), repository_data['name'])
+        repo_path = yield pygit2.discover_repository(repository_path)
+        print(repo_path)
+        if repo_path is None:
+            yield pygit2.clone_repository(repository_data['mirror_url'], 
repository_path)
+            success = True
+        else:
+            repo = yield pygit2.Repository(repo_path)
+            commit = repo.get(repo.head.target)
+            success = yield self.gitPull(repo)
+            print(commit.hex)
+            print(commit.commit_time)
+        # chmod needed for ebuilds metadata portage.GetAuxMetadata step
+        yield self.setchmod(repository_path)
+        return success
+
+    @defer.inlineCallbacks
+    def run(self):
+        #FIXME: # move som of it to buildfactory update_repo_check
+        if self.step == 'profile':
+            if self.getProperty("profile_repository_uuid") == 
self.getProperty("repository_uuid"):
+                return SKIPPED
+            repository_uuid = self.getProperty("profile_repository_uuid")
+        else:
+            repository_uuid = self.getProperty("repository_uuid")
+        #---
+        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
+        repository_data = yield 
self.gentooci.db.repositorys.getRepositoryByUuid(repository_uuid)
+        self.descriptionSuffix = repository_data['name']
+        if repository_data['type'] == 'gitpuller':
+            Poller_data = yield 
self.gentooci.db.repositorys.getGitPollerByUuid(repository_uuid)
+        print(Poller_data['updated_at'])
+        print(self.getProperty("commit_time"))
+        if Poller_data['updated_at'] > self.getProperty("commit_time"):
+            return SKIPPED
+        success = yield self.checkRepos(repository_data)
+        if success is None:
+            return SKIPPED
+        if not success:
+            return FAILURE
+        if repository_data['type'] == 'gitpuller':
+            yield 
self.gentooci.db.repositorys.updateGitPollerTime(repository_uuid)
+        return SUCCESS

diff --git a/buildbot_gentoo_ci/steps/update_db.py 
b/buildbot_gentoo_ci/steps/update_db.py
index 3594c1b..b19d0e7 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -1,12 +1,7 @@
 # Copyright 2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-import os
-import pygit2
-
-from portage import config as portage_config
 from portage.versions import catpkgsplit
-from portage.util import getconfig
 
 from twisted.internet import defer
 from twisted.python import log
@@ -34,7 +29,7 @@ class GetDataGentooCiProject(BuildStep):
             return FAILURE
         print(self.project_data)
         print(self.profile_repository_data)
-        print(self.getProperty("git_changes"))
+        print(self.getProperty("git_change"))
         print(self.getProperty("repository"))
         repository = False
         self.repository_data = False
@@ -49,133 +44,31 @@ class GetDataGentooCiProject(BuildStep):
         self.setProperty("repository_data", self.repository_data, 
'repository_data')
         return SUCCESS
 
-class CheckPath(BuildStep):
-
-    name = 'CheckPath'
-    description = 'Running'
-    descriptionDone = 'Ran'
-    descriptionSuffix = None
-    haltOnFailure = True
-    flunkOnFailure = True
-
+class TriggerUpdateRepositorys(BuildStep):
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
 
-    @defer.inlineCallbacks
-    def run(self):
-        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
-        self.repository_basedir = 
self.gentooci.config.project['repository_basedir']
-        self.portage_path = yield os.path.join('etc', 'portage')
-        self.profile_path = yield os.path.join(self.portage_path, 
'make.profile')
-        self.repos_path = yield os.path.join(self.portage_path, 'repos.conf')
-        print(os.getcwd())
-        print(self.getProperty("builddir"))
-        yield os.chdir(self.getProperty("builddir"))
-        success = True
-        print(os.getcwd())
-        for x in [
-                self.portage_path,
-                self.profile_path,
-                self.repos_path,
-                self.repository_basedir
-                ]:
-            if not os.path.isdir(x):
-                os.makedirs(x)
-        return SUCCESS
-
-class UpdateRepos(BuildStep):
-
-    name = 'UpdateRepos'
+    name = 'TriggerUpdateRepositorys'
     description = 'Running'
     descriptionDone = 'Ran'
     descriptionSuffix = None
     haltOnFailure = True
     flunkOnFailure = True
 
-    def __init__(self, **kwargs):
-        super().__init__(**kwargs)
-
-    # Origin: 
https://github.com/MichaelBoselowitz/pygit2-examples/blob/master/examples.py#L54
-    # Modifyed by Gentoo Authors.
-    def gitPull(self, repo, remote_name='origin', branch='master'):
-        for remote in repo.remotes:
-            if remote.name == remote_name:
-                remote.fetch()
-                remote_master_id = 
repo.lookup_reference('refs/remotes/origin/%s' % (branch)).target
-                print(remote_master_id)
-                merge_result, _ = repo.merge_analysis(remote_master_id)
-                print(merge_result)
-                # Up to date, do nothing
-                if merge_result & pygit2.GIT_MERGE_ANALYSIS_UP_TO_DATE:
-                    print('UP_TO_DATE')
-                    return
-                # We can just fastforward
-                elif merge_result & pygit2.GIT_MERGE_ANALYSIS_FASTFORWARD:
-                    print('FASTFORWARD')
-                    repo.checkout_tree(repo.get(remote_master_id))
-                    try:
-                        master_ref = repo.lookup_reference('refs/heads/%s' % 
(branch))
-                        master_ref.set_target(remote_master_id)
-                    except KeyError:
-                        repo.create_branch(branch, repo.get(remote_master_id))
-                    repo.head.set_target(remote_master_id)
-                elif merge_result & pygit2.GIT_MERGE_ANALYSIS_NORMAL:
-                    print('NORMAL')
-                    repo.merge(remote_master_id)
-                    if repo.index.conflicts is not None:
-                        for conflict in repo.index.conflicts:
-                            print('Conflicts found in:', conflict[0].path)
-                        raise AssertionError('Conflicts, ahhhhh!!')
-
-                    user = repo.default_signature
-                    tree = repo.index.write_tree()
-                    commit = repo.create_commit('HEAD',
-                                            user,
-                                            user,
-                                            'Merge!',
-                                            tree,
-                                            [repo.head.target, 
remote_master_id])
-                    # We need to do this or git CLI will think we are still 
merging.
-                    repo.state_cleanup()
-                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 = 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)
-        if repo_path is None:
-            yield 
pygit2.clone_repository(self.getProperty("profile_repository_data")['mirror_url'],
 self.profile_repository_path)
-        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)
-            if repo_path is None:
-                yield 
pygit2.clone_repository(self.getProperty("profile_repository_data")['mirror_url'],
 self.repository_path)
-            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')
+        yield self.build.addStepsAfterCurrentStep([
+            steps.Trigger(
+                        schedulerNames=['update_repo_check'],
+                        waitForFinish=True,
+                        updateSourceStamp=False,
+                        set_properties={
+                            'profile_repository_uuid' : 
self.getProperty("profile_repository_data")['uuid'],
+                            'repository_uuid' : 
self.getProperty("repository_data")['uuid'],
+                            'commit_time' : 
self.getProperty("git_change")['timestamp'],
+                        }
+            )
+        ])
         return SUCCESS
 
 class TriggerCheckForCPV(BuildStep):
@@ -191,43 +84,41 @@ class TriggerCheckForCPV(BuildStep):
 
     @defer.inlineCallbacks
     def run(self):
-        self.git_changes = self.getProperty("git_changes")
-        print(self.git_changes)
-        # check if git_change is a string or a list
-        if not isinstance(self.git_changes, list):
+        change_data = self.getProperty("git_change")
+        # check if git_change is a dict
+        if not isinstance(change_data, dict):
             return FAILURE
         addStepUpdateCPVData = []
-        for change_data in self.git_changes:
-            # make a trigger for all cpv in the list
-            for cpv in change_data['cpvs']:
-                self.success = True
-                if change_data['repository'] != 
self.getProperty("repository_data")['name']:
-                    log.msg("%s don't match" % change_data['repository'])
-                    self.success = False
-                # Trigger cpv builds and update db if we are working with 
ebuilds
-                # check that cpv is valied
-                if catpkgsplit(cpv) is None:
-                    log.msg("%s is not vaild package name" % cpv)
-                    self.success = False
-                if self.success:
-                    revision_data = {}
-                    revision_data['author'] = change_data['author']
-                    revision_data['committer']  = change_data['committer']
-                    revision_data['comments'] = change_data['comments']
-                    revision_data['revision'] = change_data['revision']
-                    addStepUpdateCPVData.append(
-                        steps.Trigger(
-                            schedulerNames=['update_cpv_data'],
-                            waitForFinish=False,
-                            updateSourceStamp=False,
-                            set_properties={
-                                'cpv' : cpv,
-                                'project_data' : 
self.getProperty("project_data"),
-                                'repository_data' : 
self.getProperty("repository_data"),
-                                'revision_data' : revision_data,
-                            }
-                        )
+        # make a trigger for all cpv in the list
+        for cpv in change_data['cpvs']:
+            self.success = True
+            if change_data['repository'] != 
self.getProperty("repository_data")['name']:
+                log.msg("%s don't match" % change_data['repository'])
+                self.success = False
+            # Trigger cpv builds and update db if we are working with ebuilds
+            # check that cpv is valied
+            if catpkgsplit(cpv) is None:
+                log.msg("%s is not vaild package name" % cpv)
+                self.success = False
+            if self.success:
+                revision_data = {}
+                revision_data['author'] = change_data['author']
+                revision_data['committer']  = change_data['committer']
+                revision_data['comments'] = change_data['comments']
+                revision_data['revision'] = change_data['revision']
+                addStepUpdateCPVData.append(
+                    steps.Trigger(
+                        schedulerNames=['update_cpv_data'],
+                        waitForFinish=False,
+                        updateSourceStamp=False,
+                        set_properties={
+                            'cpv' : cpv,
+                            'project_data' : self.getProperty("project_data"),
+                            'repository_data' : 
self.getProperty("repository_data"),
+                            'revision_data' : revision_data,
+                        }
                     )
+                )
         print(addStepUpdateCPVData)
         yield self.build.addStepsAfterCurrentStep(addStepUpdateCPVData)
         if self.success is False:

Reply via email to