view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/RepoFactory.java @ 448:d4c061183a5f

Merge Faradi-7.0.x
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Mon, 02 Jul 2012 16:26:50 +0400
parents 6c43663744d9
children efba721f9a1d
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial;

import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.AuthSettings;
import jetbrains.buildServer.util.FileUtil;
import jetbrains.buildServer.vcs.VcsException;
import org.jetbrains.annotations.NotNull;

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

import static com.intellij.openapi.util.io.FileUtil.createTempFile;
import static com.intellij.openapi.util.io.FileUtil.delete;

/**
 * @author dmitry.neverov
 */
public final class RepoFactory {

  private final ServerPluginConfig myConfig;
  private File myLogTemplate;
  private File myLogNoFilesTemplate;

  public RepoFactory(@NotNull ServerPluginConfig config) throws IOException {
    myConfig = config;
    myLogTemplate = createLogTemplate();
    myLogNoFilesTemplate = createLogNoFilesTemplate();
  }

  @NotNull
  public ServerHgRepo create(@NotNull File workingDir, @NotNull String hgPath, @NotNull AuthSettings authSettings) throws VcsException {
    return new ServerHgRepo(myConfig, workingDir, hgPath, authSettings).withLogTemplates(getTemplate(), getLogNoFilesTemplate());
  }

  public void dispose() {
    delete(myLogTemplate);
  }

  private File getTemplate() throws VcsException {
    if (myLogTemplate.isFile() && myLogTemplate.exists())
      return myLogTemplate;
    try {
      myLogTemplate = createLogTemplate();
      return myLogTemplate;
    } catch (IOException e) {
      throw new VcsException("Cannot create mercurial log template", e);
    }
  }

  private File getLogNoFilesTemplate() throws VcsException {
    if (myLogNoFilesTemplate.isFile() && myLogNoFilesTemplate.exists())
      return myLogNoFilesTemplate;
    try {
      myLogNoFilesTemplate = createLogNoFilesTemplate();
      return myLogNoFilesTemplate;
    } catch (IOException e) {
      throw new VcsException("Cannot create mercurial log template", e);
    }
  }

  private File createLogTemplate() throws IOException {
    File template = createTempFile("teamcity", "hg.log.template");
    FileUtil.copyResource(RepoFactory.class, "/buildServerResources/log.template", template);
    return template;
  }

  private File createLogNoFilesTemplate() throws IOException {
    File template = createTempFile("teamcity", "hg.short.log.template");
    FileUtil.copyResource(RepoFactory.class, "/buildServerResources/log.no.files.template", template);
    return template;
  }
}