/* | |
* Copyright (C) 2008-2010, Google Inc. | |
* and other copyright owners as documented in the project's IP log. | |
* | |
* This program and the accompanying materials are made available | |
* under the terms of the Eclipse Distribution License v1.0 which | |
* accompanies this distribution, is reproduced below, and is | |
* available at http://www.eclipse.org/org/documents/edl-v10.php | |
* | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or | |
* without modification, are permitted provided that the following | |
* conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* | |
* - Redistributions in binary form must reproduce the above | |
* copyright notice, this list of conditions and the following | |
* disclaimer in the documentation and/or other materials provided | |
* with the distribution. | |
* | |
* - Neither the name of the Eclipse Foundation, Inc. nor the | |
* names of its contributors may be used to endorse or promote | |
* products derived from this software without specific prior | |
* written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
package com.gitblit.git; | |
import java.io.IOException; | |
import java.io.OutputStream; | |
import org.eclipse.jgit.lib.BatchingProgressMonitor; | |
import org.eclipse.jgit.lib.Constants; | |
/** Write progress messages out to the sideband channel. */ | |
class SideBandProgressMonitor extends BatchingProgressMonitor { | |
private final OutputStream out; | |
private boolean write; | |
SideBandProgressMonitor(final OutputStream os) { | |
out = os; | |
write = true; | |
} | |
@Override | |
protected void onUpdate(String taskName, int workCurr) { | |
StringBuilder s = new StringBuilder(); | |
format(s, taskName, workCurr); | |
s.append(" \r"); //$NON-NLS-1$ | |
send(s); | |
} | |
@Override | |
protected void onEndTask(String taskName, int workCurr) { | |
StringBuilder s = new StringBuilder(); | |
format(s, taskName, workCurr); | |
s.append(", done\n"); //$NON-NLS-1$ | |
send(s); | |
} | |
private void format(StringBuilder s, String taskName, int workCurr) { | |
s.append(taskName); | |
s.append(": "); //$NON-NLS-1$ | |
s.append(workCurr); | |
} | |
@Override | |
protected void onUpdate(String taskName, int cmp, int totalWork, int pcnt) { | |
StringBuilder s = new StringBuilder(); | |
format(s, taskName, cmp, totalWork, pcnt); | |
s.append(" \r"); //$NON-NLS-1$ | |
send(s); | |
} | |
@Override | |
protected void onEndTask(String taskName, int cmp, int totalWork, int pcnt) { | |
StringBuilder s = new StringBuilder(); | |
format(s, taskName, cmp, totalWork, pcnt); | |
s.append("\n"); //$NON-NLS-1$ | |
send(s); | |
} | |
private void format(StringBuilder s, String taskName, int cmp, | |
int totalWork, int pcnt) { | |
s.append(taskName); | |
s.append(": "); //$NON-NLS-1$ | |
if (pcnt < 100) | |
s.append(' '); | |
if (pcnt < 10) | |
s.append(' '); | |
s.append(pcnt); | |
s.append("% ("); //$NON-NLS-1$ | |
s.append(cmp); | |
s.append("/"); //$NON-NLS-1$ | |
s.append(totalWork); | |
s.append(")"); //$NON-NLS-1$ | |
} | |
private void send(StringBuilder s) { | |
if (write) { | |
try { | |
out.write(Constants.encode(s.toString())); | |
out.flush(); | |
} catch (IOException err) { | |
write = false; | |
} | |
} | |
} | |
} |