comparison src/org/tmatesoft/hg/internal/RevlogCompressor.java @ 618:7c0d2ce340b8

Refactor approach how content finds it way down to a commit revision
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 16 May 2013 19:46:13 +0200
parents 243202f1bda5
children 6526d8adbc0f
comparison
equal deleted inserted replaced
617:65c01508f002 618:7c0d2ce340b8
14 * the terms of a license other than GNU General Public License 14 * the terms of a license other than GNU General Public License
15 * contact TMate Software at support@hg4j.com 15 * contact TMate Software at support@hg4j.com
16 */ 16 */
17 package org.tmatesoft.hg.internal; 17 package org.tmatesoft.hg.internal;
18 18
19 import java.io.IOException;
20 import java.util.zip.Deflater; 19 import java.util.zip.Deflater;
21 20
21 import org.tmatesoft.hg.core.HgIOException;
22 import org.tmatesoft.hg.core.SessionContext; 22 import org.tmatesoft.hg.core.SessionContext;
23 import org.tmatesoft.hg.util.LogFacility.Severity; 23 import org.tmatesoft.hg.util.LogFacility.Severity;
24 24
25 /** 25 /**
26 * 26 *
42 sourceData = source; 42 sourceData = source;
43 compressedLen = -1; 43 compressedLen = -1;
44 } 44 }
45 45
46 // out stream is not closed! 46 // out stream is not closed!
47 public int writeCompressedData(DataSerializer out) throws IOException { 47 public int writeCompressedData(DataSerializer out) throws HgIOException {
48 zip.reset(); 48 zip.reset();
49 DeflaterDataSerializer dds = new DeflaterDataSerializer(out, zip, sourceData.serializeLength()); 49 DeflaterDataSerializer dds = new DeflaterDataSerializer(out, zip, sourceData.serializeLength());
50 sourceData.serialize(dds); 50 sourceData.serialize(dds);
51 dds.finish(); 51 dds.finish();
52 return zip.getTotalOut(); 52 return zip.getTotalOut();
59 Counter counter = new Counter(); 59 Counter counter = new Counter();
60 try { 60 try {
61 compressedLen = writeCompressedData(counter); 61 compressedLen = writeCompressedData(counter);
62 assert counter.totalWritten == compressedLen; 62 assert counter.totalWritten == compressedLen;
63 return compressedLen; 63 return compressedLen;
64 } catch (IOException ex) { 64 } catch (HgIOException ex) {
65 // can't happen provided we write to our stream that does nothing but byte counting 65 // can't happen provided we write to our stream that does nothing but byte counting
66 ctx.getLog().dump(getClass(), Severity.Error, ex, "Failed estimating compressed length of revlog data"); 66 ctx.getLog().dump(getClass(), Severity.Error, ex, "Failed estimating compressed length of revlog data");
67 return counter.totalWritten; // use best known value so far 67 return counter.totalWritten; // use best known value so far
68 } 68 }
69 } 69 }
70 70
71 private static class Counter extends DataSerializer { 71 private static class Counter extends DataSerializer {
72 public int totalWritten = 0; 72 public int totalWritten = 0;
73 73
74 public void writeByte(byte... values) throws IOException { 74 public void writeByte(byte... values) throws HgIOException {
75 totalWritten += values.length; 75 totalWritten += values.length;
76 } 76 }
77 77
78 public void writeInt(int... values) throws IOException { 78 public void writeInt(int... values) throws HgIOException {
79 totalWritten += 4 * values.length; 79 totalWritten += 4 * values.length;
80 } 80 }
81 81
82 public void write(byte[] data, int offset, int length) throws IOException { 82 public void write(byte[] data, int offset, int length) throws HgIOException {
83 totalWritten += length; 83 totalWritten += length;
84 } 84 }
85 } 85 }
86 } 86 }