tikhomirov@22: /* tikhomirov@22: * Copyright (c) 2010, 2011 Artem Tikhomirov tikhomirov@22: */ tikhomirov@0: package com.tmate.hgkit.console; tikhomirov@0: tikhomirov@0: import java.io.BufferedInputStream; tikhomirov@0: import java.io.DataInput; tikhomirov@0: import java.io.DataInputStream; tikhomirov@0: import java.io.File; tikhomirov@0: import java.io.FileInputStream; tikhomirov@0: import java.math.BigInteger; tikhomirov@0: import java.util.LinkedList; tikhomirov@47: import java.util.Locale; tikhomirov@0: import java.util.zip.Inflater; tikhomirov@0: tikhomirov@0: import com.tmate.hgkit.ll.Changeset; tikhomirov@0: tikhomirov@0: /** tikhomirov@0: * tikhomirov@0: * @author artem tikhomirov@0: */ tikhomirov@0: public class Main { tikhomirov@0: tikhomirov@0: public static void main(String[] args) throws Exception { tikhomirov@51: String repo = "/temp/hg/hello/.hg/"; tikhomirov@51: String filename = "store/00changelog.i"; tikhomirov@22: // String filename = "store/data/hello.c.i"; tikhomirov@4: // String filename = "store/data/docs/readme.i"; tikhomirov@51: // String repo = "/eclipse-3.7/ws.hg/com.tmate.hgkit/.hg/"; tikhomirov@22: // String filename = "store/data/design.txt.i"; tikhomirov@51: // String filename = "store/data/src/com/tmate/hgkit/ll/_revlog_stream.java.i"; tikhomirov@22: // tikhomirov@0: LinkedList changelog = new LinkedList(); tikhomirov@0: // tikhomirov@22: DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(new File(repo + filename)))); tikhomirov@0: DataInput di = dis; tikhomirov@0: dis.mark(10); tikhomirov@0: int versionField = di.readInt(); tikhomirov@0: dis.reset(); tikhomirov@0: final int INLINEDATA = 1 << 16; tikhomirov@0: tikhomirov@0: boolean inlineData = (versionField & INLINEDATA) != 0; tikhomirov@0: System.out.printf("%#8x, inline: %b\n", versionField, inlineData); tikhomirov@0: System.out.println("\tOffset\tFlags\tPacked\t Actual\tBase Rev Link Rev\tParent1\tParent2\tnodeid"); tikhomirov@0: int entryCount = 0; tikhomirov@0: while (dis.available() > 0) { tikhomirov@0: long l = di.readLong(); tikhomirov@0: long offset = l >>> 16; tikhomirov@0: int flags = (int) (l & 0X0FFFF); tikhomirov@0: int compressedLen = di.readInt(); tikhomirov@0: int actualLen = di.readInt(); tikhomirov@0: int baseRevision = di.readInt(); tikhomirov@0: int linkRevision = di.readInt(); tikhomirov@0: int parent1Revision = di.readInt(); tikhomirov@0: int parent2Revision = di.readInt(); tikhomirov@0: byte[] buf = new byte[32]; tikhomirov@0: di.readFully(buf, 12, 20); tikhomirov@0: dis.skip(12); tikhomirov@0: System.out.printf("%14d %6X %10d %10d %10d %10d %8d %8d %040x\n", offset, flags, compressedLen, actualLen, baseRevision, linkRevision, parent1Revision, parent2Revision, new BigInteger(buf)); tikhomirov@0: if (inlineData) { tikhomirov@3: String resultString; tikhomirov@0: byte[] data = new byte[compressedLen]; tikhomirov@0: di.readFully(data); tikhomirov@0: if (data[0] == 0x78 /* 'x' */) { tikhomirov@0: Inflater zlib = new Inflater(); tikhomirov@0: zlib.setInput(data, 0, compressedLen); tikhomirov@0: byte[] result = new byte[actualLen*2]; tikhomirov@0: int resultLen = zlib.inflate(result); tikhomirov@0: zlib.end(); tikhomirov@0: resultString = new String(result, 0, resultLen, "UTF-8"); tikhomirov@3: } else if (data[0] == 0x75 /* 'u' */) { tikhomirov@3: resultString = new String(data, 1, data.length - 1, "UTF-8"); tikhomirov@3: } else { tikhomirov@3: resultString = new String(data); tikhomirov@3: } tikhomirov@3: System.out.println(resultString); tikhomirov@0: } tikhomirov@0: } tikhomirov@0: dis.close(); tikhomirov@0: // tikhomirov@0: System.out.println("\n\n"); tikhomirov@0: System.out.println("====================>"); tikhomirov@0: for (Changeset cset : changelog) { tikhomirov@0: System.out.println(">"); tikhomirov@47: System.out.println("User: " + cset.user()); tikhomirov@47: System.out.println("Comment: " + cset.comment()); tikhomirov@47: System.out.println("Manifest: " + cset.manifest()); tikhomirov@47: System.out.printf(Locale.US, "Date: %ta %