tikhomirov@32: /* tikhomirov@32: * Copyright (c) 2011 Artem Tikhomirov tikhomirov@32: */ tikhomirov@32: package com.tmate.hgkit.console; tikhomirov@32: tikhomirov@32: import java.io.File; tikhomirov@35: import java.util.LinkedList; tikhomirov@32: tikhomirov@32: import com.tmate.hgkit.fs.DataAccess; tikhomirov@32: import com.tmate.hgkit.fs.DataAccessProvider; tikhomirov@32: import com.tmate.hgkit.ll.Nodeid; tikhomirov@32: tikhomirov@32: /** tikhomirov@32: * @see http://mercurial.selenic.com/wiki/BundleFormat tikhomirov@32: * tikhomirov@32: * @author artem tikhomirov@32: */ tikhomirov@32: public class Bundle { tikhomirov@32: tikhomirov@32: public static void main(String[] args) throws Exception { tikhomirov@32: File bundleFile = new File("/temp/hg/hg-bundle-a78c980749e3.tmp"); tikhomirov@32: DataAccessProvider dap = new DataAccessProvider(); tikhomirov@32: DataAccess da = dap.create(bundleFile); tikhomirov@34: try { tikhomirov@35: LinkedList names = new LinkedList(); tikhomirov@35: if (!da.isEmpty()) { tikhomirov@35: System.out.println("Changelog group"); tikhomirov@35: readGroup(da); tikhomirov@35: System.out.println("Manifest group"); tikhomirov@35: readGroup(da); tikhomirov@35: while (!da.isEmpty()) { tikhomirov@35: int fnameLen = da.readInt(); tikhomirov@35: if (fnameLen <= 4) { tikhomirov@35: break; // null chunk, the last one. tikhomirov@35: } tikhomirov@35: byte[] fname = new byte[fnameLen - 4]; tikhomirov@35: da.readBytes(fname, 0, fname.length); tikhomirov@35: names.add(new String(fname)); tikhomirov@35: System.out.println(names.getLast()); tikhomirov@35: readGroup(da); tikhomirov@34: } tikhomirov@35: } tikhomirov@35: System.out.println(names.size()); tikhomirov@35: for (String s : names) { tikhomirov@35: System.out.println(s); tikhomirov@32: } tikhomirov@34: } finally { tikhomirov@34: da.done(); tikhomirov@32: } tikhomirov@32: } tikhomirov@35: tikhomirov@35: private static void readGroup(DataAccess da) throws Exception { tikhomirov@35: int len = da.readInt(); tikhomirov@35: while (len > 4 && !da.isEmpty()) { tikhomirov@35: byte[] nb = new byte[80]; tikhomirov@35: da.readBytes(nb, 0, 80); tikhomirov@35: Nodeid node = Nodeid.fromBinary(nb, 0); tikhomirov@35: Nodeid p1 = Nodeid.fromBinary(nb, 20); tikhomirov@35: Nodeid p2 = Nodeid.fromBinary(nb, 40); tikhomirov@35: Nodeid cs = Nodeid.fromBinary(nb, 60); tikhomirov@35: byte[] data = new byte[len-84]; tikhomirov@35: da.readBytes(data, 0, data.length); tikhomirov@35: System.out.printf("%6d %s %s %s %s\n", len, node, p1, p2, cs); tikhomirov@35: System.out.println(new String(data)); tikhomirov@35: len = da.isEmpty() ? 0 : da.readInt(); tikhomirov@35: } tikhomirov@35: } tikhomirov@32: }