view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/MercurialCommandLine.java @ 824:f86c06f4ab8a

MercurialCommandLine now delegates to GeneralCommandLine
author eugene.petrenko@jetbrains.com
date Fri, 30 May 2014 11:49:44 +0200
parents 31a1aca3305c
children 5fbc0d51bea3
line wrap: on
line source
/*
 * Copyright 2000-2014 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.util.StringUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;

import java.nio.charset.Charset;
import java.util.*;

public class MercurialCommandLine {
  private String myExePath;
  private final List<String> myArguments = new ArrayList<String>();
  private final Map<String, String> myEnvPatch = new TreeMap<String, String>();

  private String myWorkingDirectory;
  private final Set<String> myPrivateData;
  private Charset myCharset;

  public MercurialCommandLine() {
    this(Collections.<String>emptySet());
  }

  public MercurialCommandLine(@NotNull final Set<String> privateData) {
    myPrivateData = privateData;
  }

  @NotNull
  public String getCommandLineString() {
    String original = toGeneralCommandLine().getCommandLineString();
    return CommandUtil.removePrivateData(original, myPrivateData);
  }

  public void setExePath(@NotNull final String hgPath) {
    myExePath = hgPath;
  }

  public void addParameter(@NotNull final String parameter) {
    String escaped = escape(parameter);
    myArguments.add(escaped);
  }

  public void addParameters(@NotNull final Collection<String> argz) {
    for (String s : argz) {
      addParameter(s);
    }
  }

  public void addParameters(@NotNull final String... argz) {
    for (String s : argz) {
      addParameter(s);
    }
  }

  public void addParameters(@NotNull final String a, @NotNull final String b) {
    addParameter(a);
    addParameter(b);
  }

  public void setEnvParams(@NotNull final Map<String, String> hgEnv) {
    myEnvPatch.clear();
    myEnvPatch.putAll(hgEnv);
  }

  @NotNull
  public Map<String, String> getEnvParams() {
    return new TreeMap<String, String>(myEnvPatch);
  }

  public void addEnvParam(@NotNull final String key, @NotNull final String value) {
    myEnvPatch.put(key, value);
  }

  public void setCharset(@NotNull Charset charset) {
    myCharset = charset;
  }

  public void setWorkDirectory(@NonNls String path) {
    myWorkingDirectory = path;
  }

  public String getWorkingDirectory() {
    return myWorkingDirectory;
  }

  private String escape(String s) {
    return StringUtil.escapeQuotesIfWindows(s);
  }

  @NotNull
  public GeneralCommandLine toGeneralCommandLine() {
    final GeneralCommandLine cmd = new GeneralCommandLine() {
      @Override
      public String getCommandLineParams() {
        return CommandUtil.removePrivateData(super.getCommandLineParams(), myPrivateData);
      }

      @Override
      public String getCommandLineString() {
        return CommandUtil.removePrivateData(super.getCommandLineString(), myPrivateData);
      }
    };

    if (myExePath != null) {
      cmd.setExePath(myExePath);
    }

    if (myWorkingDirectory != null) {
      cmd.setWorkDirectory(myWorkingDirectory);
    }

    if (myCharset != null) {
      cmd.setCharset(myCharset);
    }

    for (String argument : myArguments) {
      cmd.addParameter(argument);
    }

    if (!myEnvPatch.isEmpty()) {
      cmd.setPassParentEnvs(true);
      cmd.setEnvParams(new TreeMap<String, String>(myEnvPatch));
    }

    return cmd;
  }
}