Mercurial > hg > mercurial
annotate mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialBuildLogProgress.java @ 1030:1c65ee703a92 release-84894
TW-64274 fix working dir may be locked on "hg pull"
author | nikolai.kulakov@DESKTOP-Q4QCGIH |
---|---|
date | Fri, 07 Aug 2020 12:13:57 +0300 |
parents | 7bf4d943d5bb |
children |
rev | line source |
---|---|
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
1 /* |
976 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
3 * |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
6 * You may obtain a copy of the License at |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
7 * |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
9 * |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
13 * See the License for the specific language governing permissions and |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
14 * limitations under the License. |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
15 */ |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
16 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
18 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
19 import jetbrains.buildServer.agent.BuildProgressLogger; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
20 import org.jetbrains.annotations.NotNull; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
21 |
891
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
22 import java.util.concurrent.atomic.AtomicInteger; |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
23 |
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
24 public class MercurialBuildLogProgress implements MercurialProgress { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
25 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
26 private final BuildProgressLogger myLogger; |
891
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
27 private final AtomicInteger myBlockMessageCount = new AtomicInteger(0); |
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
28 private String myPrevMessage; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
29 private int myPrevPercents; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
30 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
31 public MercurialBuildLogProgress(@NotNull BuildProgressLogger logger) { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
32 myLogger = logger; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
33 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
34 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
35 public void progressStarted(@NotNull String progressMessage) { |
891
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
36 myBlockMessageCount.set(0); |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
37 myLogger.activityStarted(progressMessage, "CUSTOM_HG_PROGRESS"); |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
38 } |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
39 |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
40 public void reportProgress(@NotNull String progressMessage) { |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
41 myBlockMessageCount.incrementAndGet(); |
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 myLogger.message(progressMessage); |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
43 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
44 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
45 public void progressFinished(@NotNull String progressMessage) { |
891
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
46 if (myBlockMessageCount.get() == 0) |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
47 myLogger.message("");//add an empty message so that the empty block is shown in UI |
d1a5fc6c1d6e
Log agent-side checkout progress with blocks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
887
diff
changeset
|
48 myLogger.activityFinished(progressMessage, "CUSTOM_HG_PROGRESS"); |
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
49 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
50 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
51 public void reportProgress(float percentage, @NotNull String stage) { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
52 if (percentage < 0) { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
53 resetPrevProgress(); |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
54 reportProgress(stage); |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
55 } else { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
56 int percents = (int) Math.floor(percentage * 100); |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
57 if (!isDuplicate(stage, percents)) { |
887
30e624f8c237
use regular messages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
886
diff
changeset
|
58 myLogger.message(stage + " " + percents + "%"); |
886
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
59 updatePrevProgress(stage, percents); |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
60 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
61 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
62 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
63 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
64 private void resetPrevProgress() { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
65 myPrevMessage = null; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
66 myPrevPercents = -1; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
67 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
68 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
69 private boolean isDuplicate(@NotNull String message, int percents) { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
70 return message.equals(myPrevMessage) && percents == myPrevPercents; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
71 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
72 |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
73 private void updatePrevProgress(@NotNull String message, int percents) { |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
74 myPrevMessage = message; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
75 myPrevPercents = percents; |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
76 } |
bf83331f51f0
Report agent-side checkout progress to build log
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
77 } |