changeset 9:7dadebd03515

use tip command instead of log in getCurrentVersion method
author Pavel.Sher
date Mon, 14 Jul 2008 21:17:17 +0400
parents 2cb2df5a0dcd
children 76e3e3618cf7
files mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java
diffstat 4 files changed, 49 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Mon Jul 14 20:52:10 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Mon Jul 14 21:17:17 2008 +0400
@@ -142,14 +142,8 @@
   public String getCurrentVersion(final VcsRoot root) throws VcsException {
     updateWorkingDirectory(root);
     Settings settings = new Settings(myServerPaths, root);
-    LogCommand lc = new LogCommand(settings);
-    lc.setFromRevId("tip");
-    lc.setToRevId("tip");
-    List<ChangeSet> changes = lc.execute();
-    if (changes.isEmpty()) {
-      throw new VcsException("Unable to obtain current version of repository");
-    }
-    final ChangeSet changeSet = changes.get(0);
+    TipCommand lc = new TipCommand(settings);
+    ChangeSet changeSet = lc.execute();
     return changeSet.getFullVersion();
   }
 
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java	Mon Jul 14 20:52:10 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java	Mon Jul 14 21:17:17 2008 +0400
@@ -31,15 +31,14 @@
     }
     for (String path: relPaths) {
       final File parentFile = new File(tempDir, path).getParentFile();
-      if (!parentFile.mkdirs()) {
+      if (!parentFile.isDirectory() && !parentFile.mkdirs()) {
         throw new VcsException("Failed to create directory: " + parentFile.getAbsolutePath());
       }
     }
 
     GeneralCommandLine cli = new GeneralCommandLine();
     cli.setExePath(mySettings.getHgCommandPath());
-    cli.addParameter("--cwd");
-    cli.addParameter(mySettings.getWorkingDir());
+    cli.setWorkDirectory(mySettings.getWorkingDir());
     cli.addParameter("cat");
     cli.addParameter("-o");
     cli.addParameter(tempDir.getAbsolutePath() + File.separator + "%p");
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java	Mon Jul 14 20:52:10 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java	Mon Jul 14 21:17:17 2008 +0400
@@ -8,9 +8,13 @@
 public class CommandUtil {
   public static void checkCommandFailed(@NotNull String cmdName, @NotNull ExecResult res) throws VcsException {
     if (res.getExitCode() > 0) {
-      final String message = "'" + cmdName + "' command failed. Err: " + res.getStderr() + "\nout: " + res.getStdout();
-      Loggers.VCS.warn(message);
-      throw new VcsException(message);
+      commandFailed(cmdName, res);
     }
   }
+
+  public static void commandFailed(final String cmdName, final ExecResult res) throws VcsException {
+    final String message = "'" + cmdName + "' command failed. Err: " + res.getStderr() + "\nout: " + res.getStdout();
+    Loggers.VCS.warn(message);
+    throw new VcsException(message);
+  }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java	Mon Jul 14 21:17:17 2008 +0400
@@ -0,0 +1,38 @@
+package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
+
+import com.intellij.execution.configurations.GeneralCommandLine;
+import jetbrains.buildServer.ExecResult;
+import jetbrains.buildServer.SimpleCommandLineProcessRunner;
+import jetbrains.buildServer.vcs.VcsException;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * @author Pavel.Sher
+ *         Date: 14.07.2008
+ */
+public class TipCommand {
+  @NotNull
+  private Settings mySettings;
+
+  public TipCommand(@NotNull final Settings settings) {
+    mySettings = settings;
+  }
+
+  @NotNull
+  public ChangeSet execute() throws VcsException {
+    GeneralCommandLine cli = new GeneralCommandLine();
+    cli.setWorkDirectory(mySettings.getWorkingDir());
+    cli.setExePath(mySettings.getHgCommandPath());
+    cli.addParameter("tip");
+    ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
+    CommandUtil.checkCommandFailed("hg tip", res);
+    List<ChangeSet> changeSets = LogCommand.parseChangeSets(res.getStdout());
+    if (changeSets.isEmpty()) {
+      CommandUtil.commandFailed("hg tip", res);
+    }
+
+    return changeSets.get(0);
+  }
+}