Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java @ 596:a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Mon, 29 Apr 2013 14:23:20 +0400 |
parents | fa40f53ec019 |
children | 31a1aca3305c |
rev | line source |
---|---|
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
1 /* |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
2 * Copyright 2000-2011 JetBrains s.r.o. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
3 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
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:
200
diff
changeset
|
6 * You may obtain a copy of the License at |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
7 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
9 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
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:
200
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:
200
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:
200
diff
changeset
|
13 * See the License for the specific language governing permissions and |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
14 * limitations under the License. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
15 */ |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
17 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
18 import jetbrains.buildServer.ExecResult; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
19 import jetbrains.buildServer.SimpleCommandLineProcessRunner; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
20 import jetbrains.buildServer.log.Loggers; |
580 | 21 import jetbrains.buildServer.util.StringUtil; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
22 import jetbrains.buildServer.vcs.VcsException; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
23 import org.jetbrains.annotations.NotNull; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
24 |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
25 import java.io.File; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
26 import java.util.Set; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
27 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
28 public class CommandUtil { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
29 |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
30 public static CommandResult runCommand(@NotNull MercurialCommandLine cli, @NotNull CommandSettings settings) throws VcsException { |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
31 final String command = removePrivateData(cli.getCommandLineString(), settings.getPrivateData()); |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
32 logRunCommand(cli, command, settings); |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
580
diff
changeset
|
33 CommandResult res = run(cli, settings.getTimeout(), command, settings.getPrivateData(), settings); |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
34 if (settings.isCheckForFailure() || settings.isFailWithNonEmptyStderr()) |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
35 res.checkFailure(settings.isFailWithNonEmptyStderr()); |
578
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
36 logCommandOutput(command, res, settings); |
347 | 37 return res; |
38 } | |
39 | |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
40 private static CommandResult run(@NotNull final MercurialCommandLine cli, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
41 final int executionTimeout, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
42 @NotNull final String command, |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
580
diff
changeset
|
43 @NotNull final Set<String> privateData, |
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
580
diff
changeset
|
44 @NotNull CommandSettings settings) { |
298
9b9fd71911eb
Log the duration of executed command
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
297
diff
changeset
|
45 final long start = System.currentTimeMillis(); |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
480
diff
changeset
|
46 ExecResult res = SimpleCommandLineProcessRunner.runCommand(cli, null, new SimpleCommandLineProcessRunner.ProcessRunCallbackAdapter() { |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
47 @Override |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
48 public Integer getOutputIdleSecondsTimeout() { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
49 return executionTimeout; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
50 } |
298
9b9fd71911eb
Log the duration of executed command
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
297
diff
changeset
|
51 @Override |
9b9fd71911eb
Log the duration of executed command
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
297
diff
changeset
|
52 public void onProcessFinished(Process ps) { |
9b9fd71911eb
Log the duration of executed command
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
297
diff
changeset
|
53 long duration = System.currentTimeMillis() - start; |
367
061e5f3a6bad
Make plugin compatible with mercurial 2.1
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
349
diff
changeset
|
54 Loggers.VCS.debug("Command " + command + " took " + duration + "ms"); |
298
9b9fd71911eb
Log the duration of executed command
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
297
diff
changeset
|
55 } |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
56 }); |
596
a37960e1f0a0
Log stderr when hg command fails to ease troubleshooting
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
580
diff
changeset
|
57 return new CommandResult(Loggers.VCS, command, res, privateData, settings); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
58 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
59 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
60 public static String removePrivateData(final String str, final Set<String> privateData) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
61 String result = str; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
62 for (String data: privateData) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
63 if (data == null || data.length() == 0) continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
64 result = result.replace(data, "******"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
65 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
66 return result; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
67 } |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
68 |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
69 private static void logRunCommand(@NotNull MercurialCommandLine cmd, @NotNull String command, @NotNull CommandSettings settings) { |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
70 String workingDir = cmd.getWorkingDirectory(); |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
71 String dir = workingDir != null ? workingDir : new File(".").getAbsolutePath(); |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
72 String message = "[" + dir + "] " + command; |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
73 if ("debug".equals(settings.getLogLevel())) { |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
74 Loggers.VCS.debug(message); |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
75 } else { |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
76 Loggers.VCS.info(message); |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
77 } |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
78 } |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
79 |
578
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
80 private static void logCommandOutput(@NotNull String command, @NotNull CommandResult result, @NotNull CommandSettings settings) { |
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
81 int limit = settings.getLogOutputLimit(); |
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
82 if (limit == -1) { |
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
83 Loggers.VCS.debug("Command " + command + " output:\n" + result.getStdout()); |
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
84 } else { |
580 | 85 Loggers.VCS.debug("Command " + command + " output:\n" + StringUtil.truncateStringValueWithDotsAtEnd(result.getStdout(), limit)); |
578
40c085517770
Truncate command output in the logs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
558
diff
changeset
|
86 } |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
367
diff
changeset
|
87 } |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
200
diff
changeset
|
88 } |