summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2009-10-06 20:09:29 -0700
committerShawn O. Pearce <spearce@spearce.org>2010-01-12 11:56:56 -0800
commit71b34847299f0c8f6923fe37fdd509f57fd35830 (patch)
treed99e47b6e47b523d61a2d51dc349df52ce9a183e /org.eclipse.jgit
parent7ed6805425d69826ad19c96b352a6fd533ee4cb4 (diff)
downloadjgit-71b34847299f0c8f6923fe37fdd509f57fd35830.tar.gz
jgit-71b34847299f0c8f6923fe37fdd509f57fd35830.zip
Expose PacketLineOut for reuse outside of the transport package
Change-Id: Iaa331a476e28cf2880df5607de36bc9f67d041df Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java73
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java11
2 files changed, 74 insertions, 10 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java
index e7a7198d7c..81dd4f6a15 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, Google Inc.
+ * Copyright (C) 2008-2009, Google Inc.
* Copyright (C) 2008-2009, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
* and other copyright owners as documented in the project's IP log.
@@ -50,21 +50,56 @@ import java.io.OutputStream;
import org.eclipse.jgit.lib.Constants;
-class PacketLineOut {
+/**
+ * Write Git style pkt-line formatting to an output stream.
+ * <p>
+ * This class is not thread safe and may issue multiple writes to the underlying
+ * stream for each method call made.
+ * <p>
+ * This class performs no buffering on its own. This makes it suitable to
+ * interleave writes performed by this class with writes performed directly
+ * against the underlying OutputStream.
+ */
+public class PacketLineOut {
private final OutputStream out;
private final byte[] lenbuffer;
- PacketLineOut(final OutputStream i) {
- out = i;
+ /**
+ * Create a new packet line writer.
+ *
+ * @param outputStream
+ * stream.
+ */
+ public PacketLineOut(final OutputStream outputStream) {
+ out = outputStream;
lenbuffer = new byte[5];
}
- void writeString(final String s) throws IOException {
+ /**
+ * Write a UTF-8 encoded string as a single length-delimited packet.
+ *
+ * @param s
+ * string to write.
+ * @throws IOException
+ * the packet could not be written, the stream is corrupted as
+ * the packet may have been only partially written.
+ */
+ public void writeString(final String s) throws IOException {
writePacket(Constants.encode(s));
}
- void writePacket(final byte[] packet) throws IOException {
+ /**
+ * Write a binary packet to the stream.
+ *
+ * @param packet
+ * the packet to write; the length of the packet is equal to the
+ * size of the byte array.
+ * @throws IOException
+ * the packet could not be written, the stream is corrupted as
+ * the packet may have been only partially written.
+ */
+ public void writePacket(final byte[] packet) throws IOException {
formatLength(packet.length + 4);
out.write(lenbuffer, 0, 4);
out.write(packet);
@@ -78,13 +113,35 @@ class PacketLineOut {
out.write(buf, off, len);
}
- void end() throws IOException {
+ /**
+ * Write a packet end marker, sometimes referred to as a flush command.
+ * <p>
+ * Technically this is a magical packet type which can be detected
+ * separately from an empty string or an empty packet.
+ * <p>
+ * Implicitly performs a flush on the underlying OutputStream to ensure the
+ * peer will receive all data written thus far.
+ *
+ * @throws IOException
+ * the end marker could not be written, the stream is corrupted
+ * as the end marker may have been only partially written.
+ */
+ public void end() throws IOException {
formatLength(0);
out.write(lenbuffer, 0, 4);
flush();
}
- void flush() throws IOException {
+ /**
+ * Flush the underlying OutputStream.
+ * <p>
+ * Performs a flush on the underlying OutputStream to ensure the peer will
+ * receive all data written thus far.
+ *
+ * @throws IOException
+ * the underlying stream failed to flush.
+ */
+ public void flush() throws IOException {
out.flush();
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java
index 2a06ed889e..953fae9184 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java
@@ -62,10 +62,17 @@ import org.eclipse.jgit.revwalk.RevWalk;
/** Support for the start of {@link UploadPack} and {@link ReceivePack}. */
public abstract class RefAdvertiser {
- static class PacketLineOutRefAdvertiser extends RefAdvertiser {
+ /** Advertiser which frames lines in a {@link PacketLineOut} format. */
+ public static class PacketLineOutRefAdvertiser extends RefAdvertiser {
private final PacketLineOut pckOut;
- PacketLineOutRefAdvertiser(PacketLineOut out) {
+ /**
+ * Create a new advertiser for the supplied stream.
+ *
+ * @param out
+ * the output stream.
+ */
+ public PacketLineOutRefAdvertiser(PacketLineOut out) {
pckOut = out;
}