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