Mercurial > hg4j
diff src/org/tmatesoft/hg/repo/HgDataFile.java @ 115:c0cc2535462c
Introduced channels to pipeline (and easily filter) data streams
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 03 Feb 2011 23:32:08 +0100 |
parents | a3a2e5deb320 |
children | b1d6208fb517 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgDataFile.java Thu Feb 03 22:13:55 2011 +0100 +++ b/src/org/tmatesoft/hg/repo/HgDataFile.java Thu Feb 03 23:32:08 2011 +0100 @@ -18,6 +18,7 @@ import static org.tmatesoft.hg.repo.HgRepository.TIP; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; import java.util.TreeMap; @@ -25,6 +26,7 @@ import org.tmatesoft.hg.core.Nodeid; import org.tmatesoft.hg.core.Path; import org.tmatesoft.hg.internal.RevlogStream; +import org.tmatesoft.hg.util.ByteChannel; @@ -42,11 +44,18 @@ private final Path path; private Metadata metadata; - /*package-local*/HgDataFile(HgRepository hgRepo, Path path, RevlogStream content) { + /*package-local*/HgDataFile(HgRepository hgRepo, Path filePath, RevlogStream content) { super(hgRepo, content); - this.path = path; + path = filePath; } - + + /*package-local*/HgDataFile(HgRepository hgRepo, Path filePath) { + super(hgRepo); + path = filePath; + } + + // exists is not the best name possible. now it means no file with such name was ever known to the repo. + // it might be confused with files existed before but lately removed. public boolean exists() { return content != null; // XXX need better impl } @@ -63,6 +72,21 @@ public byte[] content() { return content(TIP); } + + public void content(int revision, ByteChannel sink) throws /*TODO typed*/Exception { + byte[] content = content(revision); + ByteBuffer buf = ByteBuffer.allocate(512); + int left = content.length; + int offset = 0; + do { + buf.put(content, offset, Math.min(left, buf.remaining())); + buf.flip(); + int consumed = sink.write(buf); + buf.compact(); + offset += consumed; + left -= consumed; + } while (left > 0); + } // for data files need to check heading of the file content for possible metadata // @see http://mercurial.selenic.com/wiki/FileFormats#data.2BAC8-