Mercurial > hg > mercurial
annotate mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java @ 935:eb3e0285ae52
TW-43138 Migrate to fresh auto checkout api
author | Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net |
---|---|
date | Wed, 11 Nov 2015 21:03:31 +0300 |
parents | 3db6c332fc3b |
children | 68160fb667b1 |
rev | line source |
---|---|
278 | 1 /* |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
644
diff
changeset
|
2 * Copyright 2000-2014 JetBrains s.r.o. |
278 | 3 * |
4 * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 * you may not use this file except in compliance with the License. | |
6 * You may obtain a copy of the License at | |
7 * | |
8 * http://www.apache.org/licenses/LICENSE-2.0 | |
9 * | |
10 * Unless required by applicable law or agreed to in writing, software | |
11 * distributed under the License is distributed on an "AS IS" BASIS, | |
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 * See the License for the specific language governing permissions and | |
14 * limitations under the License. | |
15 */ | |
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial; | |
17 | |
18 import jetbrains.buildServer.agent.AgentRunningBuild; | |
934
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
19 import jetbrains.buildServer.agent.vcs.*; |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
20 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
21 import jetbrains.buildServer.buildTriggers.vcs.mercurial.ext.CheckoutInfo; |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
22 import jetbrains.buildServer.buildTriggers.vcs.mercurial.ext.MercurialExtension; |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
23 import jetbrains.buildServer.buildTriggers.vcs.mercurial.ext.MercurialExtensionManager; |
934
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
24 import jetbrains.buildServer.vcs.*; |
278 | 25 import org.jetbrains.annotations.NotNull; |
26 | |
27 import java.io.File; | |
28 | |
29 public class MercurialAgentSideVcsSupport extends AgentVcsSupport implements UpdateByIncludeRules2 { | |
30 | |
330
dd55596a5753
Add ability to specify timeout for pull operation (teamcity.hg.pull.timeout.seconds)
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
322
diff
changeset
|
31 private final AgentPluginConfig myConfig; |
278 | 32 private final MirrorManager myMirrorManager; |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
356
diff
changeset
|
33 private final AgentRepoFactory myRepoFactory; |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
34 private final MercurialExtensionManager myExtentionManager; |
278 | 35 |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
356
diff
changeset
|
36 public MercurialAgentSideVcsSupport(@NotNull AgentPluginConfig pluginConfig, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
356
diff
changeset
|
37 @NotNull MirrorManager mirrorManager, |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
38 @NotNull AgentRepoFactory repoFactory, |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
39 @NotNull MercurialExtensionManager extentionManager) { |
330
dd55596a5753
Add ability to specify timeout for pull operation (teamcity.hg.pull.timeout.seconds)
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
322
diff
changeset
|
40 myConfig = pluginConfig; |
356
53b430731041
TW-19984 ensure map file cleaned as well
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
355
diff
changeset
|
41 myMirrorManager = mirrorManager; |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
356
diff
changeset
|
42 myRepoFactory = repoFactory; |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
43 myExtentionManager = extentionManager; |
278 | 44 } |
45 | |
46 public IncludeRuleUpdater getUpdater(@NotNull final VcsRoot vcsRoot, @NotNull final CheckoutRules checkoutRules, @NotNull final String toVersion, @NotNull final File checkoutDirectory, @NotNull final AgentRunningBuild build, boolean cleanCheckoutRequested) throws VcsException { | |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
47 MercurialIncludeRuleUpdater updater; |
896
4e29b1244707
Add VCS root option to use shared mirrors during agent-side checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
857
diff
changeset
|
48 if (myConfig.shareLocalMirrors(build, vcsRoot)) { |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
49 updater = new SharingMercurialUpdater(myConfig, myMirrorManager, myRepoFactory, vcsRoot, toVersion, build); |
846
cea91fa66d3b
Support sharing local mirror clones on agent
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
732
diff
changeset
|
50 } else { |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
51 updater = new MercurialIncludeRuleUpdater(myConfig, myMirrorManager, myRepoFactory, vcsRoot, toVersion, build); |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
52 } |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
53 registerExtensions(vcsRoot, checkoutRules, updater); |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
54 return updater; |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
55 } |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
56 |
934
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
57 @NotNull |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
58 @Override |
935
eb3e0285ae52
TW-43138 Migrate to fresh auto checkout api
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
934
diff
changeset
|
59 public AgentCheckoutAbility canCheckout(@NotNull VcsRoot vcsRoot, @NotNull CheckoutRules checkoutRules, @NotNull AgentRunningBuild build) { |
eb3e0285ae52
TW-43138 Migrate to fresh auto checkout api
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
934
diff
changeset
|
60 CheckoutInfo info = new CheckoutInfo(myRepoFactory, new HgVcsRoot(vcsRoot), checkoutRules); |
934
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
61 try { |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
62 info.getTempDirRepo().version().call(); |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
63 } catch (VcsException e) { |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
64 return AgentCheckoutAbility.noVcsClientOnAgent(e.getMessage()); |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
65 } |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
66 |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
67 try { |
935
eb3e0285ae52
TW-43138 Migrate to fresh auto checkout api
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
934
diff
changeset
|
68 for (IncludeRule rule : checkoutRules.getRootIncludeRules()) { |
934
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
69 MercurialIncludeRuleUpdater.checkRuleIsValid(rule); |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
70 } |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
71 return AgentCheckoutAbility.canCheckout(); |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
72 } catch (VcsException e) { |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
73 return AgentCheckoutAbility.canNotCheckout(e.getMessage()); |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
74 } |
3db6c332fc3b
TW-43138 Implement auto checkout
Dmitry.Treskunov@UNIT-412.Labs.IntelliJ.Net
parents:
896
diff
changeset
|
75 } |
856
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
76 |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
77 private void registerExtensions(@NotNull VcsRoot root, @NotNull CheckoutRules checkoutRules, @NotNull MercurialIncludeRuleUpdater updater) { |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
78 CheckoutInfo info = new CheckoutInfo(myRepoFactory, new HgVcsRoot(root), checkoutRules); |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
79 for (MercurialExtension ext :myExtentionManager.getExtensionsForCheckout(info)) { |
a11bcfb63f4f
Support sparse checkout
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
846
diff
changeset
|
80 updater.registerExtension(ext); |
846
cea91fa66d3b
Support sharing local mirror clones on agent
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
732
diff
changeset
|
81 } |
278 | 82 } |
83 | |
84 @NotNull | |
85 @Override | |
86 public String getName() { | |
87 return Constants.VCS_NAME; | |
88 } | |
89 | |
90 @NotNull | |
91 @Override | |
92 public UpdatePolicy getUpdatePolicy() { | |
93 return this; | |
94 } | |
95 } |