changeset 880:ea8b15b97960

Implement MercurialProgress
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Sat, 04 Oct 2014 23:16:43 +0200
parents c0c1a3f4b6f7
children f697460552c8
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsOperationProgress.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialFetchCallbackProgress.java
diffstat 2 files changed, 98 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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;
+  }
+}
--- /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);
+  }
+}