comparison src/org/tmatesoft/hg/core/StatusCommand.java @ 128:44b97930570c

Introduced ChangelogHelper to look up changesets files were modified in
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Wed, 16 Feb 2011 20:13:41 +0100
parents 2e395db595e2
children
comparison
equal deleted inserted replaced
127:2e395db595e2 128:44b97930570c
20 import static org.tmatesoft.hg.repo.HgRepository.*; 20 import static org.tmatesoft.hg.repo.HgRepository.*;
21 21
22 import java.util.ConcurrentModificationException; 22 import java.util.ConcurrentModificationException;
23 23
24 import org.tmatesoft.hg.core.Path.Matcher; 24 import org.tmatesoft.hg.core.Path.Matcher;
25 import org.tmatesoft.hg.internal.ChangelogHelper;
25 import org.tmatesoft.hg.repo.HgRepository; 26 import org.tmatesoft.hg.repo.HgRepository;
26 import org.tmatesoft.hg.repo.HgStatusCollector; 27 import org.tmatesoft.hg.repo.HgStatusCollector;
27 import org.tmatesoft.hg.repo.HgStatusInspector; 28 import org.tmatesoft.hg.repo.HgStatusInspector;
28 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; 29 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector;
29 30
37 38
38 private int startRevision = TIP; 39 private int startRevision = TIP;
39 private int endRevision = WORKING_COPY; 40 private int endRevision = WORKING_COPY;
40 private boolean visitSubRepo = true; 41 private boolean visitSubRepo = true;
41 42
42 private Handler handler;
43 private final Mediator mediator = new Mediator(); 43 private final Mediator mediator = new Mediator();
44 44
45 public StatusCommand(HgRepository hgRepo) { 45 public StatusCommand(HgRepository hgRepo) {
46 repo = hgRepo; 46 repo = hgRepo;
47 defaults(); 47 defaults();
143 */ 143 */
144 public void execute(Handler statusHandler) { 144 public void execute(Handler statusHandler) {
145 if (statusHandler == null) { 145 if (statusHandler == null) {
146 throw new IllegalArgumentException(); 146 throw new IllegalArgumentException();
147 } 147 }
148 if (handler != null) { 148 if (mediator.busy()) {
149 throw new ConcurrentModificationException(); 149 throw new ConcurrentModificationException();
150 } 150 }
151 handler = statusHandler;
152 HgStatusCollector sc = new HgStatusCollector(repo); // TODO from CommandContext 151 HgStatusCollector sc = new HgStatusCollector(repo); // TODO from CommandContext
153 // PathPool pathHelper = new PathPool(repo.getPathHelper()); // TODO from CommandContext 152 // PathPool pathHelper = new PathPool(repo.getPathHelper()); // TODO from CommandContext
154 try { 153 try {
155 // XXX if I need a rough estimation (for ProgressMonitor) of number of work units, 154 // XXX if I need a rough estimation (for ProgressMonitor) of number of work units,
156 // I may use number of files in either rev1 or rev2 manifest edition 155 // I may use number of files in either rev1 or rev2 manifest edition
157 mediator.start(); 156 mediator.start(statusHandler, new ChangelogHelper(repo, startRevision));
158 if (endRevision == WORKING_COPY) { 157 if (endRevision == WORKING_COPY) {
159 HgWorkingCopyStatusCollector wcsc = new HgWorkingCopyStatusCollector(repo); 158 HgWorkingCopyStatusCollector wcsc = new HgWorkingCopyStatusCollector(repo);
160 wcsc.setBaseRevisionCollector(sc); 159 wcsc.setBaseRevisionCollector(sc);
161 wcsc.walk(startRevision, mediator); 160 wcsc.walk(startRevision, mediator);
162 } else { 161 } else {
166 sc.walk(startRevision, endRevision, mediator); 165 sc.walk(startRevision, endRevision, mediator);
167 } 166 }
168 } 167 }
169 } finally { 168 } finally {
170 mediator.done(); 169 mediator.done();
171 handler = null;
172 } 170 }
173 } 171 }
174 172
175 public interface Handler { 173 public interface Handler {
176 void handleStatus(HgStatus s); 174 void handleStatus(HgStatus s);
184 boolean needMissing; 182 boolean needMissing;
185 boolean needClean; 183 boolean needClean;
186 boolean needIgnored; 184 boolean needIgnored;
187 boolean needCopies; 185 boolean needCopies;
188 Matcher matcher; 186 Matcher matcher;
187 Handler handler;
188 private ChangelogHelper logHelper;
189 189
190 Mediator() { 190 Mediator() {
191 } 191 }
192 192
193 public void start() { 193 public void start(Handler h, ChangelogHelper changelogHelper) {
194 194 handler = h;
195 } 195 logHelper = changelogHelper;
196 }
197
196 public void done() { 198 public void done() {
199 handler = null;
200 logHelper = null;
201 }
202
203 public boolean busy() {
204 return handler != null;
197 } 205 }
198 206
199 public void modified(Path fname) { 207 public void modified(Path fname) {
200 if (needModified) { 208 if (needModified) {
201 if (matcher == null || matcher.accept(fname)) { 209 if (matcher == null || matcher.accept(fname)) {
202 handler.handleStatus(new HgStatus(Modified, fname)); 210 handler.handleStatus(new HgStatus(Modified, fname, logHelper));
203 } 211 }
204 } 212 }
205 } 213 }
206 public void added(Path fname) { 214 public void added(Path fname) {
207 if (needAdded) { 215 if (needAdded) {
208 if (matcher == null || matcher.accept(fname)) { 216 if (matcher == null || matcher.accept(fname)) {
209 handler.handleStatus(new HgStatus(Added, fname)); 217 handler.handleStatus(new HgStatus(Added, fname, logHelper));
210 } 218 }
211 } 219 }
212 } 220 }
213 public void removed(Path fname) { 221 public void removed(Path fname) {
214 if (needRemoved) { 222 if (needRemoved) {
215 if (matcher == null || matcher.accept(fname)) { 223 if (matcher == null || matcher.accept(fname)) {
216 handler.handleStatus(new HgStatus(Removed, fname)); 224 handler.handleStatus(new HgStatus(Removed, fname, logHelper));
217 } 225 }
218 } 226 }
219 } 227 }
220 public void copied(Path fnameOrigin, Path fnameAdded) { 228 public void copied(Path fnameOrigin, Path fnameAdded) {
221 if (needCopies) { 229 if (needCopies) {
222 if (matcher == null || matcher.accept(fnameAdded)) { 230 if (matcher == null || matcher.accept(fnameAdded)) {
223 handler.handleStatus(new HgStatus(Added, fnameAdded, fnameOrigin)); 231 handler.handleStatus(new HgStatus(Added, fnameAdded, fnameOrigin, logHelper));
224 } 232 }
225 } 233 }
226 } 234 }
227 public void missing(Path fname) { 235 public void missing(Path fname) {
228 if (needMissing) { 236 if (needMissing) {
229 if (matcher == null || matcher.accept(fname)) { 237 if (matcher == null || matcher.accept(fname)) {
230 handler.handleStatus(new HgStatus(Missing, fname)); 238 handler.handleStatus(new HgStatus(Missing, fname, logHelper));
231 } 239 }
232 } 240 }
233 } 241 }
234 public void unknown(Path fname) { 242 public void unknown(Path fname) {
235 if (needUnknown) { 243 if (needUnknown) {
236 if (matcher == null || matcher.accept(fname)) { 244 if (matcher == null || matcher.accept(fname)) {
237 handler.handleStatus(new HgStatus(Unknown, fname)); 245 handler.handleStatus(new HgStatus(Unknown, fname, logHelper));
238 } 246 }
239 } 247 }
240 } 248 }
241 public void clean(Path fname) { 249 public void clean(Path fname) {
242 if (needClean) { 250 if (needClean) {
243 if (matcher == null || matcher.accept(fname)) { 251 if (matcher == null || matcher.accept(fname)) {
244 handler.handleStatus(new HgStatus(Clean, fname)); 252 handler.handleStatus(new HgStatus(Clean, fname, logHelper));
245 } 253 }
246 } 254 }
247 } 255 }
248 public void ignored(Path fname) { 256 public void ignored(Path fname) {
249 if (needIgnored) { 257 if (needIgnored) {
250 if (matcher == null || matcher.accept(fname)) { 258 if (matcher == null || matcher.accept(fname)) {
251 handler.handleStatus(new HgStatus(Ignored, fname)); 259 handler.handleStatus(new HgStatus(Ignored, fname, logHelper));
252 } 260 }
253 } 261 }
254 } 262 }
255 } 263 }
256 } 264 }