[PATCH JGIT 1/2] Calculate CRC32 on Pack Index v2
Signed-off-by: Daniel Cheng (aka SDiZ) <j16sdiz+freenet@gmail.com>
---
.../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