# HG changeset patch # User Dmitry Neverov # Date 1341332062 -14400 # Node ID dc95d4468323070e98bc7e6d157425ef3a35c5c6 # Parent 183656e9294a3cf5fcf5854f6c57212c6760f032 Ability to run commands with traceback diff -r 183656e9294a -r dc95d4468323 mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java --- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java Tue Jul 03 18:59:14 2012 +0400 +++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java Tue Jul 03 20:14:22 2012 +0400 @@ -11,4 +11,6 @@ boolean isUseLocalMirrors(@NotNull AgentRunningBuild build); int getPullTimeout(@NotNull AgentRunningBuild build); + + boolean runWithTraceback(@NotNull AgentRunningBuild build); } diff -r 183656e9294a -r dc95d4468323 mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java --- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java Tue Jul 03 18:59:14 2012 +0400 +++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java Tue Jul 03 20:14:22 2012 +0400 @@ -37,6 +37,10 @@ return DEFAULT_PULL_TIMEOUT_SECONDS; } + public boolean runWithTraceback(@NotNull AgentRunningBuild build) { + return "true".equals(build.getSharedConfigParameters().get("teamcity.hg.run.commands.with.traceback")); + } + @Nullable public Integer parseTimeout(@Nullable String timeoutStr) { if (timeoutStr == null) diff -r 183656e9294a -r dc95d4468323 mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java --- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java Tue Jul 03 18:59:14 2012 +0400 +++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java Tue Jul 03 20:14:22 2012 +0400 @@ -31,6 +31,7 @@ private final BuildProgressLogger myLogger; private final boolean myUseLocalMirrors; private int myPullTimeout; + private final boolean myUseTraceback; public MercurialIncludeRuleUpdater(@NotNull final AgentPluginConfig pluginConfig, @NotNull final MirrorManager mirrorManager, @@ -47,6 +48,7 @@ myLogger = build.getBuildLogger(); myUseLocalMirrors = myConfig.isUseLocalMirrors(build); myPullTimeout = myConfig.getPullTimeout(build); + myUseTraceback = myConfig.runWithTraceback(build); } @@ -74,6 +76,7 @@ delete(mirrorDir); myLogger.message("Clone repository " + myAuthSettings.getRepositoryUrlWithHiddenPassword(repositoryUrl) + " into local mirror " + mirrorRepo.path()); mirrorRepo.doClone().fromRepository(repositoryUrl) + .withTraceback(myUseTraceback) .setUpdateWorkingDir(false) .setUsePullProtocol(false) .useUncompressedTransfer(myRoot.isUncompressedTransfer()) @@ -86,6 +89,7 @@ } else { myLogger.message("Start pulling changes from " + myAuthSettings.getRepositoryUrlWithHiddenPassword(repositoryUrl)); mirrorRepo.pull().fromRepository(repositoryUrl) + .withTraceback(myUseTraceback) .withTimeout(myPullTimeout) .call(); myLogger.message("Local mirror changes successfully pulled"); @@ -101,6 +105,7 @@ if (repo.isEmpty()) {//can do clone only in empty dir myLogger.message("Start cloning from " + (myUseLocalMirrors ? "local mirror " : "") + myAuthSettings.getRepositoryUrlWithHiddenPassword(repositoryUrl)); repo.doClone().fromRepository(repositoryUrl) + .withTraceback(myUseTraceback) .setUsePullProtocol(false) .setUpdateWorkingDir(false) .useUncompressedTransfer(!myUseLocalMirrors && myRoot.isUncompressedTransfer()) @@ -117,6 +122,7 @@ myLogger.message("Start pulling changes from " + (myUseLocalMirrors ? "local mirror " : "") + myAuthSettings.getRepositoryUrlWithHiddenPassword(repositoryUrl)); try { repo.pull().fromRepository(repositoryUrl) + .withTraceback(myUseTraceback) .withTimeout(myPullTimeout) .call(); } catch (UnrelatedRepositoryException e) { @@ -161,12 +167,14 @@ if (subrepository.isValidRepository()) { myLogger.message("Pull from local mirror"); subrepository.pull().fromRepository(mirrorDir) + .withTraceback(myUseTraceback) .withTimeout(myPullTimeout) .call(); myLogger.message("done"); } else { myLogger.message("Clone subrepo from local mirror"); subrepository.doClone().fromRepository(mirrorDir) + .withTraceback(myUseTraceback) .setUpdateWorkingDir(false) .setUsePullProtocol(false) .call(); @@ -183,7 +191,7 @@ private void doUpdateWorkingDir(@NotNull HgRepo repo, @NotNull String revision) throws VcsException { myLogger.message("Updating working dir " + repo.path() + " to revision " + revision); - repo.update().toRevision(revision).call(); + repo.update().withTraceback(myUseTraceback).toRevision(revision).call(); myLogger.message("Working dir updated"); } diff -r 183656e9294a -r dc95d4468323 mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java --- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java Tue Jul 03 18:59:14 2012 +0400 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java Tue Jul 03 20:14:22 2012 +0400 @@ -31,6 +31,7 @@ private File myWorkingDir; private boolean myUsePullProtocol = true; private boolean myUseUncompressedTransfer = false; + private boolean myTraceback; public CloneCommand(@NotNull String hgPath, @NotNull File workingDir, @NotNull AuthSettings authSettings) { super(hgPath, workingDir, authSettings); @@ -70,12 +71,19 @@ return this; } + public CloneCommand withTraceback(boolean runWithTraceback) { + myTraceback = runWithTraceback; + return this; + } + public void call() throws VcsException { myWorkingDir.mkdirs(); GeneralCommandLine cli = createCommandLine(); File parent = myWorkingDir.getParentFile(); cli.setWorkDirectory(parent.getAbsolutePath()); cli.addParameter("clone"); + if (myTraceback) + cli.addParameter("--traceback"); if (myToId != null) { cli.addParameter("-r"); cli.addParameter(myToId); diff -r 183656e9294a -r dc95d4468323 mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java --- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java Tue Jul 03 18:59:14 2012 +0400 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java Tue Jul 03 20:14:22 2012 +0400 @@ -33,6 +33,7 @@ private String myPullUrl; private int myTimeout; + private boolean myTraceback; public PullCommand(@NotNull String hgPath, @NotNull File workingDir, @NotNull AuthSettings authSettings) { super(hgPath, workingDir, authSettings); @@ -53,10 +54,17 @@ return this; } + public PullCommand withTraceback(boolean runWithTraceback) { + myTraceback = runWithTraceback; + return this; + } + public void call() throws VcsException { ensureRepositoryIsNotLocked(); GeneralCommandLine cli = createCommandLine(); cli.addParameter("pull"); + if (myTraceback) + cli.addParameter("--traceback"); String pullUrl = myAuthSettings != null ? myAuthSettings.getRepositoryUrlWithCredentials(myPullUrl) : myPullUrl; cli.addParameter(pullUrl); runCommand(cli, with().timeout(myTimeout)); diff -r 183656e9294a -r dc95d4468323 mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java --- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java Tue Jul 03 18:59:14 2012 +0400 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java Tue Jul 03 20:14:22 2012 +0400 @@ -30,6 +30,7 @@ private String myToId; private String myBranchName; + private boolean myTraceback; public UpdateCommand(@NotNull String hgPath, @NotNull File workingDir, @NotNull AuthSettings authSettings) { super(hgPath, workingDir,authSettings); @@ -49,11 +50,18 @@ return this; } + public UpdateCommand withTraceback(boolean runWithTraceback) { + myTraceback = runWithTraceback; + return this; + } + public void call() throws VcsException { ensureWorkingDirIsNotLocked(); GeneralCommandLine cli = createCommandLine(); cli.addParameter("update"); + if (myTraceback) + cli.addParameter("--traceback"); addAuthConfigParams(cli); cli.addParameter("-C"); cli.addParameter("-r");