Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgDataFile.java @ 240:29231022fec8
Do not expect file history to be ordered
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 23 Jun 2011 13:32:23 +0200 |
parents | 6e1373b54e9b |
children | ad6a046943be |
comparison
equal
deleted
inserted
replaced
239:df9d2854d3d6 | 240:29231022fec8 |
---|---|
24 import java.io.FileInputStream; | 24 import java.io.FileInputStream; |
25 import java.io.IOException; | 25 import java.io.IOException; |
26 import java.nio.ByteBuffer; | 26 import java.nio.ByteBuffer; |
27 import java.nio.channels.FileChannel; | 27 import java.nio.channels.FileChannel; |
28 import java.util.ArrayList; | 28 import java.util.ArrayList; |
29 import java.util.Arrays; | |
29 import java.util.Collection; | 30 import java.util.Collection; |
30 import java.util.TreeMap; | 31 import java.util.TreeMap; |
31 | 32 |
32 import org.tmatesoft.hg.core.HgDataStreamException; | 33 import org.tmatesoft.hg.core.HgDataStreamException; |
33 import org.tmatesoft.hg.core.HgException; | 34 import org.tmatesoft.hg.core.HgException; |
230 commitRevisions[count++] = linkRevision; | 231 commitRevisions[count++] = linkRevision; |
231 } | 232 } |
232 }; | 233 }; |
233 content.iterate(start, end, false, insp); | 234 content.iterate(start, end, false, insp); |
234 final HgChangelog changelog = getRepo().getChangelog(); | 235 final HgChangelog changelog = getRepo().getChangelog(); |
235 // changelog.range(inspector, commitRevisions); not effective when changes are sparse and far from each other | 236 /* |
237 * changelog.range(inspector, commitRevisions); | |
238 * Not effective when changes are sparse and far from each other. | |
239 * However, it's only single file read, unlike code below (few reads of sequential blocks) | |
240 * Need to weight tradeoffs of file read and iteration of sparse files. | |
241 */ | |
242 | |
236 // | 243 // |
237 final int HistoricallyCloseCommits = 50; // XXX perhaps, shall increase/decrease based on changelog.revisionCount() | 244 final int HistoricallyCloseCommits = 50; // XXX perhaps, shall increase/decrease based on changelog.revisionCount() |
238 // (huge changelog => memory mapped files, each file re-read is more expensive than iterating over records in one read? | 245 // (huge changelog => memory mapped files, each file re-read is more expensive than iterating over records in one read? |
239 // | 246 // |
240 // try short sequences on neighboring revisions. | 247 // try short sequences on neighboring revisions. |
248 Arrays.sort(commitRevisions); // automatic tools (svnmerge?) produce unnatural file history | |
249 // (e.g. cpython/Lib/doctest.py, revision 164 points to 63509, 165 - to 38453) | |
241 for (int i = 0; i < commitRevisions.length; ) { | 250 for (int i = 0; i < commitRevisions.length; ) { |
242 int x = i; | 251 int x = i; |
243 i++; | 252 i++; |
244 boolean sequential = true; | 253 boolean sequential = true; |
245 while (i < commitRevisions.length) { | 254 while (i < commitRevisions.length) { |