changeset 453:dc95d4468323

Ability to run commands with traceback
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Tue, 03 Jul 2012 20:14:22 +0400
parents 183656e9294a
children a400b00b8b2d
files mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialIncludeRuleUpdater.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java
diffstat 6 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);
 }
--- 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)
--- 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");
   }
 
--- 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);
--- 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));
--- 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");