diff options
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java index 0abbe7e09c..796cb745a1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java @@ -48,6 +48,7 @@ import static org.eclipse.jgit.transport.SideBandOutputStream.HDR_SIZE; import java.io.IOException; import java.io.InputStream; +import java.io.Writer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -83,10 +84,10 @@ class SideBandInputStream extends InputStream { static final int CH_ERROR = 3; private static Pattern P_UNBOUNDED = Pattern - .compile("^([\\w ]+): +(\\d+)(?:, done\\.)? *$"); + .compile("^([\\w ]+): +(\\d+)(?:, done\\.)? *[\r\n]$"); private static Pattern P_BOUNDED = Pattern - .compile("^([\\w ]+): +\\d+% +\\( *(\\d+)/ *(\\d+)\\)(?:, done\\.)? *$"); + .compile("^([\\w ]+): +\\d+% +\\( *(\\d+)/ *(\\d+)\\)(?:, done\\.)? *[\r\n]$"); private final InputStream rawIn; @@ -94,6 +95,8 @@ class SideBandInputStream extends InputStream { private final ProgressMonitor monitor; + private final Writer messages; + private String progressBuffer = ""; private String currentTask; @@ -106,10 +109,12 @@ class SideBandInputStream extends InputStream { private int available; - SideBandInputStream(final InputStream in, final ProgressMonitor progress) { + SideBandInputStream(final InputStream in, final ProgressMonitor progress, + final Writer messageStream) { rawIn = in; pckIn = new PacketLineIn(rawIn); monitor = progress; + messages = messageStream; currentTask = ""; } @@ -170,7 +175,7 @@ class SideBandInputStream extends InputStream { } } - private void progress(String pkt) { + private void progress(String pkt) throws IOException { pkt = progressBuffer + pkt; for (;;) { final int lf = pkt.indexOf('\n'); @@ -185,16 +190,13 @@ class SideBandInputStream extends InputStream { else break; - final String msg = pkt.substring(0, s); - if (doProgressLine(msg)) - pkt = pkt.substring(s + 1); - else - break; + doProgressLine(pkt.substring(0, s + 1)); + pkt = pkt.substring(s + 1); } progressBuffer = pkt; } - private boolean doProgressLine(final String msg) { + private void doProgressLine(final String msg) throws IOException { Matcher matcher; matcher = P_BOUNDED.matcher(msg); @@ -208,7 +210,7 @@ class SideBandInputStream extends InputStream { final int cnt = Integer.parseInt(matcher.group(2)); monitor.update(cnt - lastCnt); lastCnt = cnt; - return true; + return; } matcher = P_UNBOUNDED.matcher(msg); @@ -222,10 +224,10 @@ class SideBandInputStream extends InputStream { final int cnt = Integer.parseInt(matcher.group(2)); monitor.update(cnt - lastCnt); lastCnt = cnt; - return true; + return; } - return false; + messages.write(msg); } private void beginTask(final int totalWorkUnits) { |