changeset 456:f9bf9ec48347 Faradi-7.0.x

Option to force use of revsets for some vcs root
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Thu, 05 Jul 2012 19:07:01 +0400
parents 5d4a7174c316
children 33b9aab523af
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.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, 60 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java	Tue Jul 03 18:49:51 2012 +0400
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java	Thu Jul 05 19:07:01 2012 +0400
@@ -30,6 +30,7 @@
  */
 public class Settings {
 
+  private final VcsRoot myVcsRoot;
   private final HgPathProvider myHgPathProvider;
   private String myRepository;
   private String myHgCommandPath;
@@ -44,6 +45,7 @@
   private final AuthSettings myAuthSettings;
 
   public Settings(@NotNull final HgPathProvider hgPathProvider, @NotNull final VcsRoot vcsRoot) {
+    myVcsRoot = vcsRoot;
     myHgPathProvider = hgPathProvider;
     myRepository = vcsRoot.getProperty(Constants.REPOSITORY_PROP);
     myHgCommandPath = vcsRoot.getProperty(Constants.HG_COMMAND_PATH_PROP);
@@ -56,6 +58,11 @@
     myAuthSettings = new AuthSettings(myUsername, myPassword);
   }
 
+  @NotNull
+  public VcsRoot getVcsRoot() {
+    return myVcsRoot;
+  }
+
   public String getCustomClonePath() {
     return myCustomClonePath;
   }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Tue Jul 03 18:49:51 2012 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Thu Jul 05 19:07:01 2012 +0400
@@ -611,7 +611,7 @@
     String fromCommit = new ChangeSetRevision(fromVersion).getId();
     String toCommit = new ChangeSetRevision(toVersion).getId();
     try {
-      List<ChangeSet> changesets = createRepo(settings).collectChanges()
+      List<ChangeSet> changesets = createRepo(settings).collectChanges(settings)
               .fromRevision(fromCommit)
               .toRevision(toCommit)
               .call();
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Tue Jul 03 18:49:51 2012 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Thu Jul 05 19:07:01 2012 +0400
@@ -2,6 +2,8 @@
 
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*;
 import jetbrains.buildServer.vcs.VcsException;
+import jetbrains.buildServer.vcs.VcsRoot;
+import jetbrains.buildServer.vcs.VcsRootInstance;
 import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
@@ -40,9 +42,13 @@
   }
 
   @NotNull
-  public CollectChangesCommand collectChanges() throws VcsException {
-    if (myConfig.dontUseRevsets())
+  public CollectChangesCommand collectChanges(@NotNull Settings s) throws VcsException {
+    if (myConfig.dontUseRevsets()) {
+      VcsRoot root = s.getVcsRoot();
+      if (shouldUseRevsetsFor(root))
+        return new CollectChangesWithRevsets(this);
       return new CollectChangesNoRevsets(this, myLogNoFilesTemplate);
+    }
 
     HgVersion hgVersion = getHgVersion();
     if (hgVersion.isEqualsOrGreaterThan(REVSET_HG_VERSION)) {
@@ -55,4 +61,11 @@
   private HgVersion getHgVersion() throws VcsException {
     return version().call();
   }
+
+  private boolean shouldUseRevsetsFor(@NotNull VcsRoot root) {
+    if (!(root instanceof VcsRootInstance))
+      return false;
+    long parentId = ((VcsRootInstance) root).getParentId();
+    return myConfig.getRevsetParentRootIds().contains(parentId);
+  }
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java	Tue Jul 03 18:49:51 2012 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java	Thu Jul 05 19:07:01 2012 +0400
@@ -1,7 +1,10 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
 
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.Set;
+
 /**
  * @author dmitry.neverov
  */
@@ -17,4 +20,7 @@
   public boolean dontUseRevsets();
 
   public boolean checkRemoteRepositoryUpdateBeforePull();
+
+  @NotNull
+  Set<Long> getRevsetParentRootIds();
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java	Tue Jul 03 18:49:51 2012 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java	Thu Jul 05 19:07:01 2012 +0400
@@ -1,17 +1,24 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
 
+import com.intellij.openapi.diagnostic.Logger;
 import jetbrains.buildServer.serverSide.ServerPaths;
 import jetbrains.buildServer.serverSide.TeamCityProperties;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.intellij.openapi.util.text.StringUtil.isEmpty;
+import static java.util.Collections.emptySet;
 
 /**
  * @author dmitry.neverov
  */
 public class ServerPluginConfigImpl implements ServerPluginConfig {
 
+  private static final Logger LOG = Logger.getInstance(ServerPluginConfigImpl.class.getName());
   private static final String PULL_TIMEOUT_SECONDS = "teamcity.hg.pull.timeout.seconds";
   public static final int DEFAULT_PULL_TIMEOUT_SECONDS = 3600;
 
@@ -47,4 +54,21 @@
   public boolean checkRemoteRepositoryUpdateBeforePull() {
     return TeamCityProperties.getBoolean("teamcity.hg.check.repository.updated.before.pull");
   }
+
+  @NotNull
+  public Set<Long> getRevsetParentRootIds() {
+    String parentRootIds = TeamCityProperties.getProperty("teamcity.hg.use.revsets.root.ids", "");
+    if (isEmpty(parentRootIds))
+      return emptySet();
+
+    Set<Long> ids = new HashSet<Long>();
+    for (String parentRootId : parentRootIds.split(",")) {
+      try {
+        ids.add(Long.parseLong(parentRootId));
+      } catch (Exception e) {
+        LOG.warn("Cannot parse rootId \"" + parentRootId + "\", ignore it");
+      }
+    }
+    return ids;
+  }
 }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java	Tue Jul 03 18:49:51 2012 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java	Thu Jul 05 19:07:01 2012 +0400
@@ -3,6 +3,8 @@
 import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
 
 /**
  * @author dmitry.neverov
@@ -45,6 +47,11 @@
       public boolean checkRemoteRepositoryUpdateBeforePull() {
         return myCheckRemoteRepositoryUpdatedBeforePull;
       }
+
+      @NotNull
+      public Set<Long> getRevsetParentRootIds() {
+        return new HashSet<Long>();
+      }
     };
   }