Mercurial > hg > mercurial
annotate mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java @ 280:8c1fd2e565ae
Implement mercurial detection on the agents
When agent starts, hg-plugin detects installed hg (searches it in the
$PATH). If plugin is able to run hg and hg has an approrpiate version
(1.5.2+), then plugin reports path to hg in the
'teamcity.hg.agent.path' parameter. This parameter can be used in the
"HG command path" field in a VCS root settings, configurations with
such root will be run only on agents which report path to hg. Also
user can set this parameter manually in the buildAgent.properties.
A server side of plugin first checks value of internal property
'teamcity.hg.server.path' and if property is set, its value is used.
Second, plugin tries to use path from the settings of VCS root: if
path is equal to '%teamcity.hg.agent.path%' - use 'hg' as path,
otherwise use a value from the root. With such order old setups, where
path in the VCS root was used on both server and agent, will continue
to work. New VCS roots with references in the path will also work if
hg is in the $PATH on the server or internal property is set.
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Fri, 19 Aug 2011 15:21:38 +0400 |
parents | f80e17ac2da6 |
children | e9cdb499350d |
rev | line source |
---|---|
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
1 /* |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
2 * Copyright 2000-2011 JetBrains s.r.o. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
3 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
6 * You may obtain a copy of the License at |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
7 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
9 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
13 * See the License for the specific language governing permissions and |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
14 * limitations under the License. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
15 */ |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
17 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
18 import jetbrains.buildServer.agent.AgentRunningBuild; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
19 import jetbrains.buildServer.agent.BuildAgentConfiguration; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
20 import jetbrains.buildServer.agent.BuildProgressLogger; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
21 import jetbrains.buildServer.agent.vcs.AgentVcsSupport; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
22 import jetbrains.buildServer.agent.vcs.IncludeRuleUpdater; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
23 import jetbrains.buildServer.agent.vcs.UpdateByIncludeRules2; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
24 import jetbrains.buildServer.agent.vcs.UpdatePolicy; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
25 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
26 import jetbrains.buildServer.util.FileUtil; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
27 import jetbrains.buildServer.vcs.CheckoutRules; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
28 import jetbrains.buildServer.vcs.IncludeRule; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
29 import jetbrains.buildServer.vcs.VcsException; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
30 import jetbrains.buildServer.vcs.VcsRoot; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
31 import org.jetbrains.annotations.NotNull; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
32 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
33 import java.io.File; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
34 import java.io.IOException; |
277
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
35 import java.util.Collections; |
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
36 |
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
37 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommandUtil.removePrivateData; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
38 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
39 public class MercurialAgentSideVcsSupport extends AgentVcsSupport implements UpdateByIncludeRules2 { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
40 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
41 private final MirrorManager myMirrorManager; |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
42 private final HgPathProvider myHgPathProvider; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
43 |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
44 public MercurialAgentSideVcsSupport(@NotNull final BuildAgentConfiguration agentConfiguration, |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
45 @NotNull final HgPathProvider hgPathProvider) { |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
46 myMirrorManager = new MirrorManager(agentConfiguration.getCacheDirectory("mercurial")); |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
47 myHgPathProvider = hgPathProvider; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
48 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
49 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
50 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 { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
51 final BuildProgressLogger logger = build.getBuildLogger(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
52 final boolean useLocalMirrors = isUseLocalMirrors(build); |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
53 |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
54 return new IncludeRuleUpdater() { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
55 public void process(@NotNull final IncludeRule includeRule, @NotNull final File workingDir) throws VcsException { |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
56 try { |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
57 checkRuleIsValid(includeRule); |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
58 Settings settings = new Settings(myHgPathProvider, vcsRoot); |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
59 if (useLocalMirrors) { |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
60 updateLocalMirror(vcsRoot, logger); |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
61 } |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
62 updateRepository(workingDir, settings, logger, useLocalMirrors); |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
63 updateWorkingDir(settings, workingDir, toVersion, logger); |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
64 } catch (Exception e) { |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
65 if (e instanceof VcsException) |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
66 throw (VcsException) e; |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
67 else |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
68 throw new VcsException(e); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
69 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
70 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
71 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
72 public void dispose() throws VcsException { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
73 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
74 }; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
75 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
76 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
77 @NotNull |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
78 @Override |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
79 public String getName() { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
80 return Constants.VCS_NAME; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
81 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
82 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
83 @NotNull |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
84 @Override |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
85 public UpdatePolicy getUpdatePolicy() { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
86 return this; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
87 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
88 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
89 private boolean isUseLocalMirrors(AgentRunningBuild build) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
90 String value = build.getSharedConfigParameters().get("teamcity.hg.use.local.mirrors"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
91 return "true".equals(value); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
92 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
93 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
94 private void initRepository(File workingDir, Settings settings, BuildProgressLogger logger, boolean useLocalMirrors) throws VcsException { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
95 try { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
96 String defaultPullUrl = getDefaultPullUrl(settings, useLocalMirrors); |
277
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
97 logger.message("Init repository at " + workingDir.getAbsolutePath() + ", remote repository is " + |
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
98 removePrivateData(defaultPullUrl, Collections.singleton(settings.getPassword()))); |
271
c0540bbe7c2a
Revert premature commit. Parents are not part of API yet
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
268
diff
changeset
|
99 new Init(settings, workingDir, defaultPullUrl).execute(); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
100 } catch (IOException e) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
101 throw new VcsException("Error while initializing repository at " + workingDir.getAbsolutePath(), e); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
102 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
103 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
104 |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
105 private void updateRepository(File workingDir, Settings settings, BuildProgressLogger logger, boolean useLocalMirrors) throws VcsException, IOException { |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
106 if (!Settings.isValidRepository(workingDir)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
107 initRepository(workingDir, settings, logger, useLocalMirrors); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
108 } else { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
109 ensureUseRightRepository(workingDir, settings, logger, useLocalMirrors); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
110 } |
277
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
111 String defaultPullUrl = getDefaultPullUrl(settings, useLocalMirrors); |
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
112 logger.message("Start pulling changes from " + removePrivateData(defaultPullUrl, Collections.singleton(settings.getPassword()))); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
113 new PullCommand(settings, workingDir).execute(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
114 logger.message("Changes successfully pulled"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
115 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
116 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
117 private void ensureUseRightRepository(File workingDir, Settings settings, BuildProgressLogger logger, boolean useLocalMirrors) throws VcsException { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
118 boolean clonedFromWrongRepository = useLocalMirrors && !isClonedFromLocalMirror(settings, workingDir) |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
119 || !useLocalMirrors && isClonedFromLocalMirror(settings, workingDir); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
120 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
121 if (clonedFromWrongRepository) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
122 String rightRepository = useLocalMirrors ? "local mirror" : "remote repository"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
123 String wrongRepository = useLocalMirrors ? "remote repository" : "local mirror"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
124 logger.message("Repository in working directory is cloned from " + wrongRepository + ", clone it from " + rightRepository); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
125 FileUtil.delete(workingDir); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
126 initRepository(workingDir, settings, logger, useLocalMirrors); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
127 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
128 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
129 |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
130 private void updateLocalMirror(VcsRoot root, BuildProgressLogger logger) throws VcsException, IOException { |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
277
diff
changeset
|
131 Settings settings = new Settings(myHgPathProvider, root); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
132 File mirrorDir = myMirrorManager.getMirrorDir(settings.getRepositoryUrl()); |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
133 logger.message("Update local mirror at " + mirrorDir); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
134 if (!Settings.isValidRepository(mirrorDir)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
135 initRepository(mirrorDir, settings, logger, false); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
136 } |
277
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
137 final String defaultPullUrl = getDefaultPullUrl(settings, true); |
f80e17ac2da6
Remove private data from the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
272
diff
changeset
|
138 logger.message("Start pulling changes from " + removePrivateData(defaultPullUrl, Collections.singleton(settings.getPassword()))); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
139 new PullCommand(settings, mirrorDir).execute(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
140 logger.message("Local mirror changes successfully pulled"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
141 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
142 |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
143 private void updateWorkingDir(final Settings settings, File workingDir, @NotNull final String version, final BuildProgressLogger logger) throws VcsException { |
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
144 logger.message("Updating folder " + workingDir.getAbsolutePath() + " to revision " + version); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
145 UpdateCommand uc = new UpdateCommand(settings, workingDir); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
146 ChangeSet cs = new ChangeSet(version); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
147 uc.setToId(cs.getId()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
148 uc.execute(); |
272
5fd8b9e79e5b
Improve logging
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
149 logger.message("Folder successfully updated"); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
150 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
151 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
152 private String getDefaultPullUrl(Settings settings, boolean useLocalMirror) throws IOException { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
153 if (useLocalMirror) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
154 File mirrorDir = myMirrorManager.getMirrorDir(settings.getRepositoryUrl()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
155 return mirrorDir.getCanonicalPath(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
156 } else { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
157 return settings.getRepositoryUrl(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
158 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
159 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
160 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
161 private void checkRuleIsValid(IncludeRule includeRule) throws VcsException { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
162 if (includeRule.getTo() != null && includeRule.getTo().length() > 0) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
163 if (!".".equals(includeRule.getFrom()) && includeRule.getFrom().length() != 0) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
164 throw new VcsException("Invalid include rule: " + includeRule.toString() + ", Mercurial plugin supports mapping of the form: +:.=>dir only."); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
165 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
166 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
167 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
168 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
169 public boolean isClonedFromLocalMirror(Settings settings, File workingDir) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
170 try { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
171 File mirrorDir = myMirrorManager.getMirrorDir(settings.getRepositoryUrl()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
172 File hgrc = new File(workingDir, ".hg" + File.separator + "hgrc"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
173 String config = FileUtil.readText(hgrc); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
174 return config.contains("default = " + mirrorDir.getCanonicalPath()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
175 } catch (Exception e) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
176 return false; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
177 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
178 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
213
diff
changeset
|
179 } |