diff options
author | Dan Wang <dwwang@google.com> | 2016-08-22 19:16:51 -0700 |
---|---|---|
committer | Jonathan Nieder <jrn@google.com> | 2016-08-24 16:24:43 -0700 |
commit | 9974f3070262b92b06d582182d0f633155ed69d9 (patch) | |
tree | 417944b2e1e771768c84d2090aa2f7a2662a3210 | |
parent | 609de52600e6a5477b960cc36245dd105898965b (diff) | |
download | jgit-9974f3070262b92b06d582182d0f633155ed69d9.tar.gz jgit-9974f3070262b92b06d582182d0f633155ed69d9.zip |
Packet logging for JGit
Imitate the packet tracing feature from C Git v1.7.5-rc0~58^2~1 (add
packet tracing debug code, 2011-02-24). Unlike C Git, use the log4j
log level setting instead of the GIT_TRACE_PACKET environment variable
to enable tracing.
Tested as follows:
1. Enable tracing by adding the lines
log4j.logger.org.eclipse.jgit.transport=DEBUG, stderr
log4j.additivity.org.eclipse.jgit.transport=false
to org.eclipse.jgit.pgm/resources/log4j.properties.
2. mvn package
3. org.eclipse.jgit.pgm/target/jgit \
ls-remote git://git.kernel.org/pub/scm/git/git 2>&1 |less
Then the output provides a trace of packets sent and received over
the wire:
2016-08-24 16:36:42 DEBUG PacketLineOut:145 - git> git-upload-pack /pub/scm/git/git^@host=git.kernel.org^@
2016-08-24 16:36:42 DEBUG PacketLineIn:165 - git< 2632c897f74b1cc9b5533f467da459b9ec725538 HEAD^@multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master agent=git/2.8.4
2016-08-24 16:36:42 DEBUG PacketLineIn:165 - git< e0c1ceafc5bece92d35773a75fff59497e1d9bd5 refs/heads/maint
Change-Id: I5028c064f3ac090510386057cb4e6d30d4eae232
Signed-off-by: Dan Wang <dwwang@google.com>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java | 26 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java | 10 |
2 files changed, 31 insertions, 5 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java index 8d291b8517..e142babd68 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java @@ -55,6 +55,8 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.MutableObjectId; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Read Git style pkt-line formatting from an input stream. @@ -67,6 +69,8 @@ import org.eclipse.jgit.util.RawParseUtils; * against the underlying InputStream. */ public class PacketLineIn { + private static final Logger log = LoggerFactory.getLogger(PacketLineIn.class); + /** Magic return from {@link #readString()} when a flush packet is found. */ public static final String END = new StringBuilder(0).toString(); /* must not string pool */ @@ -136,12 +140,16 @@ public class PacketLineIn { */ public String readString() throws IOException { int len = readLength(); - if (len == 0) + if (len == 0) { + log.debug("git< 0000"); //$NON-NLS-1$ return END; + } len -= 4; // length header (4 bytes) - if (len == 0) + if (len == 0) { + log.debug("git< "); //$NON-NLS-1$ return ""; //$NON-NLS-1$ + } byte[] raw; if (len <= lineBuffer.length) @@ -152,7 +160,10 @@ public class PacketLineIn { IO.readFully(in, raw, 0, len); if (raw[len - 1] == '\n') len--; - return RawParseUtils.decode(Constants.CHARSET, raw, 0, len); + + String s = RawParseUtils.decode(Constants.CHARSET, raw, 0, len); + log.debug("git< " + s); //$NON-NLS-1$ + return s; } /** @@ -167,8 +178,10 @@ public class PacketLineIn { */ public String readStringRaw() throws IOException { int len = readLength(); - if (len == 0) + if (len == 0) { + log.debug("git< 0000"); //$NON-NLS-1$ return END; + } len -= 4; // length header (4 bytes) @@ -179,7 +192,10 @@ public class PacketLineIn { raw = new byte[len]; IO.readFully(in, raw, 0, len); - return RawParseUtils.decode(Constants.CHARSET, raw, 0, len); + + String s = RawParseUtils.decode(Constants.CHARSET, raw, 0, len); + log.debug("git< " + s); //$NON-NLS-1$ + return s; } void discardUntilEnd() throws IOException { 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 2d4e9c717f..a6bd342851 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java @@ -49,6 +49,9 @@ import java.io.IOException; import java.io.OutputStream; import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.util.RawParseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Write Git style pkt-line formatting to an output stream. @@ -61,6 +64,8 @@ import org.eclipse.jgit.lib.Constants; * against the underlying OutputStream. */ public class PacketLineOut { + private static final Logger log = LoggerFactory.getLogger(PacketLineOut.class); + private final OutputStream out; private final byte[] lenbuffer; @@ -135,6 +140,10 @@ public class PacketLineOut { formatLength(len + 4); out.write(lenbuffer, 0, 4); out.write(buf, pos, len); + if (log.isDebugEnabled()) { + String s = RawParseUtils.decode(Constants.CHARSET, buf, pos, len); + log.debug("git> " + s); //$NON-NLS-1$ + } } /** @@ -153,6 +162,7 @@ public class PacketLineOut { public void end() throws IOException { formatLength(0); out.write(lenbuffer, 0, 4); + log.debug("git> 0000"); //$NON-NLS-1$ if (flushOnEnd) flush(); } |