Mercurial > jhg
annotate src/org/tmatesoft/hg/internal/DataSerializer.java @ 710:cf200271439a
KeywordFilter: 'IllegalStateException: need buffer of at least...' during status op for a small file
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Mon, 07 Oct 2013 01:56:05 +0200 | 
| parents | 545b1d4cc11d | 
| children | 
| rev | line source | 
|---|---|
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2013 TMate Software Ltd | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 * | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 * This program is free software; you can redistribute it and/or modify | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 * it under the terms of the GNU General Public License as published by | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 * | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 * This program is distributed in the hope that it will be useful, | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 * GNU General Public License for more details. | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 * | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * For information on how to redistribute this software under | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * the terms of a license other than GNU General Public License | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 * contact TMate Software at support@hg4j.com | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 */ | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 package org.tmatesoft.hg.internal; | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 19 import java.io.ByteArrayOutputStream; | 
| 645 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 20 import java.io.IOException; | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 21 import java.io.OutputStream; | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 22 | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 23 import org.tmatesoft.hg.core.HgIOException; | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
618diff
changeset | 24 import org.tmatesoft.hg.repo.HgRuntimeException; | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 25 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 26 /** | 
| 673 
545b1d4cc11d
Refactor HgBundle.GroupElement (clear experimental mark), resolve few technical debt issues
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
645diff
changeset | 27 * Serialization friend of {@link DataAccess}, similar to OutputStream with few handy methods | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 28 * | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 29 * @author Artem Tikhomirov | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 * @author TMate Software Ltd. | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 */ | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 @Experimental(reason="Work in progress") | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 public class DataSerializer { | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 34 private byte[] buffer; | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 36 public void writeByte(byte... values) throws HgIOException { | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 write(values, 0, values.length); | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 39 | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 40 public void writeInt(int... values) throws HgIOException { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 41 ensureBufferSize(4*values.length); // sizeof(int) | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 42 int idx = 0; | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 for (int v : values) { | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 44 bigEndian(v, buffer, idx); | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 45 idx += 4; | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 46 } | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 47 write(buffer, 0, idx); | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 48 } | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 49 | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 50 public void write(byte[] data, int offset, int length) throws HgIOException { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 51 throw new HgIOException("Attempt to write to non-existent file", null); | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 52 } | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 53 | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 54 public void done() throws HgIOException { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 55 // no-op | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 56 } | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 57 | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 58 private void ensureBufferSize(int bytesNeeded) { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 59 if (buffer == null || buffer.length < bytesNeeded) { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 60 buffer = new byte[bytesNeeded]; | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 61 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 62 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 63 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 /** | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 65 * Writes 4 bytes of supplied value into the buffer at given offset, big-endian. | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 */ | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 67 public static final void bigEndian(int value, byte[] buffer, int offset) { | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 68 assert offset + 4 <= buffer.length; | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 buffer[offset++] = (byte) ((value >>> 24) & 0x0ff); | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 buffer[offset++] = (byte) ((value >>> 16) & 0x0ff); | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 71 buffer[offset++] = (byte) ((value >>> 8) & 0x0ff); | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 72 buffer[offset++] = (byte) (value & 0x0ff); | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 73 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 74 | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
534diff
changeset | 75 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
534diff
changeset | 76 * Denotes an entity that wants to/could be serialized | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
534diff
changeset | 77 */ | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 78 @Experimental(reason="Work in progress") | 
| 645 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 79 public interface DataSource { | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 80 /** | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 81 * Invoked once for a single write operation, | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 82 * although the source itself may get serialized several times | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 83 */ | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
618diff
changeset | 84 public void serialize(DataSerializer out) throws HgIOException, HgRuntimeException; | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 85 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 86 /** | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 87 * Hint of data length it would like to writes | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 88 * @return -1 if can't answer | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 89 */ | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
618diff
changeset | 90 public int serializeLength() throws HgRuntimeException; | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 91 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 92 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 93 public static class ByteArrayDataSource implements DataSource { | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 94 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 95 private final byte[] data; | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 96 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 97 public ByteArrayDataSource(byte[] bytes) { | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 98 data = bytes; | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 99 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 100 | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 101 public void serialize(DataSerializer out) throws HgIOException { | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 102 if (data != null) { | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 103 out.write(data, 0, data.length); | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 104 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 105 } | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 106 | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 107 public int serializeLength() { | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 108 return data == null ? 0 : data.length; | 
| 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 109 } | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 110 } | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 111 | 
| 645 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 112 /** | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 113 * Serialize data to byte array | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 114 */ | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 115 public static class ByteArraySerializer extends DataSerializer { | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 116 private final ByteArrayOutputStream out = new ByteArrayOutputStream(); | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 117 | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 118 @Override | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 119 public void write(byte[] data, int offset, int length) { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 120 out.write(data, offset, length); | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 121 } | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 122 | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 123 public byte[] toByteArray() { | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 124 return out.toByteArray(); | 
| 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
556diff
changeset | 125 } | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 126 } | 
| 645 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 127 | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 128 /** | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 129 * Bridge to the world of {@link java.io.OutputStream}. | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 130 * Caller instantiates the stream and is responsible to close it as appropriate, | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 131 * {@link #done() DataSerializer.done()} doesn't close the stream. | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 132 */ | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 133 public static class OutputStreamSerializer extends DataSerializer { | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 134 private final OutputStream out; | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 135 | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 136 public OutputStreamSerializer(OutputStream outputStream) { | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 137 out = outputStream; | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 138 } | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 139 | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 140 @Override | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 141 public void write(byte[] data, int offset, int length) throws HgIOException { | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 142 try { | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 143 out.write(data, offset, length); | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 144 } catch (IOException ex) { | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 145 throw new HgIOException(ex.getMessage(), ex, null); | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 146 } | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 147 } | 
| 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 148 } | 
| 534 
243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 149 } | 
