view mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleaner.java @ 1027:10dc26b32c35

Update code according to new Java
author nikolai.kulakov@DESKTOP-Q4QCGIH
date Wed, 05 Aug 2020 13:19:53 +0300
parents 7bf4d943d5bb
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 com.intellij.openapi.diagnostic.Logger;
import jetbrains.buildServer.agent.DirectoryCleanersProvider;
import jetbrains.buildServer.agent.DirectoryCleanersProviderContext;
import jetbrains.buildServer.agent.DirectoryCleanersRegistry;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.AuthSettings;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot;
import jetbrains.buildServer.vcs.VcsRoot;
import jetbrains.buildServer.vcs.VcsRootEntry;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author dmitry.neverov
 */
public class AgentMirrorCleaner implements DirectoryCleanersProvider {

  private final static Logger ourLog = Logger.getInstance(AgentMirrorCleaner.class.getName());
  private final MirrorManager myMirrorManager;

  public AgentMirrorCleaner(@NotNull final MirrorManager mirrorManager) {
    myMirrorManager = mirrorManager;
  }

  @NotNull
  public String getCleanerName() {
    return "Mercurial mirrors cleaner";
  }

  public void registerDirectoryCleaners(@NotNull DirectoryCleanersProviderContext context,
                                        @NotNull DirectoryCleanersRegistry registry) {
    Set<String> repositoriesUsedInBuild = getRunningBuildRepositories(context);
    for (Map.Entry<String, File> entry : myMirrorManager.getMappings().entrySet()) {
      String repository = entry.getKey();
      File mirror = entry.getValue();
      if (!repositoriesUsedInBuild.contains(repository)) {
        ourLog.debug("Register cleaner for mirror " + mirror.getAbsolutePath());
        registry.addCleaner(mirror, new Date(myMirrorManager.getLastUsedTime(mirror)));
      }
    }
  }

  private Set<String> getRunningBuildRepositories(@NotNull DirectoryCleanersProviderContext context) {
    Set<String> repositories = new HashSet<>();
    for (VcsRootEntry entry : context.getRunningBuild().getVcsRootEntries()) {
      VcsRoot root = entry.getVcsRoot();
      if (!isHgRoot(root))
        continue;
      HgVcsRoot hgRoot = new HgVcsRoot(root);
      AuthSettings auth = hgRoot.getAuthSettings();
      ourLog.debug("Repository " + auth.getRepositoryUrlWithHiddenPassword(hgRoot.getRepository()) +
              " is used in the build, its mirror won't be cleaned");
      repositories.add(hgRoot.getRepository());
    }
    return repositories;
  }

  private boolean isHgRoot(@NotNull VcsRoot root) {
    return Constants.VCS_NAME.equals(root.getVcsName());
  }
}