public void registerDirectoryCleaners()

in git-agent/src/main/java/jetbrains/buildServer/buildTriggers/vcs/git/agent/AgentMirrorCleaner.java [44:102]


  public void registerDirectoryCleaners(@NotNull DirectoryCleanersProviderContext context,
                                        @NotNull DirectoryCleanersRegistry registry) {
    //feature toggle, may be removed after testing new code
    if (Boolean.parseBoolean(
      context.getRunningBuild().getSharedConfigParameters().getOrDefault("teamcity.internal.git.mirrorsCleaner.useOldImplementation", "false"))) {
      oldImplementation(context, registry);
      return;
    }

    final Set<String> repositoriesUsedInBuild = getRunningBuildRepositories(context);

    final Set<File> mirrors = new HashSet<>(myMirrorManager.getMappings().values());

    for (File mirror : listFiles(myMirrorManager.getBaseMirrorsDir())) {
      if (!mirror.isDirectory()) {
        LOG.debug("Skipping non-mirror file: " + mirror.getAbsolutePath());
        continue;
      }
      final String name = mirror.getName();
      if (!myMirrorManager.isInvalidDirName(name)) {
        final String repository = myMirrorManager.getUrl(mirror.getName());
        if (repository != null && repositoriesUsedInBuild.contains(repository)) {
          return;
        }
      }

      registry.addCleaner(mirror, new Date(myMirrorManager.getLastUsedTime(mirror)), () -> {
        if (myMirrorManager.isInvalidDirName(name)) {
          myMirrorManager.removeMirrorDir(mirror);
          FileUtil.delete(mirror); // make sure mirror is deleted
          LOG.info("Found invalid mirror directory: " + mirror.getAbsolutePath() + ", removed it straight away");
          return;
        }

        final String repository = myMirrorManager.getUrl(mirror.getName());
        if (repository == null) {
          myMirrorManager.removeMirrorDir(mirror);
          FileUtil.delete(mirror); // make sure mirror is deleted
          LOG.info("Found unused mirror directory: " + mirror.getAbsolutePath() + ", removed it straight away");
          return;
        }

        if (!repositoriesUsedInBuild.contains(repository)) {
          if (isCleanupEnabled(mirror)) {
            LOG.debug("Register cleaner for mirror " + mirror.getAbsolutePath());
            registry.addCleaner(mirror, new Date(myMirrorManager.getLastUsedTime(mirror)));
          } else {
            LOG.debug("Clean-up is disabled in " + repository + " (" + mirror.getName() + ")");
          }
        }
      });
      mirrors.remove(mirror);
    }

    for (File mirror : mirrors) {
      myMirrorManager.removeMirrorDir(mirror);
      LOG.debug("Found non existing mirror directory: " + mirror.getAbsolutePath() + ", removed it from the list of mirrors");
    }
  }