Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgManifest.java @ 157:d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 09 Mar 2011 05:22:17 +0100 |
parents | src/com/tmate/hgkit/ll/HgManifest.java@9429c7bd1920 src/com/tmate/hgkit/ll/HgManifest.java@a3a2e5deb320 |
children | e2115da4cf6a |
comparison
equal
deleted
inserted
replaced
156:643ddec3be36 | 157:d5268ca7715b |
---|---|
14 * the terms of a license other than GNU General Public License | 14 * the terms of a license other than GNU General Public License |
15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
16 */ | 16 */ |
17 package org.tmatesoft.hg.repo; | 17 package org.tmatesoft.hg.repo; |
18 | 18 |
19 import java.io.IOException; | |
20 | |
21 import org.tmatesoft.hg.core.HgBadStateException; | |
19 import org.tmatesoft.hg.core.Nodeid; | 22 import org.tmatesoft.hg.core.Nodeid; |
23 import org.tmatesoft.hg.internal.DataAccess; | |
20 import org.tmatesoft.hg.internal.RevlogStream; | 24 import org.tmatesoft.hg.internal.RevlogStream; |
21 | 25 |
22 | 26 |
23 /** | 27 /** |
24 * | 28 * |
34 public void walk(int start, int end, final Inspector inspector) { | 38 public void walk(int start, int end, final Inspector inspector) { |
35 RevlogStream.Inspector insp = new RevlogStream.Inspector() { | 39 RevlogStream.Inspector insp = new RevlogStream.Inspector() { |
36 | 40 |
37 private boolean gtg = true; // good to go | 41 private boolean gtg = true; // good to go |
38 | 42 |
39 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { | 43 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { |
40 if (!gtg) { | 44 if (!gtg) { |
41 return; | 45 return; |
42 } | 46 } |
43 gtg = gtg && inspector.begin(revisionNumber, new Nodeid(nodeid, true)); | 47 try { |
44 int i; | 48 gtg = gtg && inspector.begin(revisionNumber, new Nodeid(nodeid, true)); |
45 String fname = null; | 49 int i; |
46 String flags = null; | 50 String fname = null; |
47 Nodeid nid = null; | 51 String flags = null; |
48 for (i = 0; gtg && i < actualLen; i++) { | 52 Nodeid nid = null; |
49 int x = i; | 53 byte[] data = da.byteArray(); |
50 for( ; data[i] != '\n' && i < actualLen; i++) { | 54 for (i = 0; gtg && i < actualLen; i++) { |
51 if (fname == null && data[i] == 0) { | 55 int x = i; |
52 fname = new String(data, x, i - x); | 56 for( ; data[i] != '\n' && i < actualLen; i++) { |
53 x = i+1; | 57 if (fname == null && data[i] == 0) { |
58 fname = new String(data, x, i - x); | |
59 x = i+1; | |
60 } | |
54 } | 61 } |
62 if (i < actualLen) { | |
63 assert data[i] == '\n'; | |
64 int nodeidLen = i - x < 40 ? i-x : 40; | |
65 nid = Nodeid.fromAscii(data, x, nodeidLen); | |
66 if (nodeidLen + x < i) { | |
67 // 'x' and 'l' for executable bits and symlinks? | |
68 // hg --debug manifest shows 644 for each regular file in my repo | |
69 flags = new String(data, x + nodeidLen, i-x-nodeidLen); | |
70 } | |
71 gtg = gtg && inspector.next(nid, fname, flags); | |
72 } | |
73 nid = null; | |
74 fname = flags = null; | |
55 } | 75 } |
56 if (i < actualLen) { | 76 gtg = gtg && inspector.end(revisionNumber); |
57 assert data[i] == '\n'; | 77 } catch (IOException ex) { |
58 int nodeidLen = i - x < 40 ? i-x : 40; | 78 throw new HgBadStateException(ex); |
59 nid = Nodeid.fromAscii(data, x, nodeidLen); | |
60 if (nodeidLen + x < i) { | |
61 // 'x' and 'l' for executable bits and symlinks? | |
62 // hg --debug manifest shows 644 for each regular file in my repo | |
63 flags = new String(data, x + nodeidLen, i-x-nodeidLen); | |
64 } | |
65 gtg = gtg && inspector.next(nid, fname, flags); | |
66 } | |
67 nid = null; | |
68 fname = flags = null; | |
69 } | 79 } |
70 gtg = gtg && inspector.end(revisionNumber); | |
71 } | 80 } |
72 }; | 81 }; |
73 content.iterate(start, end, true, insp); | 82 content.iterate(start, end, true, insp); |
74 } | 83 } |
75 | 84 |