view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ChangedFilesCommand.java @ 160:5198b02fc5e9

Update copyrights
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Fri, 21 Jan 2011 09:54:10 +0300
parents 6c1cff1f61cc
children d314f06e6ee3
line wrap: on
line source
/*
 * Copyright 2000-2011 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;

import com.intellij.execution.configurations.GeneralCommandLine;
import jetbrains.buildServer.ExecResult;
import jetbrains.buildServer.util.FileUtil;
import jetbrains.buildServer.vcs.VcsException;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @author Pavel.Sher
 */
public class ChangedFilesCommand extends BaseCommand {
  private String myRevId;

  public ChangedFilesCommand(@NotNull final Settings settings) {
    super(settings);
  }

  public void setRevId(@NotNull final String revId) {
    myRevId = revId;
  }

  public List<ModifiedFile> execute() throws VcsException {
    File styleFile;
    try {
      styleFile = getStyleFile();
    } catch (IOException e) {
      throw new VcsException("Unable to create style file: " + e.toString(), e);
    }
    try {
      GeneralCommandLine cli = createCommandLine();
      cli.addParameter("log");
      cli.addParameter("-r");
      cli.addParameter(myRevId + ":" + myRevId);
      cli.addParameter("--style=" + styleFile.getAbsolutePath());

      ExecResult res = runCommand(cli);
      return parseFiles(res.getStdout());
    } finally {
      FileUtil.delete(styleFile);
    }
  }

  private File getStyleFile() throws IOException {
    File styleFile = FileUtil.createTempFile("hg", "style");
    FileUtil.writeFile(styleFile,
            "changeset = \"{file_mods}{file_adds}{file_dels}\"\n" +
            "file_add = \"A {file_add}\\n\"\n" +
            "file_del = \"R {file_del}\\n\"\n" +
            "file_mod = \"M {file_mod}\\n\"");
    return styleFile;
  }

  private List<ModifiedFile> parseFiles(final String stdout) {
    return StatusCommand.parseFiles(stdout);
  }
}