Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java @ 999:1b1cc811e1b6 Jaipur-2018.1.x
Jaipur-2018.1.x branch created
author | pavel.sher |
---|---|
date | Thu, 21 Jun 2018 17:37:32 +0200 |
parents | 7bf4d943d5bb |
children | 6e4a700806e4 |
rev | line source |
---|---|
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
1 /* |
976 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
3 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
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:
256
diff
changeset
|
6 * You may obtain a copy of the License at |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
7 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
9 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
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:
256
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:
256
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:
256
diff
changeset
|
13 * See the License for the specific language governing permissions and |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
14 * limitations under the License. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
15 */ |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
17 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
18 import jetbrains.buildServer.vcs.VcsException; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
19 import org.jetbrains.annotations.NotNull; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
20 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
21 import java.io.File; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
22 import java.io.IOException; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
23 |
497
ed098534dab4
TW-15304 disable interactive user prompt
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
480
diff
changeset
|
24 public class CloneCommand extends AuthCommand { |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
25 private String myToId; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
26 private boolean myUpdateWorkingDir = true; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
27 private String myRepository; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
28 private File myWorkingDir; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
29 private boolean myUsePullProtocol = true; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
30 private boolean myUseUncompressedTransfer = false; |
453
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
31 private boolean myTraceback; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
32 |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
453
diff
changeset
|
33 public CloneCommand(@NotNull CommandSettings commandSettings, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
453
diff
changeset
|
34 @NotNull String hgPath, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
453
diff
changeset
|
35 @NotNull File workingDir, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
453
diff
changeset
|
36 @NotNull AuthSettings authSettings) { |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
453
diff
changeset
|
37 super(commandSettings, hgPath, workingDir, authSettings); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
38 myWorkingDir = workingDir; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
39 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
40 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
41 public CloneCommand fromRepository(@NotNull String repositoryUrl) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
42 myRepository = repositoryUrl; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
43 return this; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
44 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
45 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
46 public CloneCommand fromRepository(@NotNull File localRepository) throws IOException { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
47 return fromRepository(localRepository.getCanonicalPath()); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
48 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
49 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
50 public CloneCommand toRevision(@NotNull String revision) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
51 return toRevision(new ChangeSet(revision)); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
52 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
53 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
54 public CloneCommand toRevision(@NotNull ChangeSet cset) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
55 myToId = cset.getId(); |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
56 return this; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
57 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
58 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
59 public CloneCommand setUpdateWorkingDir(boolean doUpdateWorkingDir) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
60 myUpdateWorkingDir = doUpdateWorkingDir; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
61 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
62 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
63 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
64 public CloneCommand useUncompressedTransfer(boolean doUseUncompressedTransfer) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
65 myUseUncompressedTransfer = doUseUncompressedTransfer; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
66 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
67 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
68 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
69 public CloneCommand setUsePullProtocol(boolean usePullProtocol) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
70 myUsePullProtocol = usePullProtocol; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
71 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
72 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
73 |
453
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
74 public CloneCommand withTraceback(boolean runWithTraceback) { |
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
75 myTraceback = runWithTraceback; |
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
76 return this; |
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
77 } |
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
78 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
79 public void call() throws VcsException { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
80 myWorkingDir.mkdirs(); |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
453
diff
changeset
|
81 MercurialCommandLine cli = createCommandLine(); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
82 File parent = myWorkingDir.getParentFile(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
83 cli.setWorkDirectory(parent.getAbsolutePath()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
84 cli.addParameter("clone"); |
453
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
85 if (myTraceback) |
dc95d4468323
Ability to run commands with traceback
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
86 cli.addParameter("--traceback"); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
87 if (myToId != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
88 cli.addParameter("-r"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
89 cli.addParameter(myToId); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
90 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
91 if (myUsePullProtocol) |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
92 cli.addParameter("--pull"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
93 if (!myUpdateWorkingDir) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
94 cli.addParameter("-U"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
95 } |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
96 if (myUseUncompressedTransfer) { |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
97 cli.addParameter("--uncompressed"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
98 } |
798
ea26bc72db7f
Run clone and pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
732
diff
changeset
|
99 |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
100 CommandSettings settings = myCommandSettings.setTimeout(24 * 3600); // some repositories are quite large, we set timeout to 24 hours |
883
39ff04730ccc
Report more vcs operation progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
799
diff
changeset
|
101 if (settings.getProgressConsumer() != null) { |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
102 cli.addParameters("--config", "extensions.progress="); |
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
103 cli.addParameters("--config", "progress.format=topic number"); |
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
104 cli.addParameters("--config", "progress.delay=0"); |
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
105 cli.addParameters("--config", "progress.assume-tty=True"); |
891
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
890
diff
changeset
|
106 cli.setHasProgress(true); |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
107 } |
798
ea26bc72db7f
Run clone and pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
732
diff
changeset
|
108 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
109 String repositoryUrl = myAuthSettings.getRepositoryUrlWithCredentials(myRepository); |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
110 cli.addParameter(repositoryUrl); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
111 cli.addParameter(myWorkingDir.getName()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
112 |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
798
diff
changeset
|
113 runCommand(cli, settings); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
114 } |
890
771ae1b2f0b1
More command descriptions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
883
diff
changeset
|
115 |
771ae1b2f0b1
More command descriptions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
883
diff
changeset
|
116 @NotNull |
771ae1b2f0b1
More command descriptions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
883
diff
changeset
|
117 @Override |
771ae1b2f0b1
More command descriptions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
883
diff
changeset
|
118 protected String getDescription() { |
771ae1b2f0b1
More command descriptions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
883
diff
changeset
|
119 return "hg clone " + myAuthSettings.getRepositoryUrlWithHiddenPassword(myRepository); |
771ae1b2f0b1
More command descriptions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
883
diff
changeset
|
120 } |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
256
diff
changeset
|
121 } |