Mercurial > hg4j
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 } |