Mercurial > hg4j
changeset 223:80a3433ace91
HgBadStateException (IOException from FileAccess) on isCopy for empty data file
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 23 May 2011 04:42:12 +0200 |
parents | 373e07cd3991 |
children | 7fe5982bcac0 |
files | src/org/tmatesoft/hg/internal/RevlogStream.java |
diffstat | 1 files changed, 12 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/RevlogStream.java Thu May 19 05:02:07 2011 +0200 +++ b/src/org/tmatesoft/hg/internal/RevlogStream.java Mon May 23 04:42:12 2011 +0200 @@ -245,7 +245,6 @@ daIndex.skip(12); DataAccess userDataAccess = null; if (needData) { - final byte firstByte; int streamOffset; DataAccess streamDataAccess; if (inline) { @@ -257,15 +256,19 @@ daData.seek(streamOffset); } final boolean patchToPrevious = baseRevision != i; // the only way I found to tell if it's a patch - firstByte = streamDataAccess.readByte(); - if (firstByte == 0x78 /* 'x' */) { - userDataAccess = new InflaterDataAccess(streamDataAccess, streamOffset, compressedLen, patchToPrevious ? -1 : actualLen); - } else if (firstByte == 0x75 /* 'u' */) { - userDataAccess = new FilterDataAccess(streamDataAccess, streamOffset+1, compressedLen-1); + if (streamDataAccess.isEmpty()) { + userDataAccess = new DataAccess(); // empty } else { - // XXX Python impl in fact throws exception when there's not 'x', 'u' or '0' - // but I don't see reason not to return data as is - userDataAccess = new FilterDataAccess(streamDataAccess, streamOffset, compressedLen); + final byte firstByte = streamDataAccess.readByte(); + if (firstByte == 0x78 /* 'x' */) { + userDataAccess = new InflaterDataAccess(streamDataAccess, streamOffset, compressedLen, patchToPrevious ? -1 : actualLen); + } else if (firstByte == 0x75 /* 'u' */) { + userDataAccess = new FilterDataAccess(streamDataAccess, streamOffset+1, compressedLen-1); + } else { + // XXX Python impl in fact throws exception when there's not 'x', 'u' or '0' + // but I don't see reason not to return data as is + userDataAccess = new FilterDataAccess(streamDataAccess, streamOffset, compressedLen); + } } // XXX if (patchToPrevious) {