comparison src/org/tmatesoft/hg/internal/ManifestEntryBuilder.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 dd4f6311af52
children
comparison
equal deleted inserted replaced
617:65c01508f002 618:7c0d2ce340b8
16 */ 16 */
17 package org.tmatesoft.hg.internal; 17 package org.tmatesoft.hg.internal;
18 18
19 import java.io.ByteArrayOutputStream; 19 import java.io.ByteArrayOutputStream;
20 20
21 import org.tmatesoft.hg.core.HgIOException;
21 import org.tmatesoft.hg.core.Nodeid; 22 import org.tmatesoft.hg.core.Nodeid;
23 import org.tmatesoft.hg.internal.DataSerializer.DataSource;
22 24
23 /** 25 /**
24 * Create binary manifest entry ready to write down into 00manifest.i 26 * Create binary manifest entry ready to write down into 00manifest.i
25 * <p>Usage: 27 * <p>Usage:
26 * <pre> 28 * <pre>
34 * </pre> 36 * </pre>
35 * 37 *
36 * @author Artem Tikhomirov 38 * @author Artem Tikhomirov
37 * @author TMate Software Ltd. 39 * @author TMate Software Ltd.
38 */ 40 */
39 public class ManifestEntryBuilder { 41 public class ManifestEntryBuilder implements DataSource {
40 private ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 42 private final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
43 private final EncodingHelper encHelper;
41 44
45 public ManifestEntryBuilder(EncodingHelper encodingHelper) {
46 encHelper = encodingHelper;
47 }
42 48
43 public ManifestEntryBuilder reset() { 49 public ManifestEntryBuilder reset() {
44 buffer.reset(); 50 buffer.reset();
45 return this; 51 return this;
46 } 52 }
47 public ManifestEntryBuilder add(String fname, Nodeid revision) { 53 public ManifestEntryBuilder add(String fname, Nodeid revision) {
48 byte[] b = fname.getBytes(); 54 byte[] b = encHelper.toManifest(fname);
49 buffer.write(b, 0, b.length); 55 buffer.write(b, 0, b.length);
50 buffer.write('\0'); 56 buffer.write('\0');
51 b = revision.toString().getBytes(); 57 b = revision.toString().getBytes();
52 buffer.write(b, 0, b.length); 58 buffer.write(b, 0, b.length);
53 buffer.write('\n'); 59 buffer.write('\n');
56 62
57 public byte[] build() { 63 public byte[] build() {
58 return buffer.toByteArray(); 64 return buffer.toByteArray();
59 } 65 }
60 66
67 public void serialize(DataSerializer out) throws HgIOException {
68 byte[] r = build();
69 out.write(r, 0 , r.length);
70 }
71
72 public int serializeLength() {
73 return buffer.size();
74 }
75
61 } 76 }