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]*/;
+		
+	}
+}