changeset 898:638d979c6117

Polishing 'use mirrors' option Rename 'Use shared mirrors' in the UI to 'Use mirrors' as it is in git, add an ability to change mirroring strategy (disable mirrors sharing on the agent). Unfortunately cannot change the USE_AGENT_MIRRORS property name because we already have VCS roots with the 'useSharedMirrors' prop.
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Wed, 12 Nov 2014 17:30:16 +0100
parents 45876afb22f3
children e7b716719044
files mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.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 4 files changed, 38 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java	Mon Nov 10 21:48:09 2014 +0100
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java	Wed Nov 12 17:30:16 2014 +0100
@@ -33,6 +33,9 @@
 
   private static final String PULL_TIMEOUT_SECONDS = "teamcity.hg.pull.timeout.seconds";
   private static final int DEFAULT_PULL_TIMEOUT_SECONDS = 3600;
+  public static final String VCS_ROOT_MIRRORS_STRATEGY = "teamcity.hg.mirrorStrategy";
+  public static final String VCS_ROOT_MIRRORS_STRATEGY_SHARED_MIRRORS = "sharedMirrors";
+  public static final String VCS_ROOT_MIRRORS_STRATEGY_MIRRORS_ONLY = "mirrors";
 
   private final BuildAgentConfiguration myAgentConfig;
 
@@ -41,8 +44,15 @@
   }
 
   public boolean isUseLocalMirrors(@NotNull AgentRunningBuild build, @NotNull VcsRoot root) {
-    return Boolean.valueOf(build.getSharedConfigParameters().get("teamcity.hg.use.local.mirrors"))
-        || shareLocalMirrors(build, root);
+    String buildValue = build.getSharedConfigParameters().get("teamcity.hg.use.local.mirrors");
+    if (!StringUtil.isEmpty(buildValue))
+      return Boolean.parseBoolean(buildValue);
+    HgVcsRoot hgRoot = new HgVcsRoot(root);
+    Boolean rootValue = hgRoot.getUseAgentMirrors();
+    String mirrorStrategy = getMirrorStrategy(build);
+    if (rootValue != null && rootValue && (VCS_ROOT_MIRRORS_STRATEGY_SHARED_MIRRORS.equals(mirrorStrategy) || VCS_ROOT_MIRRORS_STRATEGY_MIRRORS_ONLY.equals(mirrorStrategy)))
+      return true;
+    return false;
   }
 
   @SuppressWarnings("ConstantConditions")
@@ -51,13 +61,22 @@
     if (!StringUtil.isEmpty(buildValue))
       return Boolean.parseBoolean(buildValue);
     HgVcsRoot hgRoot = new HgVcsRoot(root);
-    Boolean rootValue = hgRoot.getUseSharedMirrors();
-    if (rootValue != null)
-      return rootValue;
+    Boolean rootValue = hgRoot.getUseAgentMirrors();
+    String mirrorStrategy = getMirrorStrategy(build);
+    if (rootValue != null && rootValue && VCS_ROOT_MIRRORS_STRATEGY_SHARED_MIRRORS.equals(mirrorStrategy))
+      return true;
     return false;
   }
 
   @NotNull
+  private String getMirrorStrategy(@NotNull AgentRunningBuild build) {
+    String strategy = build.getSharedConfigParameters().get(VCS_ROOT_MIRRORS_STRATEGY);
+    if (!StringUtil.isEmpty(strategy))
+      return strategy;
+    return VCS_ROOT_MIRRORS_STRATEGY_SHARED_MIRRORS;
+  }
+
+  @NotNull
   public File getCachesDir() {
     return myAgentConfig.getCacheDirectory("mercurial");
   }
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Constants.java	Mon Nov 10 21:48:09 2014 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Constants.java	Wed Nov 12 17:30:16 2014 +0100
@@ -39,5 +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";
+  String USE_AGENT_MIRRORS = "useSharedMirrors";
 }
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/HgVcsRoot.java	Mon Nov 10 21:48:09 2014 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/HgVcsRoot.java	Wed Nov 12 17:30:16 2014 +0100
@@ -49,7 +49,7 @@
   private final PurgePolicy myPurgePolicy;
   private final boolean myIgnoreMissingDefaultBranch;
   private final String myCustomHgConfig;
-  private final Boolean myUseSharedMirrors;
+  private final Boolean myUseAgentMirrors;
 
   public HgVcsRoot(@NotNull final VcsRoot vcsRoot) {
     this(vcsRoot.getProperties());
@@ -71,12 +71,12 @@
     myPurgePolicy = readPurgePolicy(vcsRootProperties);
     myIgnoreMissingDefaultBranch = Boolean.valueOf(getProperty(Constants.IGNORE_MISSING_DEFAULT_BRANCH, "false"));
     myCustomHgConfig = getProperty(Constants.CUSTOM_HG_CONFIG_PROP, "");
-    myUseSharedMirrors = readUseSharedMirrors();
+    myUseAgentMirrors = readUseSharedMirrors();
   }
 
   @Nullable
   private Boolean readUseSharedMirrors() {
-    String prop = getProperty(Constants.USE_SHARED_MIRRORS);
+    String prop = getProperty(Constants.USE_AGENT_MIRRORS);
     if (StringUtil.isEmpty(prop))
       return null;
     return Boolean.parseBoolean(prop);
@@ -224,8 +224,8 @@
   }
 
   @Nullable
-  public Boolean getUseSharedMirrors() {
-    return myUseSharedMirrors;
+  public Boolean getUseAgentMirrors() {
+    return myUseAgentMirrors;
   }
 
   public static enum PurgePolicy {
--- a/mercurial-server/resources/buildServerResources/mercurialSettings.jsp	Mon Nov 10 21:48:09 2014 +0100
+++ b/mercurial-server/resources/buildServerResources/mercurialSettings.jsp	Wed Nov 12 17:30:16 2014 +0100
@@ -125,8 +125,14 @@
       </td>
     </tr>
     <tr class="advancedSetting">
-      <th><label for="useSharedMirrors">Use shared mirrors:</label></th>
-      <td><props:checkboxProperty name="useSharedMirrors"/></td>
+      <th><label for="useSharedMirrors">Use mirrors:</label></th>
+      <td>
+        <props:checkboxProperty name="useSharedMirrors"/>
+        <div class="smallNote" style="margin: 0" >
+          When this option is enabled TeamCity creates a separate clone of the repository on each agent
+          and use it in checkout directory via mercurial share extension.
+        </div>
+      </td>
     </tr>
   </l:settingsGroup>
 </table>