comparison src/org/tmatesoft/hg/core/CatCommand.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 7ec89d637f50
children b1d6208fb517
comparison
equal deleted inserted replaced
114:46291ec605a0 115:c0cc2535462c
18 18
19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; 19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION;
20 import static org.tmatesoft.hg.repo.HgRepository.TIP; 20 import static org.tmatesoft.hg.repo.HgRepository.TIP;
21 21
22 import java.io.FileNotFoundException; 22 import java.io.FileNotFoundException;
23 import java.io.IOException;
24 import java.io.OutputStream;
25 23
26 import org.tmatesoft.hg.repo.HgDataFile; 24 import org.tmatesoft.hg.repo.HgDataFile;
27 import org.tmatesoft.hg.repo.HgRepository; 25 import org.tmatesoft.hg.repo.HgRepository;
26 import org.tmatesoft.hg.util.ByteChannel;
28 27
29 /** 28 /**
30 * Command to obtain content of a 29 * Command to obtain content of a
31 * 30 *
32 * @author Artem Tikhomirov 31 * @author Artem Tikhomirov
59 revision = nodeid; 58 revision = nodeid;
60 localRevision = BAD_REVISION; 59 localRevision = BAD_REVISION;
61 return this; 60 return this;
62 } 61 }
63 62
64 public void execute(OutputStream os) throws IOException /*TODO own exception type*/ { 63 public void execute(ByteChannel sink) throws Exception /*TODO own exception type*/ {
65 if (localRevision == BAD_REVISION && revision == null) { 64 if (localRevision == BAD_REVISION && revision == null) {
66 throw new IllegalArgumentException("Either local file revision number or nodeid shall be specified"); 65 throw new IllegalArgumentException("Either local file revision number or nodeid shall be specified");
67 } 66 }
68 if (file == null) { 67 if (file == null) {
69 throw new IllegalArgumentException("Name of the file is missing"); 68 throw new IllegalArgumentException("Name of the file is missing");
70 } 69 }
71 if (os == null) { 70 if (sink == null) {
72 throw new IllegalArgumentException(); 71 throw new IllegalArgumentException();
73 } 72 }
74 HgDataFile dataFile = repo.getFileNode(file); 73 HgDataFile dataFile = repo.getFileNode(file);
75 if (!dataFile.exists()) { 74 if (!dataFile.exists()) {
76 throw new FileNotFoundException(); 75 throw new FileNotFoundException();
77 } 76 }
78 byte[] content; 77 int revToExtract;
79 if (revision != null) { 78 if (revision != null) {
80 content = dataFile.content(revision); 79 revToExtract = dataFile.getLocalRevision(revision);
81 } else { 80 } else {
82 content = dataFile.content(localRevision); 81 revToExtract = localRevision;
83 } 82 }
84 os.write(content); 83 dataFile.content(revToExtract, sink);
85 } 84 }
86 } 85 }