Mercurial > hg > mercurial
view mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgDetector.java @ 480:efba721f9a1d Faradi-7.1.x
TW-23382 agent logs with info, server logs with debug
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Wed, 26 Sep 2012 18:29:01 +0400 |
parents | 45f25ca68312 |
children | 31a1aca3305c |
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial; import com.intellij.openapi.diagnostic.Logger; import jetbrains.buildServer.agent.AgentLifeCycleAdapter; import jetbrains.buildServer.agent.AgentLifeCycleListener; import jetbrains.buildServer.agent.BuildAgent; import jetbrains.buildServer.agent.BuildAgentConfiguration; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommandSettingsFactory; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.VersionCommand; import jetbrains.buildServer.util.EventDispatcher; import jetbrains.buildServer.vcs.VcsException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.Arrays; import java.util.List; /** * @author dmitry.neverov */ public class HgDetector extends AgentLifeCycleAdapter { final static String AGENT_HG_PATH_PROPERTY = "teamcity.hg.agent.path"; private final static Logger LOG = Logger.getInstance(HgDetector.class.getName()); private final static HgVersion LEAST_SUPPORTED_VERSION = new HgVersion(1, 5, 2); private final CommandSettingsFactory myCommandSettingsFactory; private final List<String> myHgPaths = Arrays.asList("hg"); public HgDetector(@NotNull EventDispatcher<AgentLifeCycleListener> dispatcher, @NotNull CommandSettingsFactory commandSettingsFactory) { myCommandSettingsFactory = commandSettingsFactory; dispatcher.addListener(this); } @Override public void beforeAgentConfigurationLoaded(@NotNull final BuildAgent agent) { BuildAgentConfiguration config = agent.getConfiguration(); String agentHgPath = config.getConfigurationParameters().get(AGENT_HG_PATH_PROPERTY); File workDir = config.getTempDirectory(); if (agentHgPath == null) { String detectedHg = detectHg(workDir); if (detectedHg != null) { LOG.info("Detect installed mercurial at path " + detectedHg + ", provide it as a property " + AGENT_HG_PATH_PROPERTY); config.addConfigurationParameter(AGENT_HG_PATH_PROPERTY, "hg"); } else { LOG.info("Cannot detect installed mercurial"); } } else { if (!canRunHg(agentHgPath, workDir, true)) LOG.warn("Mercurial executable at path " + agentHgPath + " cannot be run or not compatible with TeamCity"); } } @Nullable private String detectHg(@NotNull final File workDir) { for (String path : myHgPaths) { if (canRunHg(path, workDir)) return path; } return null; } private boolean canRunHg(@NotNull final String hgPath, @NotNull final File workDir) { return canRunHg(hgPath, workDir, false); } private boolean canRunHg(@NotNull final String hgPath, @NotNull final File workDir, boolean logWarnings) { VersionCommand versionCommand = new VersionCommand(myCommandSettingsFactory.create(), hgPath, workDir); try { HgVersion version = versionCommand.call(); if (isCompatible(version)) { return true; } else { warn("Mercurial version at path " + hgPath + " is " + version + ", required version is " + LEAST_SUPPORTED_VERSION + "+", logWarnings); return false; } } catch (VcsException e) { warn("Error while trying to get hg version, hg path: " + hgPath, e, logWarnings); return false; } } private void warn(@NotNull final String msg, final boolean logWarnings) { if (logWarnings) LOG.warn(msg); else if (LOG.isDebugEnabled()) LOG.debug(msg); } private void warn(@NotNull final String msg, @NotNull final Throwable t, final boolean logWarnings) { if (logWarnings) LOG.warn(msg, t); else if (LOG.isDebugEnabled()) LOG.debug(msg, t); } private boolean isCompatible(@NotNull final HgVersion version) { return version.isEqualsOrGreaterThan(LEAST_SUPPORTED_VERSION); } }