changeset 12:6989ac0f8cac

getContent supported
author Pavel.Sher
date Tue, 15 Jul 2008 21:22:09 +0400
parents 568707240741
children 26505742bae5
files mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java mercurial.ipr mercurial/lib/resources_en.jar 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/CloneCommand.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java
diffstat 13 files changed, 63 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java	Tue Jul 15 21:22:09 2008 +0400
@@ -118,13 +118,20 @@
     checkPatchResult(output.toByteArray());
   }
 
+  public void testGetContent() throws IOException, VcsException {
+    VcsRootImpl vcsRoot = createVcsRoot();
+
+    byte[] content = myVcs.getContent("dir1/subdir/file2.txt", vcsRoot, "4:b06a290a363b");
+    assertEquals("bbb", new String(content));
+  }
+
   private Object normalizePath(final String path) {
     return path.replace(File.separatorChar, '/');
   }
 
   private VcsRootImpl createVcsRoot() throws IOException {
     VcsRootImpl vcsRoot = new VcsRootImpl(1, myVcs.getName());
-    vcsRoot.addProperty(Constants.HG_COMMAND_PATH_PROP, "mercurial-tests/testData/bin/hg.exe");
+    vcsRoot.addProperty(Constants.HG_COMMAND_PATH_PROP, new File("mercurial-tests/testData/bin/hg.exe").getAbsolutePath());
     File repository = LocalRepositoryUtil.prepareRepository(new File("mercurial-tests/testData/rep1").getAbsolutePath());
     vcsRoot.addProperty(Constants.REPOSITORY_PROP, repository.getAbsolutePath());
     return vcsRoot;
--- a/mercurial.ipr	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial.ipr	Tue Jul 15 21:22:09 2008 +0400
@@ -458,6 +458,7 @@
         <root url="jar://$PROJECT_DIR$/mercurial/lib/annotations.jar!/" />
         <root url="jar://$PROJECT_DIR$/mercurial/lib/openapi.jar!/" />
         <root url="jar://$PROJECT_DIR$/mercurial/lib/util.jar!/" />
+        <root url="jar://$PROJECT_DIR$/mercurial/lib/resources_en.jar!/" />
       </CLASSES>
       <JAVADOC />
       <SOURCES />
Binary file mercurial/lib/resources_en.jar has changed
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Tue Jul 15 21:22:09 2008 +0400
@@ -71,14 +71,15 @@
   private List<VcsChange> toVcsChanges(final List<ModifiedFile> modifiedFiles, String prevVer, String curVer, final IncludeRule includeRule) {
     List<VcsChange> files = new ArrayList<VcsChange>();
     for (ModifiedFile mf: modifiedFiles) {
-      if (!normalizePath(mf.getPath()).startsWith(includeRule.getFrom())) continue; // skip files which do not match include rule
+      String normalizedPath = normalizePath(mf.getPath());
+      if (!normalizedPath.startsWith(includeRule.getFrom())) continue; // skip files which do not match include rule
 
       VcsChangeInfo.Type changeType = getChangeType(mf.getStatus());
       if (changeType == null) {
         Loggers.VCS.warn("Unable to convert status: " + mf.getStatus() + " to VCS change type");
         changeType = VcsChangeInfo.Type.NOT_CHANGED;
       }
-      files.add(new VcsChange(changeType, mf.getStatus().getName(), mf.getPath(), mf.getPath(), prevVer, curVer));
+      files.add(new VcsChange(changeType, mf.getStatus().getName(), normalizedPath, normalizedPath, prevVer, curVer));
     }
     return files;
   }
@@ -101,11 +102,29 @@
                            final VcsChangeInfo change,
                            final VcsChangeInfo.ContentType contentType,
                            final VcsRoot vcsRoot) throws VcsException {
-    return new byte[0];
+    updateWorkingDirectory(vcsRoot);
+    String version = contentType == VcsChangeInfo.ContentType.AFTER_CHANGE ? change.getAfterChangeRevisionNumber() : change.getBeforeChangeRevisionNumber();
+    return getContent(change.getRelativeFileName(), vcsRoot, version);
   }
 
   @NotNull
-  public byte[] getContent(final String filePath, final VcsRoot versionedRoot, final String version) throws VcsException {
+  public byte[] getContent(final String filePath, final VcsRoot vcsRoot, final String version) throws VcsException {
+    updateWorkingDirectory(vcsRoot);
+    Settings settings = new Settings(myServerPaths, vcsRoot);
+    CatCommand cc = new CatCommand(settings);
+    ChangeSet cs = new ChangeSet(version);
+    cc.setRevId(cs.getId());
+    File parentDir = cc.execute(Collections.singletonList(filePath));
+    File file = new File(parentDir, filePath);
+    if (file.isFile()) {
+      try {
+        return FileUtil.loadFileBytes(file);
+      } catch (IOException e) {
+        throw new VcsException("Failed to load content of file: " + file.getAbsolutePath(), e);
+      }
+    } else {
+      Loggers.VCS.warn("Unable to obtain content of the file: " + filePath);
+    }
     return new byte[0];
   }
 
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,7 +1,6 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
 import com.intellij.execution.configurations.GeneralCommandLine;
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;
 import jetbrains.buildServer.util.FileUtil;
 import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
@@ -47,9 +46,9 @@
       cli.addParameter(myRevId);
     }
     for (String p: relPaths) {
-      cli.addParameter(p);
+      cli.addParameter(FileUtil.normalizeSeparator(p));
     }
-    CommandUtil.checkCommandFailed("hg cat", SimpleCommandLineProcessRunner.runCommand(cli, null));
+    CommandUtil.runCommand(cli);
     return tempDir;
   }
 }
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,8 +1,6 @@
 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;
 
@@ -29,11 +27,9 @@
     if (myDestDir == null) throw new IllegalStateException("Destination dir must be specified");
     GeneralCommandLine cli = new GeneralCommandLine();
     cli.setExePath(mySettings.getHgCommandPath());
-    cli.addParameter("-q");
-    cli.addParameter("--cwd");
     File dir = new File(myDestDir);
     File parent = dir.getParentFile();
-    cli.addParameter(parent.getAbsolutePath());
+    cli.setWorkDirectory(parent.getAbsolutePath());
     cli.addParameter("clone");
     if (myToId != null) {
       cli.addParameter("-r");
@@ -43,7 +39,6 @@
     cli.addParameter(mySettings.getRepository());
     cli.addParameter(dir.getName());
 
-    final ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
-    CommandUtil.checkCommandFailed("hg clone", res);
+    CommandUtil.runCommand(cli);
   }
 }
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,20 +1,30 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
+import com.intellij.execution.configurations.GeneralCommandLine;
 import jetbrains.buildServer.ExecResult;
+import jetbrains.buildServer.SimpleCommandLineProcessRunner;
 import jetbrains.buildServer.log.Loggers;
 import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
 
 public class CommandUtil {
   public static void checkCommandFailed(@NotNull String cmdName, @NotNull ExecResult res) throws VcsException {
-    if (res.getExitCode() > 0) {
+    if (res.getExitCode() > 0 || res.getException() != null) {
       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();
+    final String message = "'" + cmdName + "' command failed.\nerr: " + res.getStderr() + "\nout: " + res.getStdout() + "\nexception: " + res.getException().toString();
     Loggers.VCS.warn(message);
     throw new VcsException(message);
   }
+
+  public static ExecResult runCommand(@NotNull GeneralCommandLine cli) throws VcsException {
+    String cmdStr = cli.getCommandLineString();
+    Loggers.VCS.debug("Run command: " + cmdStr);
+    ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
+    CommandUtil.checkCommandFailed(cmdStr, res);
+    return res;
+  }
 }
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -3,7 +3,6 @@
 import com.intellij.execution.configurations.GeneralCommandLine;
 import com.intellij.openapi.diagnostic.Logger;
 import jetbrains.buildServer.ExecResult;
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;
 import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
 
@@ -49,8 +48,7 @@
     if (to == null) to = "0";
     cli.addParameter(from + ":" + to);
 
-    ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
-    CommandUtil.checkCommandFailed("hg log", res);
+    ExecResult res = CommandUtil.runCommand(cli);
     return parseChangeSets(res.getStdout());
   }
 
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,10 +1,8 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
 import com.intellij.execution.configurations.GeneralCommandLine;
+import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
-import jetbrains.buildServer.ExecResult;
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;
-import jetbrains.buildServer.vcs.VcsException;
 
 /**
  * @author Pavel.Sher
@@ -23,7 +21,6 @@
     cli.setWorkDirectory(mySettings.getWorkingDir());
     cli.addParameter("pull");
     cli.addParameter(mySettings.getRepository());
-    final ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
-    CommandUtil.checkCommandFailed("hg pull", res);
+    CommandUtil.runCommand(cli);
   }
 }
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,11 +1,12 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
-import java.io.File;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.Constants;
 import jetbrains.buildServer.serverSide.ServerPaths;
 import jetbrains.buildServer.vcs.VcsRoot;
 import org.jetbrains.annotations.NotNull;
 
+import java.io.File;
+
 public class Settings {
   private String myRepository;
   private String myHgCommandPath;
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,12 +1,12 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
 import com.intellij.execution.configurations.GeneralCommandLine;
+import jetbrains.buildServer.ExecResult;
+import jetbrains.buildServer.vcs.VcsException;
+import org.jetbrains.annotations.NotNull;
+
 import java.util.ArrayList;
 import java.util.List;
-import jetbrains.buildServer.ExecResult;
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;
-import jetbrains.buildServer.vcs.VcsException;
-import org.jetbrains.annotations.NotNull;
 
 public class StatusCommand {
   private Settings mySettings;
@@ -28,8 +28,7 @@
   public List<ModifiedFile> execute() throws VcsException {
     GeneralCommandLine cli = new GeneralCommandLine();
     cli.setExePath(mySettings.getHgCommandPath());
-    cli.addParameter("--cwd");
-    cli.addParameter(mySettings.getWorkingDir());
+    cli.setWorkDirectory(mySettings.getWorkingDir());
     cli.addParameter("status");
     cli.addParameter("--rev");
     String from = myFromId;
@@ -37,8 +36,7 @@
     String to = myToId;
     if (to == null) to = "0";
     cli.addParameter(from + ":" + to);
-    ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
-    CommandUtil.checkCommandFailed("hg status", res);
+    ExecResult res = CommandUtil.runCommand(cli);
     return parseFiles(res.getStdout());
   }
 
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -2,7 +2,6 @@
 
 import com.intellij.execution.configurations.GeneralCommandLine;
 import jetbrains.buildServer.ExecResult;
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;
 import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
 
@@ -26,8 +25,7 @@
     cli.setWorkDirectory(mySettings.getWorkingDir());
     cli.setExePath(mySettings.getHgCommandPath());
     cli.addParameter("tip");
-    ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null);
-    CommandUtil.checkCommandFailed("hg tip", res);
+    ExecResult res = CommandUtil.runCommand(cli);
     List<ChangeSet> changeSets = LogCommand.parseChangeSets(res.getStdout());
     if (changeSets.isEmpty()) {
       CommandUtil.commandFailed("hg tip", res);
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java	Mon Jul 14 21:34:32 2008 +0400
+++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java	Tue Jul 15 21:22:09 2008 +0400
@@ -1,7 +1,6 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
 import com.intellij.execution.configurations.GeneralCommandLine;
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;
 import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
 
@@ -15,10 +14,9 @@
   public void execute() throws VcsException {
     GeneralCommandLine cli = new GeneralCommandLine();
     cli.setExePath(mySettings.getHgCommandPath());
-    cli.addParameter("--cwd");
-    cli.addParameter(mySettings.getWorkingDir());
+    cli.setWorkDirectory(mySettings.getWorkingDir());
     cli.addParameter("update");
     cli.addParameter("-C");
-    CommandUtil.checkCommandFailed("hg update", SimpleCommandLineProcessRunner.runCommand(cli, null));
+    CommandUtil.runCommand(cli);
   }
 }