Mercurial > hg > mercurial
view 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 |
line wrap: on
line source
/* * Copyright 2000-2018 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.buildServer.buildTriggers.vcs.mercurial; import jetbrains.buildServer.agent.BuildProgressLogger; import org.jetbrains.annotations.NotNull; import java.util.concurrent.atomic.AtomicInteger; public class MercurialBuildLogProgress implements MercurialProgress { private final BuildProgressLogger myLogger; private final AtomicInteger myBlockMessageCount = new AtomicInteger(0); private String myPrevMessage; private int myPrevPercents; public MercurialBuildLogProgress(@NotNull BuildProgressLogger logger) { myLogger = logger; } public void progressStarted(@NotNull String progressMessage) { myBlockMessageCount.set(0); myLogger.activityStarted(progressMessage, "CUSTOM_HG_PROGRESS"); } public void reportProgress(@NotNull String progressMessage) { myBlockMessageCount.incrementAndGet(); myLogger.message(progressMessage); } public void progressFinished(@NotNull String progressMessage) { if (myBlockMessageCount.get() == 0) myLogger.message("");//add an empty message so that the empty block is shown in UI myLogger.activityFinished(progressMessage, "CUSTOM_HG_PROGRESS"); } public void reportProgress(float percentage, @NotNull String stage) { if (percentage < 0) { resetPrevProgress(); reportProgress(stage); } else { int percents = (int) Math.floor(percentage * 100); if (!isDuplicate(stage, percents)) { myLogger.message(stage + " " + percents + "%"); updatePrevProgress(stage, percents); } } } private void resetPrevProgress() { myPrevMessage = null; myPrevPercents = -1; } private boolean isDuplicate(@NotNull String message, int percents) { return message.equals(myPrevMessage) && percents == myPrevPercents; } private void updatePrevProgress(@NotNull String message, int percents) { myPrevMessage = message; myPrevPercents = percents; } }