# HG changeset patch # User Dmitry Neverov # Date 1341500821 -14400 # Node ID f9bf9ec48347a2c32c3d1c9259dd9a7535d59bd0 # Parent 5d4a7174c316cacf31be0497c9b0caffbf5e0902 Option to force use of revsets for some vcs root diff -r 5d4a7174c316 -r f9bf9ec48347 mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java --- 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; } diff -r 5d4a7174c316 -r f9bf9ec48347 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java --- 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 changesets = createRepo(settings).collectChanges() + List changesets = createRepo(settings).collectChanges(settings) .fromRevision(fromCommit) .toRevision(toCommit) .call(); diff -r 5d4a7174c316 -r f9bf9ec48347 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java --- 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); + } } diff -r 5d4a7174c316 -r f9bf9ec48347 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java --- 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 getRevsetParentRootIds(); } diff -r 5d4a7174c316 -r f9bf9ec48347 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java --- 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 getRevsetParentRootIds() { + String parentRootIds = TeamCityProperties.getProperty("teamcity.hg.use.revsets.root.ids", ""); + if (isEmpty(parentRootIds)) + return emptySet(); + + Set ids = new HashSet(); + for (String parentRootId : parentRootIds.split(",")) { + try { + ids.add(Long.parseLong(parentRootId)); + } catch (Exception e) { + LOG.warn("Cannot parse rootId \"" + parentRootId + "\", ignore it"); + } + } + return ids; + } } diff -r 5d4a7174c316 -r f9bf9ec48347 mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java --- 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 getRevsetParentRootIds() { + return new HashSet(); + } }; }