Mercurial > hg4j
diff src/com/tmate/hgkit/ll/RevlogIndexStreamAccess.java @ 0:dbd663faec1f
Basic changelog parsing
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 17 Dec 2010 19:05:59 +0100 |
parents | |
children | d6d2a630f4a6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/tmate/hgkit/ll/RevlogIndexStreamAccess.java Fri Dec 17 19:05:59 2010 +0100 @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2010 Artem Tikhomirov + */ +package com.tmate.hgkit.ll; + +import java.io.DataInput; +import java.io.IOException; + +/** + * @author artem + * + */ +public class RevlogIndexStreamAccess { + + private final RevlogStream stream; + + // takes RevlogStream. RevlogStream delegates calls for data to this accessor, which in turn refers back to RevlogStream to get + // correct [Input|Data]Stream according to revlog version (Revlogv0 or RevlogNG) + + public RevlogIndexStreamAccess(RevlogStream stream) { + this.stream = stream; + // TODO Auto-generated constructor stub + } + + + void readRevlogV0Record() throws IOException { + DataInput di = stream.getIndexStream(); + int offset = di.readInt(); + int compressedLen = di.readInt(); + int baseRevision = di.readInt(); + int linkRevision = di.readInt(); +// int r = (((buf[0] & 0xff) << 24) | ((buf[1] & 0xff) << 16) | ((buf[2] & 0xff) << 8) | (buf[3] & 0xff)); + byte[] buf = new byte[20]; + di.readFully(buf, 0, 20); + Object nodeidOwn = buf.clone(); + // XXX nodeid as an Object with hash/equals? + di.readFully(buf, 0, 20); + Object nodeidParent1 = buf.clone(); + di.readFully(buf, 0, 20); + Object nodeidParent2 = buf.clone(); + } + + // another subclass? + void readRevlogNGRecord() throws IOException { + DataInput di = stream.getIndexStream(); + long l = di.readLong(); + long offset = l >>> 16; + int flags = (int) (l & 0X0FFFF); + int compressedLen = di.readInt(); + int actualLen = di.readInt(); + int baseRevision = di.readInt(); + int linkRevision = di.readInt(); + int parent1Revision = di.readInt(); + int parent2Revision = di.readInt(); + byte[] buf = new byte[32]; + di.readFully(buf, 0, 20+12); + Object nodeid = buf/*[0..20]*/; + + } +}