Mercurial > jhg
changeset 594:cc7b0c4dc993
Cache only in-memory revision representations
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 02 May 2013 19:22:43 +0200 |
parents | 9619301a7bb9 |
children | 92c3ad9c2a51 |
files | src/org/tmatesoft/hg/internal/RevlogStream.java |
diffstat | 1 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/RevlogStream.java Thu May 02 16:51:02 2013 +0200 +++ b/src/org/tmatesoft/hg/internal/RevlogStream.java Thu May 02 19:22:43 2013 +0200 @@ -323,7 +323,7 @@ ReaderN1 r = new ReaderN1(needData, inspector, dataAccess.shallMergePatches()); try { - r.start(sortedRevisions.length, lastRevisionRead == null ? null : lastRevisionRead.get()); + r.start(sortedRevisions.length, getLastRevisionRead()); for (int i = 0; i < sortedRevisions.length; ) { int x = i; i++; @@ -571,7 +571,16 @@ public CachedRevision finish() { CachedRevision rv = null; if (lastUserData != null) { - rv = new CachedRevision(lastRevisionRead, lastUserData); + if (lastUserData instanceof ByteArrayDataAccess) { + // it's safe to cache only in-memory revision texts, + // if lastUserData is merely a filter over file stream, + // we'd need to keep file open, and this is bad. + // XXX perhaps, wrap any DataAccess.byteArray into + // ByteArrayDataAccess? + rv = new CachedRevision(lastRevisionRead, lastUserData); + } else { + lastUserData.done(); + } lastUserData = null; } if (lifecycleListener != null) {