Mercurial > hg4j
annotate src/org/tmatesoft/hg/core/HgCatCommand.java @ 242:ad6a046943be
Improved reading of sparse revisions from a revlog
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Thu, 23 Jun 2011 15:19:07 +0200 | 
| parents | 6e1373b54e9b | 
| children | 3fbfce107f94 | 
| rev | line source | 
|---|---|
| 107 | 1 /* | 
| 2 * Copyright (c) 2011 TMate Software Ltd | |
| 3 * | |
| 4 * This program is free software; you can redistribute it and/or modify | |
| 5 * it under the terms of the GNU General Public License as published by | |
| 6 * the Free Software Foundation; version 2 of the License. | |
| 7 * | |
| 8 * This program is distributed in the hope that it will be useful, | |
| 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 11 * GNU General Public License for more details. | |
| 12 * | |
| 13 * For information on how to redistribute this software under | |
| 14 * the terms of a license other than GNU General Public License | |
| 
130
 
7567f4a42fe5
Correct contact address
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
121 
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 107 | 16 */ | 
| 17 package org.tmatesoft.hg.core; | |
| 18 | |
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
19 import static org.tmatesoft.hg.repo.HgInternals.wrongLocalRevision; | 
| 107 | 20 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; | 
| 21 import static org.tmatesoft.hg.repo.HgRepository.TIP; | |
| 22 | |
| 23 import java.io.FileNotFoundException; | |
| 24 | |
| 25 import org.tmatesoft.hg.repo.HgDataFile; | |
| 26 import org.tmatesoft.hg.repo.HgRepository; | |
| 
115
 
c0cc2535462c
Introduced channels to pipeline (and easily filter) data streams
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
107 
diff
changeset
 | 
27 import org.tmatesoft.hg.util.ByteChannel; | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
28 import org.tmatesoft.hg.util.CancelledException; | 
| 
133
 
4a948ec83980
core.Path to util.Path as it's not Hg repo dependant
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
131 
diff
changeset
 | 
29 import org.tmatesoft.hg.util.Path; | 
| 107 | 30 | 
| 31 /** | |
| 
131
 
aa1629f36482
Renamed .core classes to start with Hg prefix
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
130 
diff
changeset
 | 
32 * Command to obtain content of a file, 'hg cat' counterpart. | 
| 107 | 33 * | 
| 34 * @author Artem Tikhomirov | |
| 35 * @author TMate Software Ltd. | |
| 36 */ | |
| 
215
 
41a778e3fd31
Issue 5: Facilities for progress and cancellation. More specific exceptions. Exceptions from callbacks as RuntimeException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
157 
diff
changeset
 | 
37 public class HgCatCommand extends HgAbstractCommand<HgCatCommand> { | 
| 107 | 38 | 
| 39 private final HgRepository repo; | |
| 40 private Path file; | |
| 41 private int localRevision = TIP; | |
| 42 private Nodeid revision; | |
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
43 private Nodeid cset; | 
| 107 | 44 | 
| 
131
 
aa1629f36482
Renamed .core classes to start with Hg prefix
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
130 
diff
changeset
 | 
45 public HgCatCommand(HgRepository hgRepo) { | 
| 107 | 46 repo = hgRepo; | 
| 47 } | |
| 48 | |
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
49 /** | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
50 * File to read, required parameter | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
51 * @param fname path to a repository file, can't be <code>null</code> | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
52 * @return <code>this</code> for convenience | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
53 * @throws IllegalArgumentException if supplied fname is null or points to directory | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
54 */ | 
| 
131
 
aa1629f36482
Renamed .core classes to start with Hg prefix
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
130 
diff
changeset
 | 
55 public HgCatCommand file(Path fname) { | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
56 if (fname == null || fname.isDirectory()) { | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
57 throw new IllegalArgumentException(String.valueOf(fname)); | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
58 } | 
| 107 | 59 file = fname; | 
| 60 return this; | |
| 61 } | |
| 62 | |
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
63 /** | 
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
64 * Select specific local revision of the file to cat. Note, revision numbering is of particular file, not that of | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
65 * repository (i.e. revision 0 means initial content of the file, irrespective of changeset revision at the time of commit) | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
66 * | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
67 * Invocation of this method clears revision set with {@link #revision(Nodeid)} or {@link #revision(int)} earlier. | 
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
68 * | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
69 * XXX rev can't be WORKING_COPY (if allowed, need to implement in #execute()) | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
70 * @param rev local revision number, non-negative, or one of predefined constants. Note, use of {@link HgRepository#BAD_REVISION}, | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
71 * although possible, makes little sense (command would fail if executed). | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
72 * @return <code>this</code> for convenience | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
73 */ | 
| 
131
 
aa1629f36482
Renamed .core classes to start with Hg prefix
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
130 
diff
changeset
 | 
74 public HgCatCommand revision(int rev) { | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
75 if (wrongLocalRevision(rev)) { | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
76 throw new IllegalArgumentException(String.valueOf(rev)); | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
77 } | 
| 107 | 78 localRevision = rev; | 
| 79 revision = null; | |
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
80 cset = null; | 
| 107 | 81 return this; | 
| 82 } | |
| 83 | |
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
84 /** | 
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
85 * Select revision to read. Note, this revision is file revision (i.e. the one from manifest), not the changeset revision. | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
86 * | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
87 * Invocation of this method clears revision set with {@link #revision(int)} or {@link #revision(Nodeid)} earlier. | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
88 * | 
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
89 * @param nodeid - unique file revision identifier, Note, use of <code>null</code> or {@link Nodeid#NULL} is senseless | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
90 * @return <code>this</code> for convenience | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
91 */ | 
| 
131
 
aa1629f36482
Renamed .core classes to start with Hg prefix
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
130 
diff
changeset
 | 
92 public HgCatCommand revision(Nodeid nodeid) { | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
93 if (nodeid != null && nodeid.isNull()) { | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
94 nodeid = null; | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
95 } | 
| 107 | 96 revision = nodeid; | 
| 97 localRevision = BAD_REVISION; | |
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
98 cset = null; | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
99 return this; | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
100 } | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
101 | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
102 /** | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
103 * Select whatever revision of the file that was actual at the time of the specified changeset. Unlike {@link #revision(int)} or {@link #revision(Nodeid)}, this method | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
104 * operates in terms of repository global revisions (aka changesets). | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
105 * | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
106 * Invocation of this method clears local file revisions selection. | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
107 * | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
108 * @param nodeid changeset revision | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
109 * @return <code>this</code> for convenience | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
110 */ | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
111 public HgCatCommand changeset(Nodeid nodeid) { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
112 localRevision = BAD_REVISION; | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
113 revision = null; | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
114 cset = nodeid; | 
| 107 | 115 return this; | 
| 116 } | |
| 117 | |
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
118 /** | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
119 * Runs the command with current set of parameters and pipes data to provided sink. | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
120 * | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
121 * @param sink output channel to write data to. | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
122 * @throws HgDataStreamException | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
123 * @throws IllegalArgumentException when command arguments are incomplete or wrong | 
| 
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
124 */ | 
| 
237
 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
232 
diff
changeset
 | 
125 public void execute(ByteChannel sink) throws HgDataStreamException, CancelledException { | 
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
126 if (localRevision == BAD_REVISION && revision == null && cset == null) { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
127 throw new IllegalArgumentException("File revision, corresponing local number, or a changset nodeid shall be specified"); | 
| 107 | 128 } | 
| 129 if (file == null) { | |
| 130 throw new IllegalArgumentException("Name of the file is missing"); | |
| 131 } | |
| 
115
 
c0cc2535462c
Introduced channels to pipeline (and easily filter) data streams
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
107 
diff
changeset
 | 
132 if (sink == null) { | 
| 
148
 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
133 throw new IllegalArgumentException("Need an output channel"); | 
| 107 | 134 } | 
| 135 HgDataFile dataFile = repo.getFileNode(file); | |
| 136 if (!dataFile.exists()) { | |
| 
215
 
41a778e3fd31
Issue 5: Facilities for progress and cancellation. More specific exceptions. Exceptions from callbacks as RuntimeException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
157 
diff
changeset
 | 
137 throw new HgDataStreamException(file, new FileNotFoundException(file.toString())); | 
| 107 | 138 } | 
| 
115
 
c0cc2535462c
Introduced channels to pipeline (and easily filter) data streams
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
107 
diff
changeset
 | 
139 int revToExtract; | 
| 
232
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
140 if (cset != null) { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
141 int csetRev = repo.getChangelog().getLocalRevision(cset); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
142 Nodeid toExtract = null; | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
143 do { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
144 toExtract = repo.getManifest().getFileRevision(csetRev, file); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
145 if (toExtract == null) { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
146 if (dataFile.isCopy()) { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
147 file = dataFile.getCopySourceName(); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
148 dataFile = repo.getFileNode(file); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
149 } else { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
150 break; | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
151 } | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
152 } | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
153 } while (toExtract == null); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
154 if (toExtract == null) { | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
155 throw new HgBadStateException(String.format("File %s not its origins were not known at repository %s revision", file, cset.shortNotation())); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
156 } | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
157 revToExtract = dataFile.getLocalRevision(toExtract); | 
| 
 
b7347daa50e3
Allow to cat a file with changeset revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
215 
diff
changeset
 | 
158 } else if (revision != null) { | 
| 
115
 
c0cc2535462c
Introduced channels to pipeline (and easily filter) data streams
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
107 
diff
changeset
 | 
159 revToExtract = dataFile.getLocalRevision(revision); | 
| 107 | 160 } else { | 
| 
115
 
c0cc2535462c
Introduced channels to pipeline (and easily filter) data streams
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
107 
diff
changeset
 | 
161 revToExtract = localRevision; | 
| 107 | 162 } | 
| 
157
 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
148 
diff
changeset
 | 
163 dataFile.contentWithFilters(revToExtract, sink); | 
| 107 | 164 } | 
| 165 } | 
