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
7bf4d943d5bb Update copyright
pavel.sher
parents: 891
diff changeset
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 }