Mercurial > hg4j
comparison src/com/tmate/hgkit/console/Bundle.java @ 35:6061aa826a9e
Complete parsing of the bundle format
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 13 Jan 2011 20:02:21 +0100 |
parents | 51bc56c0addd |
children | 205f9b59b400 |
comparison
equal
deleted
inserted
replaced
34:51bc56c0addd | 35:6061aa826a9e |
---|---|
2 * Copyright (c) 2011 Artem Tikhomirov | 2 * Copyright (c) 2011 Artem Tikhomirov |
3 */ | 3 */ |
4 package com.tmate.hgkit.console; | 4 package com.tmate.hgkit.console; |
5 | 5 |
6 import java.io.File; | 6 import java.io.File; |
7 import java.util.LinkedList; | |
7 | 8 |
8 import com.tmate.hgkit.fs.DataAccess; | 9 import com.tmate.hgkit.fs.DataAccess; |
9 import com.tmate.hgkit.fs.DataAccessProvider; | 10 import com.tmate.hgkit.fs.DataAccessProvider; |
10 import com.tmate.hgkit.ll.Nodeid; | 11 import com.tmate.hgkit.ll.Nodeid; |
11 | 12 |
19 public static void main(String[] args) throws Exception { | 20 public static void main(String[] args) throws Exception { |
20 File bundleFile = new File("/temp/hg/hg-bundle-a78c980749e3.tmp"); | 21 File bundleFile = new File("/temp/hg/hg-bundle-a78c980749e3.tmp"); |
21 DataAccessProvider dap = new DataAccessProvider(); | 22 DataAccessProvider dap = new DataAccessProvider(); |
22 DataAccess da = dap.create(bundleFile); | 23 DataAccess da = dap.create(bundleFile); |
23 try { | 24 try { |
24 while (!da.isEmpty()) { | 25 LinkedList<String> names = new LinkedList<String>(); |
25 int len = da.readInt(); | 26 if (!da.isEmpty()) { |
26 while (len > 4) { | 27 System.out.println("Changelog group"); |
27 byte[] nb = new byte[80]; | 28 readGroup(da); |
28 da.readBytes(nb, 0, 80); | 29 System.out.println("Manifest group"); |
29 Nodeid node = Nodeid.fromBinary(nb, 0); | 30 readGroup(da); |
30 Nodeid p1 = Nodeid.fromBinary(nb, 20); | 31 while (!da.isEmpty()) { |
31 Nodeid p2 = Nodeid.fromBinary(nb, 40); | 32 int fnameLen = da.readInt(); |
32 Nodeid cs = Nodeid.fromBinary(nb, 60); | 33 if (fnameLen <= 4) { |
33 da.skip(len - 84); | 34 break; // null chunk, the last one. |
34 System.out.printf("%6d %s %s %s %s\n", len, node, p1, p2, cs); | 35 } |
35 len = da.isEmpty() ? 0 : da.readInt(); | 36 byte[] fname = new byte[fnameLen - 4]; |
37 da.readBytes(fname, 0, fname.length); | |
38 names.add(new String(fname)); | |
39 System.out.println(names.getLast()); | |
40 readGroup(da); | |
36 } | 41 } |
37 System.out.println("Group done"); | 42 } |
43 System.out.println(names.size()); | |
44 for (String s : names) { | |
45 System.out.println(s); | |
38 } | 46 } |
39 } finally { | 47 } finally { |
40 da.done(); | 48 da.done(); |
41 } | 49 } |
42 } | 50 } |
51 | |
52 private static void readGroup(DataAccess da) throws Exception { | |
53 int len = da.readInt(); | |
54 while (len > 4 && !da.isEmpty()) { | |
55 byte[] nb = new byte[80]; | |
56 da.readBytes(nb, 0, 80); | |
57 Nodeid node = Nodeid.fromBinary(nb, 0); | |
58 Nodeid p1 = Nodeid.fromBinary(nb, 20); | |
59 Nodeid p2 = Nodeid.fromBinary(nb, 40); | |
60 Nodeid cs = Nodeid.fromBinary(nb, 60); | |
61 byte[] data = new byte[len-84]; | |
62 da.readBytes(data, 0, data.length); | |
63 System.out.printf("%6d %s %s %s %s\n", len, node, p1, p2, cs); | |
64 System.out.println(new String(data)); | |
65 len = da.isEmpty() ? 0 : da.readInt(); | |
66 } | |
67 } | |
43 } | 68 } |