Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java @ 710:efd1d23a3ae6
disable local test
author | eugene.petrenko@jetbrains.com |
---|---|
date | Wed, 08 Jan 2014 22:47:35 +0100 |
parents | 1da36037196d |
children | 31a1aca3305c |
rev | line source |
---|---|
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
1 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
2 |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
3 import com.intellij.execution.process.ProcessNotCreatedException; |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
4 import com.intellij.openapi.diagnostic.Logger; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
5 import jetbrains.buildServer.ExecResult; |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
6 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.*; |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
7 import jetbrains.buildServer.util.StringUtil; |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
8 import jetbrains.buildServer.vcs.VcsException; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
9 import org.jetbrains.annotations.NotNull; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
10 import org.jetbrains.annotations.Nullable; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
11 |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
12 import java.io.IOException; |
387
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
13 import java.util.HashSet; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
14 import java.util.Set; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
15 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
16 import static com.intellij.openapi.util.text.StringUtil.isEmpty; |
387
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
17 import static java.util.Arrays.asList; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
18 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommandUtil.removePrivateData; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
19 |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
20 /** |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
21 * Mercurial command result. Filters out private data from stdout and detects errors. |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
22 * |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
23 * @author dmitry.neverov |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
24 */ |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
25 public class CommandResult { |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
26 |
387
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
27 //Mercurial returns -1 in the case of errors (see dispatch.py) |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
28 //and on some shells (e.g. windows cmd) it is truncated to 255. |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
29 //A non-zero exit code is not always an error: |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
30 //http://mercurial.selenic.com/bts/issue186 |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
31 //http://mercurial.selenic.com/bts/issue2189 |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
32 //e.g. pull command in hg 2.1 exits with 1 if no new changes were pulled. |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
33 private static final Set<Integer> ERROR_EXIT_CODES = setOf(-1, 255); |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
34 |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
35 private static final String MERCURIAL_NOT_FOUND_MESSAGE_PREFIX = "Cannot run program \""; |
431
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
36 private static final String MERCURIAL_NOT_FOUND_MESSAGE_SUFFIX1 = "No such file or directory"; |
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
37 private static final String MERCURIAL_NOT_FOUND_MESSAGE_SUFFIX2 = "The system cannot find the file specified"; |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
38 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
39 private final Logger myLogger; |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
40 private final String myCommand; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
41 private final ExecResult myDelegate; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 private final Set<String> myPrivateData; |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
43 private final CommandSettings mySettings; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
44 |
423
010d8663ac4d
TW-21384 better error message
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
45 public CommandResult(@NotNull Logger logger, |
010d8663ac4d
TW-21384 better error message
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
46 @NotNull String command, |
010d8663ac4d
TW-21384 better error message
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
47 @NotNull ExecResult execResult, |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
48 @NotNull Set<String> privateData, |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
49 @NotNull CommandSettings settings) { |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
50 myLogger = logger; |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
51 myCommand = command; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
52 myDelegate = execResult; |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
53 myPrivateData = privateData; |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
54 mySettings = settings; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
55 } |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
56 |
631
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
57 public int getExitCode() { |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
58 return myDelegate.getExitCode(); |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
59 } |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
60 |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
61 @NotNull |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
62 public String getStdout() { |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
63 return removePrivateData(myDelegate.getStdout(), myPrivateData); |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
64 } |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
65 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
66 public void checkCommandFailed() throws VcsException { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
67 checkFailure(false); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
68 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
69 |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
70 public void checkFailure(boolean failWhenStderrIsNonEmpty) throws VcsException { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
71 rethrowDetectedError(); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
72 if (isFailure()) |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
73 logAndThrowError(); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
74 String stderr = getStderr(); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
75 if (!isEmpty(stderr)) { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
76 if (failWhenStderrIsNonEmpty) |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
77 logAndThrowError(); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
78 else |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
79 logStderr(stderr); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
80 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
81 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
82 |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
83 private void logAndThrowError() throws VcsException { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
84 String message = createCommandLogMessage(); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
85 myLogger.warn(message); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
86 if (hasImportantException()) |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
87 myLogger.error("Error during executing '" + getCommand() + "'", getException()); |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
88 throwVcsException(getExceptionMessage()); |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
89 } |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
90 |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
91 private void throwVcsException(@NotNull String message) throws VcsException { |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
92 //noinspection ThrowableResultOfMethodCallIgnored |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
93 Throwable e = getException(); |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
94 if (isMercurialNotFoundException(e)) { |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
95 assert e != null; |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
96 throw new MercurialNotFoundException(myCommand, e); |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
97 } |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
98 throw new VcsException(message); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
99 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
100 |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
101 private boolean isMercurialNotFoundException(@Nullable Throwable e) { |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
102 return e instanceof ProcessNotCreatedException && |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
103 e.getCause() instanceof IOException && |
431
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
104 isMercurialNotFoundErrorMessage(e.getMessage()); |
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
105 } |
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
106 |
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
107 private boolean isMercurialNotFoundErrorMessage(@Nullable String message) { |
9a2b6a7a3381
Better detection of the case when mercurial not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
108 return message != null && |
505
aa67433a0c05
Detect yet another error from OS when hg executable not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
431
diff
changeset
|
109 (message.startsWith(MERCURIAL_NOT_FOUND_MESSAGE_PREFIX) && |
aa67433a0c05
Detect yet another error from OS when hg executable not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
431
diff
changeset
|
110 (message.endsWith(MERCURIAL_NOT_FOUND_MESSAGE_SUFFIX1) || |
aa67433a0c05
Detect yet another error from OS when hg executable not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
431
diff
changeset
|
111 message.endsWith(MERCURIAL_NOT_FOUND_MESSAGE_SUFFIX2)) || |
aa67433a0c05
Detect yet another error from OS when hg executable not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
431
diff
changeset
|
112 message.startsWith("CreateProcess") && message.endsWith("error=2")); |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
113 } |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
114 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
115 private void logStderr(String stderr) { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
116 myLogger.warn("Error output produced by: " + getCommand()); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
117 myLogger.warn(stderr); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
118 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
119 |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
120 @NotNull |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
121 private String getStderr() { |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
122 return removePrivateData(myDelegate.getStderr(), myPrivateData); |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
123 } |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
124 |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
125 @Nullable |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
126 private Throwable getException() { |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
127 return myDelegate.getException(); |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
128 } |
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
129 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
130 private boolean isFailure() { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
131 //noinspection ThrowableResultOfMethodCallIgnored |
386
00d13c910f5d
Some non-zero exit codes mean error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
132 return getException() != null || isErrorExitCode(); |
00d13c910f5d
Some non-zero exit codes mean error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
133 } |
00d13c910f5d
Some non-zero exit codes mean error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
134 |
00d13c910f5d
Some non-zero exit codes mean error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
135 private boolean isErrorExitCode() { |
00d13c910f5d
Some non-zero exit codes mean error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
136 int exitCode = myDelegate.getExitCode(); |
387
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
137 return ERROR_EXIT_CODES.contains(exitCode); |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
138 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
139 |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
140 private boolean shouldDetectErrors() { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
141 return isFailure() || myDelegate.getExitCode() != 0; |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
142 } |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
143 |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
144 @NotNull |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
145 private String getCommand() { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
146 return removePrivateData(myCommand, myPrivateData); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
147 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
148 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
149 private boolean hasImportantException() { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
423
diff
changeset
|
150 //noinspection ThrowableResultOfMethodCallIgnored |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
151 Throwable exception = getException(); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
152 return exception instanceof NullPointerException; |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
153 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
154 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
155 private String createCommandLogMessage() { |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
156 StringBuilder message = new StringBuilder(); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
157 message.append("'").append(getCommand()).append("' command failed."); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
158 String stderr = getStderr(); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
159 if (!isEmpty(stderr)) { |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
160 int logOutputLimit = mySettings.getLogOutputLimit(); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
161 if (logOutputLimit == -1) { |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
162 message.append("\nstderr:\n").append(stderr); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
163 } else { |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
164 message.append(StringUtil.truncateStringValueWithDotsAtEnd(stderr, logOutputLimit)); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
165 } |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
166 } |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
167 return message.toString(); |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
168 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
169 |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
170 private String getExceptionMessage() { |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
171 StringBuilder message = new StringBuilder(); |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
172 message.append("'").append(getCommand()).append("' command failed."); |
679
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
173 String stderr = getStderr(); |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
174 if (!isEmpty(stderr)) { |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
175 message.append("\n"); |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
176 int limit = mySettings.getExceptionOutputLimit(); |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
177 if (stderr.length() < limit || limit == -1) { |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
178 message.append("stderr: ").append(stderr); |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
179 } else { |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
180 if (limit > 4) |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
181 message.append("stderr: ").append(StringUtil.truncateStringValueWithDotsAtEnd(stderr, limit)); |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
182 message.append("\nSee details in teamcity-vcs.log"); |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
183 } |
1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
643
diff
changeset
|
184 } |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
577
diff
changeset
|
185 return message.toString(); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
186 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
187 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
188 private void rethrowDetectedError() throws VcsException { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
189 if (!shouldDetectErrors()) |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
190 return; |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
191 String stderr = getStderr().trim(); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
192 checkUnrelatedRepository(stderr); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
193 checkUnknownRevision(stderr); |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
194 checkFileNotUnderTheRoot(stderr); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
387
diff
changeset
|
195 checkConnectionRefused(stderr); |
627
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
596
diff
changeset
|
196 checkAbandonedTransaction(stderr); |
643
2f6c4b61686a
Don't throw errors for merge into same branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
631
diff
changeset
|
197 checkMergeWithWorkDirAncestor(stderr); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
198 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
199 |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
200 private void checkUnrelatedRepository(@NotNull final String stderr) throws UnrelatedRepositoryException { |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
201 if (stderr.contains("abort: repository is unrelated")) |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
202 throw new UnrelatedRepositoryException(); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
203 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
204 |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
205 private void checkUnknownRevision(@NotNull final String stderr) throws UnknownRevisionException { |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
206 final String message = "abort: unknown revision '"; |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
207 int idx = stderr.indexOf(message); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
208 if (idx != -1) { |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
209 int startIdx = idx + message.length(); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
210 int endIdx = stderr.indexOf("'", startIdx); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
211 String revision = stderr.substring(startIdx, endIdx); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
212 throw new UnknownRevisionException(revision); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
213 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
214 } |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
346
diff
changeset
|
215 |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
216 private void checkFileNotUnderTheRoot(@NotNull final String stderr) throws VcsException { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
217 final String prefix = "abort: "; |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
218 int idx = stderr.indexOf("abort: "); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
219 if (idx != -1) { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
220 int startIdx = idx + prefix.length(); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
221 int endIdx = stderr.indexOf(" not under root"); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
222 if (endIdx != -1) { |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
223 String path = stderr.substring(startIdx, endIdx); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
224 throw new UnknownFileException(path); |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
225 } |
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
226 } |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
227 } |
387
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
228 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
387
diff
changeset
|
229 private void checkConnectionRefused(@NotNull final String stderr) throws ConnectionRefusedException { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
387
diff
changeset
|
230 if (stderr.equals("abort: error: Connection refused")) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
387
diff
changeset
|
231 throw new ConnectionRefusedException(); |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
387
diff
changeset
|
232 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
387
diff
changeset
|
233 |
627
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
596
diff
changeset
|
234 private void checkAbandonedTransaction(@NotNull final String stderr) throws AbandonedTransactionFound { |
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
596
diff
changeset
|
235 if (stderr.contains("abort: abandoned transaction found - run hg recover")) |
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
596
diff
changeset
|
236 throw new AbandonedTransactionFound(); |
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
596
diff
changeset
|
237 } |
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
596
diff
changeset
|
238 |
643
2f6c4b61686a
Don't throw errors for merge into same branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
631
diff
changeset
|
239 private void checkMergeWithWorkDirAncestor(@NotNull final String stderr) throws MergeWithWorkingDirAncestor { |
2f6c4b61686a
Don't throw errors for merge into same branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
631
diff
changeset
|
240 if (stderr.equals("abort: merging with a working directory ancestor has no effect")) |
2f6c4b61686a
Don't throw errors for merge into same branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
631
diff
changeset
|
241 throw new MergeWithWorkingDirAncestor(); |
2f6c4b61686a
Don't throw errors for merge into same branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
631
diff
changeset
|
242 } |
2f6c4b61686a
Don't throw errors for merge into same branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
631
diff
changeset
|
243 |
387
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
244 private static Set<Integer> setOf(Integer... ints) { |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
245 return new HashSet<Integer>(asList(ints)); |
88480a85f888
Some exit codes mean errors
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
386
diff
changeset
|
246 } |
346
e8f0eb6d4ca4
Introduce CommandResult that filters out private data from ExecResult
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
247 } |