changeset 565:844fc8f99c29 Faradi-7.1.x

Add ability to limit number of nodes in DAG
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Wed, 06 Mar 2013 16:56:57 +0400
parents d012388935fb
children a7719626703d 7ca3303cfc9e
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LoadDagCommand.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java
diffstat 6 files changed, 27 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LoadDagCommand.java	Wed Mar 06 15:49:37 2013 +0400
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LoadDagCommand.java	Wed Mar 06 16:56:57 2013 +0400
@@ -12,6 +12,7 @@
 public class LoadDagCommand extends VcsRootCommand {
 
   private final File myDagLogTemplate;
+  private int myMaxDagNodesCount;
 
   public LoadDagCommand(@NotNull CommandSettings commandSettings,
                         @NotNull String hgPath,
@@ -22,12 +23,18 @@
     myDagLogTemplate = dagLogTemplate;
   }
 
+  public void setMaxDagNodesCount(int maxDagNodesCount) {
+    myMaxDagNodesCount = maxDagNodesCount;
+  }
+
   @NotNull
   public List<Pair<String, String>> call() throws VcsException {
     List<Pair<String, String>> edges = new ArrayList<Pair<String, String>>();
     MercurialCommandLine cli = createCommandLine();
     cli.addParameter("log");
     cli.addParameter("--style=" + myDagLogTemplate.getAbsolutePath());
+    if (myMaxDagNodesCount > 0)
+      cli.addParameters("--limit", String.valueOf(myMaxDagNodesCount));
     CommandResult res = runCommand(cli);
     String output = res.getStdout();
     String fromNode = null;
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java	Wed Mar 06 15:49:37 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java	Wed Mar 06 16:56:57 2013 +0400
@@ -99,9 +99,13 @@
         dag = repo.loadDag();
         myDags.put(rootKey, dag);
       }
-      FindIntervalVisitor visitor = new FindIntervalVisitor(dag, myFromState.getBranchRevisions().values());
-      dag.breadthFirstSearch(toRevision, visitor);
-      fromRevisions.addAll(visitor.getEndpoints());
+      if (dag.containsNode(toRevision)) {
+        FindIntervalVisitor visitor = new FindIntervalVisitor(dag, myFromState.getBranchRevisions().values());
+        dag.breadthFirstSearch(toRevision, visitor);
+        fromRevisions.addAll(visitor.getEndpoints());
+      } else {
+        fromRevisions.add(fromRevision);
+      }
     } else {
       fromRevisions.add(fromRevision);
     }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Wed Mar 06 15:49:37 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Wed Mar 06 16:56:57 2013 +0400
@@ -89,7 +89,9 @@
 
   @NotNull
   public DAG<String> loadDag() throws VcsException {
-    List<Pair<String, String>> edges = new LoadDagCommand(myCommandSettingsFactory.create(), myHgPath, myWorkingDir, myAuthSettings, myDagTemplate).call();
+    LoadDagCommand loadDag = new LoadDagCommand(myCommandSettingsFactory.create(), myHgPath, myWorkingDir, myAuthSettings, myDagTemplate);
+    loadDag.setMaxDagNodesCount(myConfig.getMaxDagNodesCount());
+    List<Pair<String, String>> edges = loadDag.call();
     return DAGs.createFromEdges(edges);
   }
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java	Wed Mar 06 15:49:37 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java	Wed Mar 06 16:56:57 2013 +0400
@@ -21,4 +21,6 @@
 
   @NotNull
   Set<Long> getRevsetParentRootIds();
+
+  int getMaxDagNodesCount();
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java	Wed Mar 06 15:49:37 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java	Wed Mar 06 16:56:57 2013 +0400
@@ -51,6 +51,10 @@
     return timeout > 0 ? timeout : DEFAULT_PULL_TIMEOUT_SECONDS;
   }
 
+  public int getMaxDagNodesCount() {
+    return TeamCityProperties.getInteger("teamcity.hg.maxDagNodesCount", 0);
+  }
+
   @NotNull
   public Set<Long> getRevsetParentRootIds() {
     String parentRootIds = TeamCityProperties.getProperty("teamcity.hg.use.revsets.root.ids", "");
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java	Wed Mar 06 15:49:37 2013 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java	Wed Mar 06 16:56:57 2013 +0400
@@ -47,6 +47,10 @@
       public Set<Long> getRevsetParentRootIds() {
         return new HashSet<Long>();
       }
+
+      public int getMaxDagNodesCount() {
+        return 0;
+      }
     };
   }