view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java @ 399:45f25ca68312 Faradi-7.0.x

Support local mirrors for subrepos
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Fri, 02 Mar 2012 14:24:58 +0400
parents 24d926f22e85
children f9bf9ec48347
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 jetbrains.buildServer.buildTriggers.vcs.mercurial.Constants;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.HgPathProvider;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.PathUtil;
import jetbrains.buildServer.util.StringUtil;
import jetbrains.buildServer.vcs.VcsRoot;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;

/**
 * Represents Mercurial repository settings
 */
public class Settings {

  private final HgPathProvider myHgPathProvider;
  private String myRepository;
  private String myHgCommandPath;
  private File myCustomWorkingDir;
  private String myUsername;
  private String myPassword;
  private String myBranchName;
  private boolean myUncompressedTransfer = false;
  private static final String DEFAULT_BRANCH_NAME = "default";
  private String myCustomClonePath;
  private final String myUserForTag;
  private final AuthSettings myAuthSettings;

  public Settings(@NotNull final HgPathProvider hgPathProvider, @NotNull final VcsRoot vcsRoot) {
    myHgPathProvider = hgPathProvider;
    myRepository = vcsRoot.getProperty(Constants.REPOSITORY_PROP);
    myHgCommandPath = vcsRoot.getProperty(Constants.HG_COMMAND_PATH_PROP);
    myBranchName = vcsRoot.getProperty(Constants.BRANCH_NAME_PROP);
    myCustomClonePath = vcsRoot.getProperty(Constants.SERVER_CLONE_PATH_PROP);
    myUsername = vcsRoot.getProperty(Constants.USERNAME);
    myPassword = vcsRoot.getProperty(Constants.PASSWORD);
    myUncompressedTransfer = "true".equals(vcsRoot.getProperty(Constants.UNCOMPRESSED_TRANSFER));
    myUserForTag = vcsRoot.getProperty(Constants.USER_FOR_TAG);
    myAuthSettings = new AuthSettings(myUsername, myPassword);
  }

  public String getCustomClonePath() {
    return myCustomClonePath;
  }

  public String getRepository() {
    return myRepository;
  }

  /**
   * Returns name of the branch to use (returns 'default' if no branch specified)
   * @return see above
   */
  @NotNull
  public String getBranchName() {
    return StringUtil.isEmpty(myBranchName) ? DEFAULT_BRANCH_NAME : myBranchName;
  }

  /**
   * Returns true if current branch is default branch
   * @return see above
   */
  public boolean isDefaultBranch() {
    return getBranchName().equals(DEFAULT_BRANCH_NAME);
  }

  public boolean isUncompressedTransfer() {
    return myUncompressedTransfer;
  }

  /**
   * @return path to hg command taking into account server-wide/agent-wide settings
   */
  @NotNull
  public String getHgCommandPath() {
    return myHgPathProvider.getHgPath(this);
  }

  /**
   * @return path to hg command as it is set in VCS root settings
   */
  public String getHgPath() {
    return myHgCommandPath;
  }

  public String getUsername() {
    return myUsername;
  }

  public String getPassword() {
    return myPassword;
  }

  @Nullable
  public String getUserForTag() {
    return myUserForTag;
  }

  public String getRepositoryUrlWithCredentials() {
    return myAuthSettings.getRepositoryUrlWithCredentials(myRepository);
  }

  /**
   * Set custom working dir for vcs root. This option make sence only for server-side checkout
   * @param customWorkingDir custom working dir
   */
  public void setCustomWorkingDir(@NotNull final File customWorkingDir) {
    myCustomWorkingDir = PathUtil.getCanonicalFile(customWorkingDir);
  }

  /**
   * Returns custom working dir for root or null if default working dir should be used.
   * This options make sence only with server-side checkout.
   * @return see above
   */
  @Nullable
  public File getCustomWorkingDir() {
    return myCustomWorkingDir;
  }

  public AuthSettings getAuthSettings() {
    return myAuthSettings;
  }

  public static boolean isValidRepository(File dir) {
    // need better way to check that repository copy is ok
    return dir.isDirectory() && new File(dir, ".hg").isDirectory();
  }
}