Signed-off-by: Daniel Cheng (aka SDiZ) <j16sdiz+freenet@xxxxxxxxx> --- .../src/org/spearce/jgit/lib/PackWriter.java | 2 + .../spearce/jgit/util/CountingOutputStream.java | 32 +++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java index 601ce71..d8b50e6 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java @@ -687,11 +687,13 @@ public class PackWriter { assert !otp.isWritten(); + countingOut.resetCRC32(); otp.setOffset(countingOut.getCount()); if (otp.isDeltaRepresentation()) writeDeltaObject(otp); else writeWholeObject(otp); + otp.setCRC((int) countingOut.getCRC32()); writeMonitor.update(1); } diff --git a/org.spearce.jgit/src/org/spearce/jgit/util/CountingOutputStream.java b/org.spearce.jgit/src/org/spearce/jgit/util/CountingOutputStream.java index b0b5f7d..b4ae915 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/util/CountingOutputStream.java +++ b/org.spearce.jgit/src/org/spearce/jgit/util/CountingOutputStream.java @@ -40,12 +40,16 @@ package org.spearce.jgit.util; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.zip.CRC32; /** - * Counting output stream decoration. Counts bytes written to stream. + * Counting output stream decoration. Counts bytes written to stream and + * calculate CRC32 checksum. */ public class CountingOutputStream extends FilterOutputStream { private long count; + + private CRC32 crc; /** * Create counting stream being decorated to provided real output stream. @@ -55,6 +59,7 @@ public class CountingOutputStream extends FilterOutputStream { */ public CountingOutputStream(OutputStream out) { super(out); + crc = new CRC32(); } @Override @@ -79,10 +84,35 @@ public class CountingOutputStream extends FilterOutputStream { return count; } + /** + * Resets CRC-32 to initial value. + */ + public void resetCRC32() { + crc.reset(); + } + + /** + * Returns CRC-32 value. + * @return CRC32 + */ + public long getCRC32() { + return crc.getValue(); + } + + /** * Reset counter to zero value. */ public void reset() { count = 0; + crc.reset(); + } + + /** + * {@inheritDoc} + */ + public void close() throws IOException { + crc = null; + super.close(); } } -- 1.6.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html