* <p>NOTE, clogRevIndexEnd has to list name of the supplied file in the corresponding manifest,
* as it's not possible to trace rename history otherwise.
*/
public FileHistory prepare(HgDataFile df, int clogRevIndexStart, int clogRevIndexEnd) throws HgRuntimeException {
assert clogRevIndexStart <= clogRevIndexEnd;
FileHistory fileHistory = new FileHistory(df, clogRevIndexStart, clogRevIndexEnd);
fileHistory.build();
int cacheHint = 5; // cache comes useful when we follow merge branches and don't want to
// parse base revision twice. There's no easy way to determine max(distance(all(base,merge))),
// hence the heuristics to use the longest history chunk:
for (FileRevisionHistoryChunk c : fileHistory.iterate(OldToNew)) {
// iteration order is not important here
if (c.revisionCount() > cacheHint) {
cacheHint = c.revisionCount();
}
}
linesCache = new FileLinesCache(cacheHint);
for (FileRevisionHistoryChunk fhc : fileHistory.iterate(OldToNew)) {
// iteration order is not important here
linesCache.useFileUpTo(fhc.getFile(), fhc.getEndChangeset());
}
return fileHistory;
}