Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgDataFile.java @ 121:b1d6208fb517
Conditionally apply filters to file content
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 04 Feb 2011 03:37:09 +0100 |
parents | c0cc2535462c |
children | 645829962785 |
comparison
equal
deleted
inserted
replaced
120:b19f0ac5ee62 | 121:b1d6208fb517 |
---|---|
23 import java.util.Collection; | 23 import java.util.Collection; |
24 import java.util.TreeMap; | 24 import java.util.TreeMap; |
25 | 25 |
26 import org.tmatesoft.hg.core.Nodeid; | 26 import org.tmatesoft.hg.core.Nodeid; |
27 import org.tmatesoft.hg.core.Path; | 27 import org.tmatesoft.hg.core.Path; |
28 import org.tmatesoft.hg.internal.FilterByteChannel; | |
28 import org.tmatesoft.hg.internal.RevlogStream; | 29 import org.tmatesoft.hg.internal.RevlogStream; |
29 import org.tmatesoft.hg.util.ByteChannel; | 30 import org.tmatesoft.hg.util.ByteChannel; |
30 | 31 |
31 | 32 |
32 | 33 |
71 | 72 |
72 public byte[] content() { | 73 public byte[] content() { |
73 return content(TIP); | 74 return content(TIP); |
74 } | 75 } |
75 | 76 |
76 public void content(int revision, ByteChannel sink) throws /*TODO typed*/Exception { | 77 /*XXX not sure applyFilters is the best way to do, perhaps, callers shall add filters themselves?*/ |
78 public void content(int revision, ByteChannel sink, boolean applyFilters) throws /*TODO typed*/Exception { | |
77 byte[] content = content(revision); | 79 byte[] content = content(revision); |
78 ByteBuffer buf = ByteBuffer.allocate(512); | 80 ByteBuffer buf = ByteBuffer.allocate(512); |
79 int left = content.length; | 81 int left = content.length; |
80 int offset = 0; | 82 int offset = 0; |
83 ByteChannel _sink = applyFilters ? new FilterByteChannel(sink, getRepo().getFiltersFromRepoToWorkingDir(getPath())) : sink; | |
81 do { | 84 do { |
82 buf.put(content, offset, Math.min(left, buf.remaining())); | 85 buf.put(content, offset, Math.min(left, buf.remaining())); |
83 buf.flip(); | 86 buf.flip(); |
84 int consumed = sink.write(buf); | 87 // XXX I may not rely on returned number of bytes but track change in buf position instead. |
88 int consumed = _sink.write(buf); | |
85 buf.compact(); | 89 buf.compact(); |
86 offset += consumed; | 90 offset += consumed; |
87 left -= consumed; | 91 left -= consumed; |
88 } while (left > 0); | 92 } while (left > 0); |
89 } | 93 } |