Mercurial > hg > mercurial
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 } |