view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/RepoFactory.java @ 979:2b1bd4bca6ad Indore-2017.2.x

TW-50054 support custom clone path whitelist
author Dmitry Neverov <dmitry.neverov@gmail.com>
date Wed, 24 Jan 2018 13:49:01 +0100
parents 38adef4f1b8f
children
line wrap: on
line source
/*
 * Copyright 2000-2018 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;

import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*;
import jetbrains.buildServer.vcs.VcsException;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.IOException;

/**
 * @author dmitry.neverov
 */
public class RepoFactory implements HgRepoFactory {

  protected final ServerPluginConfig myConfig;
  protected final CommandSettingsForRoot myCommandSettingsFactory;
  protected final HgPathProvider myHgPathProvider;


  public RepoFactory(@NotNull ServerPluginConfig config,
                     @NotNull CommandSettingsForRoot commandSettingsFactory,
                     @NotNull HgPathProvider hgPathProvider) throws IOException {
    myConfig = config;
    myCommandSettingsFactory = commandSettingsFactory;
    myHgPathProvider = hgPathProvider;
  }

  @NotNull
  protected ServerHgRepo create(@NotNull File workingDir,
                                @NotNull String hgPath,
                                @NotNull AuthSettings authSettings,
                                @NotNull CommandSettingsFactory commandSettingsFactory,
                                @NotNull ServerPluginConfig config) {
    return new ServerHgRepo(commandSettingsFactory, config, workingDir, hgPath, authSettings);
  }

  @NotNull
  public ServerHgRepo createRepo(@NotNull HgVcsRoot root, @NotNull File workingDir) throws VcsException {
    return create(workingDir, myHgPathProvider.getHgPath(root), root.getAuthSettings(), myCommandSettingsFactory.forRoot(root), myConfig);
  }

  @NotNull
  public ServerHgRepo createRepo(@NotNull HgVcsRoot root, @NotNull File workingDir, @NotNull MercurialProgress progress) throws VcsException {
    CommandSettingsFactory settingsFactory = myCommandSettingsFactory.forRoot(root);
    return create(workingDir, myHgPathProvider.getHgPath(root), root.getAuthSettings(), new FactoryWithProgess(settingsFactory, progress), myConfig);
  }

  public void dispose() {
  }

  private static class FactoryWithProgess implements CommandSettingsFactory {
    private final CommandSettingsFactory myDelegate;
    private final MercurialProgress myProgress;
    public FactoryWithProgess(@NotNull CommandSettingsFactory delegate, @NotNull MercurialProgress progress) {
      myDelegate = delegate;
      myProgress = progress;
    }

    @NotNull
    public CommandSettings create() {
      CommandSettings commandSettings = myDelegate.create();
      commandSettings.setProgress(myProgress);
      return commandSettings;
    }
  }

}