changeset 896:4e29b1244707

Add VCS root option to use shared mirrors during agent-side checkout
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Fri, 07 Nov 2014 18:07:06 +0100
parents 5c981a92e658
children 45876afb22f3
files mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Constants.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/HgVcsRoot.java mercurial-server/resources/buildServerResources/mercurialSettings.jsp
diffstat 7 files changed, 37 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java	Fri Nov 07 18:07:06 2014 +0100
@@ -17,6 +17,7 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
 
 import jetbrains.buildServer.agent.AgentRunningBuild;
+import jetbrains.buildServer.vcs.VcsRoot;
 import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
@@ -26,9 +27,9 @@
  */
 public interface AgentPluginConfig extends PluginConfig {
 
-  boolean isUseLocalMirrors(@NotNull AgentRunningBuild build);
+  boolean isUseLocalMirrors(@NotNull AgentRunningBuild build, @NotNull VcsRoot root);
 
-  boolean shareLocalMirrors(@NotNull AgentRunningBuild build);
+  boolean shareLocalMirrors(@NotNull AgentRunningBuild build, @NotNull VcsRoot root);
 
   int getPullTimeout(@NotNull AgentRunningBuild build);
 
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java	Fri Nov 07 18:07:06 2014 +0100
@@ -18,7 +18,9 @@
 
 import jetbrains.buildServer.agent.AgentRunningBuild;
 import jetbrains.buildServer.agent.BuildAgentConfiguration;
+import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot;
 import jetbrains.buildServer.util.StringUtil;
+import jetbrains.buildServer.vcs.VcsRoot;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -38,18 +40,21 @@
     myAgentConfig = agentConfig;
   }
 
-  public boolean isUseLocalMirrors(@NotNull AgentRunningBuild build) {
+  public boolean isUseLocalMirrors(@NotNull AgentRunningBuild build, @NotNull VcsRoot root) {
     return Boolean.valueOf(build.getSharedConfigParameters().get("teamcity.hg.use.local.mirrors"))
-        || shareLocalMirrors(build);
+        || shareLocalMirrors(build, root);
   }
 
   @SuppressWarnings("ConstantConditions")
-  public boolean shareLocalMirrors(@NotNull AgentRunningBuild build) {
-    boolean defaultValue = false;
+  public boolean shareLocalMirrors(@NotNull AgentRunningBuild build, @NotNull VcsRoot root) {
     String buildValue = build.getSharedConfigParameters().get("teamcity.hg.shareLocalMirrors");
-    if (buildValue == null || StringUtil.isEmpty(buildValue))
-      return defaultValue;
-    return Boolean.valueOf(buildValue);
+    if (!StringUtil.isEmpty(buildValue))
+      return Boolean.parseBoolean(buildValue);
+    HgVcsRoot hgRoot = new HgVcsRoot(root);
+    Boolean rootValue = hgRoot.getUseSharedMirrors();
+    if (rootValue != null)
+      return rootValue;
+    return false;
   }
 
   @NotNull
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java	Fri Nov 07 18:07:06 2014 +0100
@@ -50,7 +50,7 @@
 
   public IncludeRuleUpdater getUpdater(@NotNull final VcsRoot vcsRoot, @NotNull final CheckoutRules checkoutRules, @NotNull final String toVersion, @NotNull final File checkoutDirectory, @NotNull final AgentRunningBuild build, boolean cleanCheckoutRequested) throws VcsException {
     MercurialIncludeRuleUpdater updater;
-    if (myConfig.shareLocalMirrors(build)) {
+    if (myConfig.shareLocalMirrors(build, vcsRoot)) {
       updater = new SharingMercurialUpdater(myConfig, myMirrorManager, myRepoFactory, vcsRoot, toVersion, build);
     } else {
       updater = new MercurialIncludeRuleUpdater(myConfig, myMirrorManager, myRepoFactory, vcsRoot, toVersion, build);
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java	Fri Nov 07 18:07:06 2014 +0100
@@ -70,7 +70,7 @@
     myAuthSettings = myRoot.getAuthSettings();
     myToVersion = toVersion;
     myLogger = build.getBuildLogger();
-    myUseLocalMirrors = pluginConfig.isUseLocalMirrors(build);
+    myUseLocalMirrors = pluginConfig.isUseLocalMirrors(build, root);
     myPullTimeout = pluginConfig.getPullTimeout(build);
     myUseTraceback = pluginConfig.runWithTraceback(build);
     myProfile = pluginConfig.runWithProfile(build);
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Constants.java	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Constants.java	Fri Nov 07 18:07:06 2014 +0100
@@ -39,4 +39,5 @@
   String IGNORE_MISSING_DEFAULT_BRANCH = "IGNORE_MISSING_DEFAULT_BRANCH";
   String CUSTOM_HG_CONFIG_PROP = "customHgConfig";
   String TEAMCITY_HG_CONFIG_FILE_NAME = "teamcity";
+  String USE_SHARED_MIRRORS = "useSharedMirrors";
 }
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/HgVcsRoot.java	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/HgVcsRoot.java	Fri Nov 07 18:07:06 2014 +0100
@@ -49,6 +49,7 @@
   private final PurgePolicy myPurgePolicy;
   private final boolean myIgnoreMissingDefaultBranch;
   private final String myCustomHgConfig;
+  private final Boolean myUseSharedMirrors;
 
   public HgVcsRoot(@NotNull final VcsRoot vcsRoot) {
     this(vcsRoot.getProperties());
@@ -70,6 +71,15 @@
     myPurgePolicy = readPurgePolicy(vcsRootProperties);
     myIgnoreMissingDefaultBranch = Boolean.valueOf(getProperty(Constants.IGNORE_MISSING_DEFAULT_BRANCH, "false"));
     myCustomHgConfig = getProperty(Constants.CUSTOM_HG_CONFIG_PROP, "");
+    myUseSharedMirrors = readUseSharedMirrors();
+  }
+
+  @Nullable
+  private Boolean readUseSharedMirrors() {
+    String prop = getProperty(Constants.USE_SHARED_MIRRORS);
+    if (StringUtil.isEmpty(prop))
+      return null;
+    return Boolean.parseBoolean(prop);
   }
 
   @NotNull
@@ -213,6 +223,11 @@
     return myCustomHgConfig;
   }
 
+  @Nullable
+  public Boolean getUseSharedMirrors() {
+    return myUseSharedMirrors;
+  }
+
   public static enum PurgePolicy {
     DONT_RUN,
     PURGE_UNKNOWN,
--- a/mercurial-server/resources/buildServerResources/mercurialSettings.jsp	Fri Nov 07 17:29:47 2014 +0100
+++ b/mercurial-server/resources/buildServerResources/mercurialSettings.jsp	Fri Nov 07 18:07:06 2014 +0100
@@ -124,5 +124,9 @@
         </props:selectProperty>
       </td>
     </tr>
+    <tr class="advancedSetting">
+      <th><label for="useSharedMirrors">Use shared mirrors:</label></th>
+      <td><props:checkboxProperty name="useSharedMirrors"/></td>
+    </tr>
   </l:settingsGroup>
 </table>