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
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
1 /*
732
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 644
diff changeset
2 * Copyright 2000-2014 JetBrains s.r.o.
278
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
3 *
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
4 * Licensed under the Apache License, Version 2.0 (the "License");
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
5 * you may not use this file except in compliance with the License.
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
6 * You may obtain a copy of the License at
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
7 *
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
8 * http://www.apache.org/licenses/LICENSE-2.0
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
9 *
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
10 * Unless required by applicable law or agreed to in writing, software
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
11 * distributed under the License is distributed on an "AS IS" BASIS,
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
13 * See the License for the specific language governing permissions and
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
14 * limitations under the License.
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
15 */
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
17
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
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
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
25 import org.jetbrains.annotations.NotNull;
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
26
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
27 import java.io.File;
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
28
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
29 public class MercurialAgentSideVcsSupport extends AgentVcsSupport implements UpdateByIncludeRules2 {
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
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
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
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
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
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
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
44 }
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
45
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
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
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
82 }
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
83
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
84 @NotNull
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
85 @Override
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
86 public String getName() {
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
87 return Constants.VCS_NAME;
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
88 }
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
89
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
90 @NotNull
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
91 @Override
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
92 public UpdatePolicy getUpdatePolicy() {
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
93 return this;
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
94 }
dab8a8668430 Use utf-8
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 273
diff changeset
95 }