Mercurial > hg > mercurial
changeset 12:6989ac0f8cac
getContent supported
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 />
--- 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); } }