Mercurial > hg > mercurial
changeset 329:ef091b782acc Eluru-6.5.x
Add ability to specify timeout for pull operation (teamcity.hg.pull.timeout.seconds)
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java Fri Oct 28 17:55:04 2011 +0300 @@ -0,0 +1,10 @@ +package jetbrains.buildServer.buildTriggers.vcs.mercurial; + +/** + * @author dmitry.neverov + */ +public interface AgentPluginConfig extends PluginConfig { + + boolean isUseLocalMirrors(); + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java Fri Oct 28 17:55:04 2011 +0300 @@ -0,0 +1,46 @@ +package jetbrains.buildServer.buildTriggers.vcs.mercurial; + +import jetbrains.buildServer.agent.AgentRunningBuild; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author dmitry.neverov + */ +public class AgentPluginConfigImpl implements AgentPluginConfig { + + private static final String PULL_TIMEOUT_SECONDS = "teamcity.hg.pull.timeout.seconds"; + private final int DEFAULT_PULL_TIMEOUT_SECONDS = 3600; + + private final AgentRunningBuild myBuild; + + public AgentPluginConfigImpl(@NotNull AgentRunningBuild build) { + myBuild = build; + } + + public boolean isUseLocalMirrors() { + return "true".equals(myBuild.getSharedConfigParameters().get("teamcity.hg.use.local.mirrors")); + } + + public int getPullTimeout() { + Integer timeout = parseTimeout(myBuild.getSharedConfigParameters().get(PULL_TIMEOUT_SECONDS)); + if (timeout != null) + return timeout; + return DEFAULT_PULL_TIMEOUT_SECONDS; + } + + @Nullable + public Integer parseTimeout(@Nullable String timeoutStr) { + if (timeoutStr == null) + return null; + try { + int timeout = Integer.parseInt(timeoutStr); + if (timeout > 0) + return timeout; + else + return null; + } catch (NumberFormatException e) { + return null; + } + } +}
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java Thu Sep 15 12:25:37 2011 +0400 +++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java Fri Oct 28 17:55:04 2011 +0300 @@ -45,17 +45,17 @@ } 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 { + final AgentPluginConfig config = new AgentPluginConfigImpl(build); final BuildProgressLogger logger = build.getBuildLogger(); - final boolean useLocalMirrors = isUseLocalMirrors(build); return new IncludeRuleUpdater() { public void process(@NotNull final IncludeRule includeRule, @NotNull final File workingDir) throws VcsException { try { checkRuleIsValid(includeRule); Settings settings = new Settings(vcsRoot); - if (useLocalMirrors) { - updateLocalMirror(vcsRoot, logger); + if (config.isUseLocalMirrors()) { + updateLocalMirror(vcsRoot, logger, config); } - updateRepository(workingDir, settings, logger, useLocalMirrors); + updateRepository(workingDir, settings, logger, config); updateWorkingDir(settings, workingDir, toVersion, logger); } catch (Exception e) { if (e instanceof VcsException) @@ -82,11 +82,6 @@ return this; } - private boolean isUseLocalMirrors(AgentRunningBuild build) { - String value = build.getSharedConfigParameters().get("teamcity.hg.use.local.mirrors"); - return "true".equals(value); - } - private void initRepository(File workingDir, Settings settings, BuildProgressLogger logger, boolean useLocalMirrors) throws VcsException { try { String defaultPullUrl = getDefaultPullUrl(settings, useLocalMirrors); @@ -98,15 +93,15 @@ } } - private void updateRepository(File workingDir, Settings settings, BuildProgressLogger logger, boolean useLocalMirrors) throws VcsException, IOException { + private void updateRepository(File workingDir, Settings settings, BuildProgressLogger logger, AgentPluginConfig config) throws VcsException, IOException { if (!Settings.isValidRepository(workingDir)) { - initRepository(workingDir, settings, logger, useLocalMirrors); + initRepository(workingDir, settings, logger, config.isUseLocalMirrors()); } else { - ensureUseRightRepository(workingDir, settings, logger, useLocalMirrors); + ensureUseRightRepository(workingDir, settings, logger, config.isUseLocalMirrors()); } - String defaultPullUrl = getDefaultPullUrl(settings, useLocalMirrors); + String defaultPullUrl = getDefaultPullUrl(settings, config.isUseLocalMirrors()); logger.message("Start pulling changes from " + removePrivateData(defaultPullUrl, Collections.singleton(settings.getPassword()))); - new PullCommand(settings, workingDir).execute(); + new PullCommand(settings, workingDir).execute(config.getPullTimeout()); logger.message("Changes successfully pulled"); } @@ -123,7 +118,7 @@ } } - private void updateLocalMirror(VcsRoot root, BuildProgressLogger logger) throws VcsException, IOException { + private void updateLocalMirror(VcsRoot root, BuildProgressLogger logger, AgentPluginConfig config) throws VcsException, IOException { Settings settings = new Settings(root); File mirrorDir = myMirrorManager.getMirrorDir(settings.getRepositoryUrl()); logger.message("Update local mirror at " + mirrorDir); @@ -132,7 +127,7 @@ } final String defaultPullUrl = getDefaultPullUrl(settings, true); logger.message("Start pulling changes from " + removePrivateData(defaultPullUrl, Collections.singleton(settings.getPassword()))); - new PullCommand(settings, mirrorDir).execute(); + new PullCommand(settings, mirrorDir).execute(config.getPullTimeout()); logger.message("Local mirror changes successfully pulled"); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/PluginConfig.java Fri Oct 28 17:55:04 2011 +0300 @@ -0,0 +1,10 @@ +package jetbrains.buildServer.buildTriggers.vcs.mercurial; + +/** + * @author dmitry.neverov + */ +public interface PluginConfig { + + int getPullTimeout(); + +}
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java Thu Sep 15 12:25:37 2011 +0400 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java Fri Oct 28 17:55:04 2011 +0300 @@ -28,7 +28,7 @@ import java.util.Set; public class CommandUtil { - private static final int DEFAULT_COMMAND_TIMEOUT_SEC = 3600; + public static final int DEFAULT_COMMAND_TIMEOUT_SEC = 3600; public static void checkCommandFailed(@NotNull String cmdName, @NotNull ExecResult res) throws VcsException { if (res.getExitCode() != 0 || res.getException() != null) {
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java Thu Sep 15 12:25:37 2011 +0400 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java Fri Oct 28 17:55:04 2011 +0300 @@ -31,10 +31,10 @@ super(settings, workingDir); } - public void execute() throws VcsException { + public void execute(int timeout) throws VcsException { GeneralCommandLine cli = createCommandLine(); cli.addParameter("pull"); cli.addParameter(getSettings().getRepositoryUrl()); - runCommand(cli); + runCommand(cli, timeout); } }
--- a/mercurial-server/src/META-INF/build-server-plugin-mercurial.xml Thu Sep 15 12:25:37 2011 +0400 +++ b/mercurial-server/src/META-INF/build-server-plugin-mercurial.xml Fri Oct 28 17:55:04 2011 +0300 @@ -3,5 +3,5 @@ <beans default-autowire="constructor"> <bean id="mercurialServer" class="jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialVcsSupport" /> - <bean id="config" class="jetbrains.buildServer.buildTriggers.vcs.mercurial.PluginConfigImpl" /> + <bean id="config" class="jetbrains.buildServer.buildTriggers.vcs.mercurial.ServerPluginConfigImpl" /> </beans>
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Thu Sep 15 12:25:37 2011 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Fri Oct 28 17:55:04 2011 +0300 @@ -60,14 +60,14 @@ private VcsManager myVcsManager; private File myDefaultWorkFolderParent; private MirrorManager myMirrorManager; - private final PluginConfig myConfig; + private final ServerPluginConfig myConfig; private File myLogTemplate; public MercurialVcsSupport(@NotNull final VcsManager vcsManager, @NotNull final ServerPaths paths, @NotNull final SBuildServer server, @NotNull final EventDispatcher<BuildServerListener> dispatcher, - @NotNull final PluginConfig config) throws IOException { + @NotNull final ServerPluginConfig config) throws IOException { myLogTemplate = createLogTemplate(paths.getPluginDataDirectory()); myVcsManager = vcsManager; myDefaultWorkFolderParent = new File(paths.getCachesDir(), "mercurial"); @@ -420,7 +420,7 @@ if (Settings.isValidRepository(workingDir)) { if (!isChangeSetExist(settings, workingDir, cset)) { PullCommand pull = new PullCommand(settings, workingDir); - pull.execute(); + pull.execute(myConfig.getPullTimeout()); } } else { CloneCommand cl = new CloneCommand(settings, workingDir); @@ -438,7 +438,7 @@ try { if (Settings.isValidRepository(workingDir)) { PullCommand pull = new PullCommand(settings, workingDir); - pull.execute(); + pull.execute(myConfig.getPullTimeout()); } else { CloneCommand cl = new CloneCommand(settings, workingDir); cl.setUpdateWorkingDir(false);
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/PluginConfig.java Thu Sep 15 12:25:37 2011 +0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -package jetbrains.buildServer.buildTriggers.vcs.mercurial; - -/** - * @author dmitry.neverov - */ -public interface PluginConfig { - - public boolean isUsePullProtocol(); - -}
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/PluginConfigImpl.java Thu Sep 15 12:25:37 2011 +0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -package jetbrains.buildServer.buildTriggers.vcs.mercurial; - -import jetbrains.buildServer.serverSide.TeamCityProperties; - -/** - * @author dmitry.neverov - */ -public class PluginConfigImpl implements PluginConfig { - - public boolean isUsePullProtocol() { - return TeamCityProperties.getBooleanOrTrue("teamcity.hg.use.pull.protocol"); - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java Fri Oct 28 17:55:04 2011 +0300 @@ -0,0 +1,10 @@ +package jetbrains.buildServer.buildTriggers.vcs.mercurial; + +/** + * @author dmitry.neverov + */ +public interface ServerPluginConfig extends PluginConfig { + + public boolean isUsePullProtocol(); + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java Fri Oct 28 17:55:04 2011 +0300 @@ -0,0 +1,21 @@ +package jetbrains.buildServer.buildTriggers.vcs.mercurial; + +import jetbrains.buildServer.serverSide.TeamCityProperties; + +/** + * @author dmitry.neverov + */ +public class ServerPluginConfigImpl implements ServerPluginConfig { + + private static final String PULL_TIMEOUT_SECONDS = "teamcity.hg.pull.timeout.seconds"; + private final int DEFAULT_PULL_TIMEOUT_SECONDS = 3600; + + public boolean isUsePullProtocol() { + return TeamCityProperties.getBooleanOrTrue("teamcity.hg.use.pull.protocol"); + } + + public int getPullTimeout() { + int timeout = TeamCityProperties.getInteger(PULL_TIMEOUT_SECONDS, DEFAULT_PULL_TIMEOUT_SECONDS); + return timeout > 0 ? timeout : DEFAULT_PULL_TIMEOUT_SECONDS; + } +}
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java Thu Sep 15 12:25:37 2011 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java Fri Oct 28 17:55:04 2011 +0300 @@ -485,11 +485,14 @@ assertTrue(myVcs.getCollectChangesPolicy() instanceof CollectChangesByCheckoutRules); } - private PluginConfig createPluginConfig() { - return new PluginConfig() { + private ServerPluginConfig createPluginConfig() { + return new ServerPluginConfig() { public boolean isUsePullProtocol() { return true; } + public int getPullTimeout() { + return CommandUtil.DEFAULT_COMMAND_TIMEOUT_SEC; + } }; } }