Mercurial > hg > mercurial
view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ProgressParser.java @ 976:7bf4d943d5bb
Update copyright
author | pavel.sher |
---|---|
date | Mon, 22 Jan 2018 11:39:20 +0100 |
parents | a421a669588c |
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.command; import jetbrains.buildServer.LineAwareByteArrayOutputStream; import org.jetbrains.annotations.NotNull; public class ProgressParser implements LineAwareByteArrayOutputStream.LineListener { private final ProgressConsumer myConsumer; public ProgressParser(@NotNull ProgressConsumer consumer) { myConsumer = consumer; } public interface ProgressConsumer { void consume(float progress, @NotNull String stage); } public void newLineDetected(@NotNull String line) { String trimmed = line.trim(); if (trimmed.isEmpty()) return; int spaceIdx = trimmed.indexOf(' '); if (spaceIdx == -1) { myConsumer.consume(-1, trimmed); return; } String stage = trimmed.substring(0, spaceIdx); String progress = trimmed.substring(spaceIdx).trim(); int ratioIdx = progress.indexOf('/'); if (ratioIdx == -1 || ratioIdx == trimmed.length() - 1) { myConsumer.consume(-1, trimmed); return; } try { int nom = Integer.parseInt(progress.substring(0, ratioIdx)); int denom = Integer.parseInt(progress.substring(ratioIdx+1)); myConsumer.consume(nom * 1.0f / denom, stage); } catch (NumberFormatException e) { myConsumer.consume(-1, trimmed); } } }