view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java @ 44:1490e2981799

labeling/tagging support
author Pavel.Sher
date Fri, 05 Sep 2008 01:15:29 +0400
parents 7944e8985ebd
children 5d9c34cb543a
line wrap: on
line source
/*
 * Copyright 2000-2007 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.vcs.VcsException;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class StatusCommand extends BaseCommand {
  private String myFromId;
  private String myToId;

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

  public void setFromRevId(final String fromId) {
    myFromId = fromId;
  }

  public void setToRevId(final String toId) {
    myToId = toId;
  }

  public List<ModifiedFile> execute() throws VcsException {
    GeneralCommandLine cli = createCommandLine();
    cli.addParameter("status");
    cli.addParameter("--rev");
    String from = myFromId;
    if (from == null) from = "0";
    String to = myToId;
    if (to == null) to = "0";
    cli.addParameter(from + ":" + to);
    ExecResult res = runCommand(cli);
    return parseFiles(res.getStdout());
  }

  private List<ModifiedFile> parseFiles(final String stdout) {
    List<ModifiedFile> result = new ArrayList<ModifiedFile>();
    String[] lines = stdout.split("\n");
    for (String line: lines) {
      if (line.length() == 0) continue;
      char modifier = line.charAt(0);
      String path = line.substring(2);
      ModifiedFile.Status status = toStatus(modifier);
      if (status == ModifiedFile.Status.UNKNOWN) continue;
      result.add(new ModifiedFile(status, path));
    }
    return result;
  }

  private ModifiedFile.Status toStatus(final char modifier) {
    switch (modifier) {
      case 'A': return ModifiedFile.Status.ADDED;
      case 'M': return ModifiedFile.Status.MODIFIED;
      case 'R': return ModifiedFile.Status.REMOVED;
      default: return ModifiedFile.Status.UNKNOWN;
    }
  }
}