Browse Source

Expose an OutputStream from ReceivePack for sending client messages

Callers may want to format and flush their own output, for example in a
PreReceiveHook that creates its own TextProgressMonitor. The actual
underlying msgOut can change over the lifetime of ReceivePack, so we
implement a small wrapper.

Change-Id: I57b6d6cad2542aaa93dcadc06cb3e933e81bcd3d
tags/v2.0.0.201206130900-r
Dave Borowitz 12 years ago
parent
commit
27cbdaf497
1 changed files with 55 additions and 12 deletions
  1. 55
    12
      org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java

+ 55
- 12
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java View File

@@ -157,6 +157,8 @@ public class ReceivePack {

private OutputStream msgOut;

private final MessageOutputWrapper msgOutWrapper = new MessageOutputWrapper();

private PacketLineIn pckIn;

private PacketLineOut pckOut;
@@ -246,6 +248,52 @@ public class ReceivePack {
}
}

/**
* Output stream that wraps the current {@link #msgOut}.
* <p>
* We don't want to expose {@link #msgOut} directly because it can change
* several times over the course of a session.
*/
private class MessageOutputWrapper extends OutputStream {
@Override
public void write(int ch) {
if (msgOut != null) {
try {
msgOut.write(ch);
} catch (IOException e) {
// Ignore write failures.
}
}
}

@Override
public void write(byte[] b, int off, int len) {
if (msgOut != null) {
try {
msgOut.write(b, off, len);
} catch (IOException e) {
// Ignore write failures.
}
}
}

@Override
public void write(byte[] b) {
write(b, 0, b.length);
}

@Override
public void flush() {
if (msgOut != null) {
try {
msgOut.flush();
} catch (IOException e) {
// Ignore write failures.
}
}
}
}

/** @return the repository this receive completes into. */
public final Repository getRepository() {
return db;
@@ -542,12 +590,7 @@ public class ReceivePack {
advertiseError = new StringBuilder();
advertiseError.append(what).append('\n');
} else {
try {
if (msgOut != null)
msgOut.write(Constants.encode("error: " + what + "\n"));
} catch (IOException e) {
// Ignore write failures.
}
msgOutWrapper.write(Constants.encode("error: " + what + "\n"));
}
}

@@ -562,12 +605,12 @@ public class ReceivePack {
* string must not end with an LF, and must not contain an LF.
*/
public void sendMessage(final String what) {
try {
if (msgOut != null)
msgOut.write(Constants.encode(what + "\n"));
} catch (IOException e) {
// Ignore write failures.
}
msgOutWrapper.write(Constants.encode(what + "\n"));
}
/** @return an underlying stream for sending messages to the client. */
public OutputStream getMessageOutputStream() {
return msgOutWrapper;
}

/**

Loading…
Cancel
Save