annotate mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleaner.java @ 785:427f550c4554

Implement FetchService
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Tue, 29 Apr 2014 17:10:46 +0200
parents 31a1aca3305c
children 7bf4d943d5bb
rev   line source
732
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
1 /*
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
2 * Copyright 2000-2014 JetBrains s.r.o.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
3 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
4 * Licensed under the Apache License, Version 2.0 (the "License");
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
5 * you may not use this file except in compliance with the License.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
6 * You may obtain a copy of the License at
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
7 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
8 * http://www.apache.org/licenses/LICENSE-2.0
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
9 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
10 * Unless required by applicable law or agreed to in writing, software
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
11 * distributed under the License is distributed on an "AS IS" BASIS,
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
13 * See the License for the specific language governing permissions and
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
14 * limitations under the License.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
15 */
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 569
diff changeset
16
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
18
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
19 import com.intellij.openapi.diagnostic.Logger;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
20 import jetbrains.buildServer.agent.DirectoryCleanersProvider;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
21 import jetbrains.buildServer.agent.DirectoryCleanersProviderContext;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
22 import jetbrains.buildServer.agent.DirectoryCleanersRegistry;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
23 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.AuthSettings;
426
c91c4f1ebd53 Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 424
diff changeset
24 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot;
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
25 import jetbrains.buildServer.vcs.VcsRoot;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
26 import jetbrains.buildServer.vcs.VcsRootEntry;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
27 import org.jetbrains.annotations.NotNull;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
28
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
29 import java.io.File;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
30 import java.util.Date;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
31 import java.util.HashSet;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
32 import java.util.Map;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
33 import java.util.Set;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
34
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
35 /**
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
36 * @author dmitry.neverov
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
37 */
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
38 public class AgentMirrorCleaner implements DirectoryCleanersProvider {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
39
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
40 private final static Logger ourLog = Logger.getInstance(AgentMirrorCleaner.class.getName());
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
41 private final MirrorManager myMirrorManager;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
42
429
04eab204ba39 Remove HgVcsRoot's dependency on HgPathProvider
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
43 public AgentMirrorCleaner(@NotNull final MirrorManager mirrorManager) {
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
44 myMirrorManager = mirrorManager;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
45 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
46
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
47 @NotNull
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
48 public String getCleanerName() {
500
2ae148bb5373 Better cleaner name
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 429
diff changeset
49 return "Mercurial mirrors cleaner";
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
50 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
51
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
52 public void registerDirectoryCleaners(@NotNull DirectoryCleanersProviderContext context,
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
53 @NotNull DirectoryCleanersRegistry registry) {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
54 Set<String> repositoriesUsedInBuild = getRunningBuildRepositories(context);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
55 for (Map.Entry<String, File> entry : myMirrorManager.getMappings().entrySet()) {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
56 String repository = entry.getKey();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
57 File mirror = entry.getValue();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
58 if (!repositoriesUsedInBuild.contains(repository)) {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
59 ourLog.debug("Register cleaner for mirror " + mirror.getAbsolutePath());
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
60 registry.addCleaner(mirror, new Date(myMirrorManager.getLastUsedTime(mirror)));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
61 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
62 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
63 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
64
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
65 private Set<String> getRunningBuildRepositories(@NotNull DirectoryCleanersProviderContext context) {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
66 Set<String> repositories = new HashSet<String>();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
67 for (VcsRootEntry entry : context.getRunningBuild().getVcsRootEntries()) {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
68 VcsRoot root = entry.getVcsRoot();
569
7ca3303cfc9e Fix NPE during mirrors cleanup
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 500
diff changeset
69 if (!isHgRoot(root))
7ca3303cfc9e Fix NPE during mirrors cleanup
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 500
diff changeset
70 continue;
429
04eab204ba39 Remove HgVcsRoot's dependency on HgPathProvider
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
71 HgVcsRoot hgRoot = new HgVcsRoot(root);
426
c91c4f1ebd53 Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 424
diff changeset
72 AuthSettings auth = hgRoot.getAuthSettings();
c91c4f1ebd53 Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 424
diff changeset
73 ourLog.debug("Repository " + auth.getRepositoryUrlWithHiddenPassword(hgRoot.getRepository()) +
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
74 " is used in the build, its mirror won't be cleaned");
426
c91c4f1ebd53 Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 424
diff changeset
75 repositories.add(hgRoot.getRepository());
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
76 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
77 return repositories;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
78 }
569
7ca3303cfc9e Fix NPE during mirrors cleanup
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 500
diff changeset
79
7ca3303cfc9e Fix NPE during mirrors cleanup
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 500
diff changeset
80 private boolean isHgRoot(@NotNull VcsRoot root) {
7ca3303cfc9e Fix NPE during mirrors cleanup
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 500
diff changeset
81 return Constants.VCS_NAME.equals(root.getVcsName());
7ca3303cfc9e Fix NPE during mirrors cleanup
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 500
diff changeset
82 }
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
83 }