Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgManifest.java @ 254:a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 16 Aug 2011 04:03:29 +0200 |
| parents | b7347daa50e3 |
| children | f39fb6b3cc76 |
comparison
equal
deleted
inserted
replaced
| 253:1874d11054e5 | 254:a620f0663a37 |
|---|---|
| 56 throw new IllegalArgumentException(); | 56 throw new IllegalArgumentException(); |
| 57 } | 57 } |
| 58 int start0 = fromChangelog(start); | 58 int start0 = fromChangelog(start); |
| 59 int end0 = fromChangelog(end); | 59 int end0 = fromChangelog(end); |
| 60 content.iterate(start0, end0, true, new ManifestParser(inspector)); | 60 content.iterate(start0, end0, true, new ManifestParser(inspector)); |
| 61 } | |
| 62 | |
| 63 /** | |
| 64 * "Sparse" iteration of the manifest | |
| 65 * | |
| 66 * @param inspector | |
| 67 * @param localRevisions local changeset revisions to visit | |
| 68 */ | |
| 69 public void walk(final Inspector inspector, int... localRevisions) { | |
| 70 if (inspector == null || localRevisions == null) { | |
| 71 throw new IllegalArgumentException(); | |
| 72 } | |
| 73 int[] manifestLocalRevs = new int[localRevisions.length]; | |
| 74 boolean needsSort = false; | |
| 75 for (int i = 0; i < localRevisions.length; i++) { | |
| 76 final int manifestLocalRev = fromChangelog(localRevisions[i]); | |
| 77 manifestLocalRevs[i] = manifestLocalRev; | |
| 78 if (i > 0 && manifestLocalRevs[i-1] > manifestLocalRev) { | |
| 79 needsSort = true; | |
| 80 } | |
| 81 } | |
| 82 if (needsSort) { | |
| 83 Arrays.sort(manifestLocalRevs); | |
| 84 } | |
| 85 content.iterate(manifestLocalRevs, true, new ManifestParser(inspector)); | |
| 61 } | 86 } |
| 62 | 87 |
| 63 // manifest revision number that corresponds to the given changeset | 88 // manifest revision number that corresponds to the given changeset |
| 64 /*package-local*/ int fromChangelog(int revisionNumber) { | 89 /*package-local*/ int fromChangelog(int revisionNumber) { |
| 65 if (HgInternals.wrongLocalRevision(revisionNumber)) { | 90 if (HgInternals.wrongLocalRevision(revisionNumber)) { |
