# HG changeset patch # User Dmitry Neverov # Date 1412457403 -7200 # Node ID ea8b15b97960ad9e8b801353c3c33873d17dea61 # Parent c0c1a3f4b6f741932be4b4a23f8e9996d16f8be6 Implement MercurialProgress diff -r c0c1a3f4b6f7 -r ea8b15b97960 mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsOperationProgress.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsOperationProgress.java Sat Oct 04 23:16:43 2014 +0200 @@ -0,0 +1,62 @@ +/* + * Copyright 2000-2014 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.vcs.VcsOperationProgress; +import org.jetbrains.annotations.NotNull; + +public class MercurialVcsOperationProgress implements MercurialProgress { + + private final VcsOperationProgress myProgress; + private String myPrevMessage; + private int myPrevPercents; + + public MercurialVcsOperationProgress(@NotNull VcsOperationProgress progress) { + myProgress = progress; + } + + public void reportProgress(@NotNull String progressMessage) { + myProgress.reportProgress(progressMessage); + } + + public void reportProgress(float percentage, @NotNull String stage) { + if (percentage < 0) { + resetPrevProgress(); + myProgress.reportProgress(stage); + } else { + int percents = (int) Math.floor(percentage * 100); + if (!isDuplicate(stage, percents)) { + myProgress.reportProgress(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; + } +} diff -r c0c1a3f4b6f7 -r ea8b15b97960 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialFetchCallbackProgress.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialFetchCallbackProgress.java Sat Oct 04 23:16:43 2014 +0200 @@ -0,0 +1,36 @@ +/* + * Copyright 2000-2014 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.vcs.FetchService; +import org.jetbrains.annotations.NotNull; + +public class MercurialFetchCallbackProgress implements MercurialProgress { + + private final FetchService.FetchRepositoryCallback myCallback; + + public MercurialFetchCallbackProgress(@NotNull FetchService.FetchRepositoryCallback callback) { + myCallback = callback; + } + + public void reportProgress(@NotNull String progressMessage) { + } + + public void reportProgress(float percentage, @NotNull String stage) { + myCallback.update(percentage, stage); + } +}