This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-10211
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit 1ca04f3828ec5636591b62055832efc9dae1013d
Author: Dmitriy Pavlov <dpav...@apache.org>
AuthorDate: Sat Nov 10 20:02:55 2018 +0300

    IGNITE-10211: Support triggering non-master branches
---
 .../org/apache/ignite/ci/conf/BranchesTracked.java |  10 +-
 .../org/apache/ignite/ci/jobs/CheckQueueJob.java   | 104 ++++++++++++---------
 2 files changed, 67 insertions(+), 47 deletions(-)

diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
index af02282..94d1b25 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
@@ -17,10 +17,7 @@
 
 package org.apache.ignite.ci.conf;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -30,6 +27,7 @@ public class BranchesTracked {
     /** Branches. */
     private List<BranchTracked> branches = new ArrayList<>();
 
+
     /**
      * @return list of internal identifiers of branch.
      */
@@ -55,4 +53,8 @@ public class BranchesTracked {
     public Set<String> getServerIds() {
         return 
branches.stream().flatMap(BranchTracked::getChainsStream).map(ChainAtServer::getServerId).collect(Collectors.toSet());
     }
+
+    public List<BranchTracked> getBranches() {
+        return Collections.unmodifiableList(branches);
+    }
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
index d7974e5..5f3a60e 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
@@ -25,6 +25,8 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.inject.Inject;
 import jersey.repackaged.com.google.common.base.Throwables;
 import org.apache.ignite.ci.HelperConfig;
@@ -101,29 +103,31 @@ public class CheckQueueJob implements Runnable {
             return msg;
         }
 
-        String branch = FullQueryParams.DEFAULT_TRACKED_BRANCH_NAME;
-
         //todo support several branches
-        final BranchTracked tracked = 
HelperConfig.getTrackedBranches().getBranchMandatory(branch);
+        List<BranchTracked> tracked = 
HelperConfig.getTrackedBranches().getBranches();
 
-        if (tracked == null || tracked.getChains() == null || 
tracked.getChains().isEmpty()) {
-            final String msg = "Background check queue skipped - no config 
specified for ";
-            logger.info(msg + "\"{}\".", branch);
+        if (tracked == null || tracked.isEmpty()) {
+            final String msg = "Background check queue skipped - no config set 
for tracked branches.";
+            logger.info(msg);
 
-            return msg + branch;
+            return msg;
         }
 
         int srvsChecked = 0, chainsChecked = 0;
 
-        Map<String, List<ChainAtServerTracked>> chainsBySrv = 
mapChainsByServer(tracked.getChains());
+        Map<String, List<ChainAtServerTracked>> chainsBySrv = 
mapChainsByServer(tracked);
 
         for (Map.Entry<String, List<ChainAtServerTracked>> entry : 
chainsBySrv.entrySet()) {
             String srvId = entry.getKey();
 
-            List<ChainAtServerTracked> chains = entry.getValue();
+            List<ChainAtServerTracked> chainsAll = entry.getValue();
+            List<ChainAtServerTracked> chains = chainsAll.stream()
+                    .filter(c -> Objects.equals(c.serverId, srvId))
+                    .collect(Collectors.toList());
 
             srvsChecked++;
-            chainsChecked += chains.stream().filter(c -> 
Objects.equals(c.serverId, srvId)).count();
+
+            chainsChecked += chainsAll.size();
 
             try {
                 checkQueue(srvId, chains);
@@ -180,32 +184,44 @@ public class CheckQueueJob implements Runnable {
 
         String selfLogin = creds.getUser(teamcity.serverId());
 
-        for (BuildRef ref : builds) {
-            Build build = teamcity.getBuild(ref.href);
+        StringBuilder res = new StringBuilder();
 
-            User user = build.getTriggered().getUser();
+        for (ChainAtServerTracked chain : chains) {
+            if(!Objects.equals(chain.serverId, teamcity.serverId()))
+                continue;
 
-            if (user == null) {
-                logger.info("Unable to get username for queued build {} 
(type={}).", ref.getId(), ref.buildTypeId);
+            boolean trigger = true;
+            for (BuildRef ref : builds) {
+                Build build = teamcity.getBuild(ref.href);
 
-                continue;
-            }
+                User user = build.getTriggered().getUser();
 
-            String login = user.username;
+                if (user == null) {
+                    logger.info("Unable to get username for queued build {} 
(type={}).", ref.getId(), ref.buildTypeId);
 
-            if (selfLogin.equalsIgnoreCase(login)) {
-                final String msg = MessageFormat.format("Queued build {0} was 
early triggered by me (user {1}). Will not startIgnite build.", ref.getId(), 
login);
+                    continue;
+                }
 
-                logger.info(msg);
+                String login = user.username;
 
-                return msg;
-            }
-        }
+                if (selfLogin.equalsIgnoreCase(login)
+                        && Objects.equals(ref.branchName, 
chain.branchForRest)) {
+                    final String msg
+                            = MessageFormat.format("Queued build {0} was early 
triggered " +
+                            "(user {1}, branch {2}, suite {3})." +
+                            " Will not startIgnite build.", ref.getId(), 
login, ref.branchName, ref.buildTypeId);
 
-        StringBuilder res = new StringBuilder();
+                    logger.info(msg);
 
-        for (ChainAtServerTracked chain : chains) {
-            if(!Objects.equals(chain.serverId, teamcity.serverId()))
+                    res.append(msg).append("; ");
+
+                    trigger = false;
+
+                    break;
+                }
+            }
+
+            if (!trigger)
                 continue;
 
             long curr = System.currentTimeMillis();
@@ -244,32 +260,34 @@ public class CheckQueueJob implements Runnable {
     }
 
     /**
-     * @param chains chains.
+     * @param branchesTracked Tracked branches.
      * @return Mapped chains to server identifier.
      */
-    private Map<String, List<ChainAtServerTracked>> 
mapChainsByServer(List<ChainAtServerTracked> chains) {
+    private Map<String, List<ChainAtServerTracked>> 
mapChainsByServer(List<BranchTracked> branchesTracked) {
         Map<String, List<ChainAtServerTracked>> chainsBySrv = new HashMap<>();
 
-        for (ChainAtServerTracked chain : chains) {
-            String srv = chain.serverId;
+        for(BranchTracked branchTracked: branchesTracked) {
+            for (ChainAtServerTracked chain : branchTracked.getChains()) {
+                String srv = chain.serverId;
 
-            if (!creds.hasAccess(srv)) {
-                logger.warn("Background operations credentials does not grant 
access to server \"{}\"," +
-                    " build queue trigger will not work.", srv);
+                if (!creds.hasAccess(srv)) {
+                    logger.warn("Background operations credentials does not 
grant access to server \"{}\"," +
+                            " build queue trigger will not work.", srv);
 
-                continue;
-            }
+                    continue;
+                }
 
-            if (!chain.isTriggerBuild()) {
-                logger.info("Build triggering disabled for server={}, 
suite={}, branch={}",
-                    srv, chain.getSuiteIdMandatory(), 
chain.getBranchForRestMandatory());
+                if (!chain.isTriggerBuild()) {
+                    logger.info("Build triggering disabled for server={}, 
suite={}, branch={}",
+                            srv, chain.getSuiteIdMandatory(), 
chain.getBranchForRestMandatory());
 
-                continue;
-            }
+                    continue;
+                }
 
-            logger.info("Checking queue for server {}.", srv);
+                logger.info("Checking queue for server {}.", srv);
 
-            chainsBySrv.computeIfAbsent(srv, v -> new 
ArrayList<>()).add(chain);
+                chainsBySrv.computeIfAbsent(srv, v -> new 
ArrayList<>()).add(chain);
+            }
         }
 
         return chainsBySrv;

Reply via email to