Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/RevlogStream.java @ 217:e39cf474ef94
Experimental support to mix-in start and end events for inspectors. Additionally, Lifecycle may serve as iteration control
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 17 May 2011 03:40:52 +0200 |
parents | 706bcc7cfee4 |
children | 80a3433ace91 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/RevlogStream.java Tue May 17 01:15:12 2011 +0200 +++ b/src/org/tmatesoft/hg/internal/RevlogStream.java Tue May 17 03:40:52 2011 +0200 @@ -200,6 +200,7 @@ } // XXX may cache [start .. end] from index with a single read (pre-read) + Lifecycle.BasicCallback cb = null; DataAccess daIndex = null, daData = null; daIndex = getIndexStream(); if (needData && !inline) { @@ -218,6 +219,12 @@ } daIndex.seek(getIndexOffsetInt(i)); + + if (inspector instanceof Lifecycle) { + cb = new Lifecycle.BasicCallback(); + ((Lifecycle) inspector).start(end - start + 1, cb, cb); + } + for (; i <= end; i++ ) { if (inline && needData) { // inspector reading data (though FilterDataAccess) may have affected index position @@ -282,6 +289,11 @@ if (!extraReadsToBaseRev || i >= start) { inspector.next(i, actualLen, baseRevision, linkRevision, parent1Revision, parent2Revision, nodeidBuf, userDataAccess); } + if (cb != null) { + if (cb.isStopped()) { + break; + } + } if (userDataAccess != null) { userDataAccess.reset(); if (lastUserData != null) { @@ -293,6 +305,9 @@ } catch (IOException ex) { throw new HgBadStateException(ex); // FIXME need better handling } finally { + if (inspector instanceof Lifecycle) { + ((Lifecycle) inspector).finish(cb); + } daIndex.done(); if (daData != null) { daData.done();