Mercurial > jhg
comparison src/org/tmatesoft/hg/core/HgLogCommand.java @ 370:a2341e761609
Let callback implementations deliver errors (e,g. own exceptions) to client code
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 22 Dec 2011 02:37:10 +0300 |
| parents | 8107b95f4280 |
| children | 9517df1ef7ec |
comparison
equal
deleted
inserted
replaced
| 369:091666b87f62 | 370:a2341e761609 |
|---|---|
| 201 } | 201 } |
| 202 | 202 |
| 203 /** | 203 /** |
| 204 * | 204 * |
| 205 * @param handler callback to process changesets. | 205 * @param handler callback to process changesets. |
| 206 * @throws HgCallbackTargetException FIXME | |
| 207 * @throws HgException FIXME | |
| 208 * @throws CancelledException FIXME | |
| 206 * @throws IllegalArgumentException when inspector argument is null | 209 * @throws IllegalArgumentException when inspector argument is null |
| 207 * @throws ConcurrentModificationException if this log command instance is already running | 210 * @throws ConcurrentModificationException if this log command instance is already running |
| 208 */ | 211 */ |
| 209 public void execute(HgChangesetHandler handler) throws HgDataStreamException, HgInvalidControlFileException, HgCallbackTargetException, CancelledException { | 212 public void execute(HgChangesetHandler handler) throws HgCallbackTargetException, HgException, CancelledException { |
| 210 if (handler == null) { | 213 if (handler == null) { |
| 211 throw new IllegalArgumentException(); | 214 throw new IllegalArgumentException(); |
| 212 } | 215 } |
| 213 if (csetTransform != null) { | 216 if (csetTransform != null) { |
| 214 throw new ConcurrentModificationException(); | 217 throw new ConcurrentModificationException(); |
| 235 if (handler instanceof FileHistoryHandler) { | 238 if (handler instanceof FileHistoryHandler) { |
| 236 HgFileRevision src = new HgFileRevision(repo, fileNode.getCopySourceRevision(), fileNode.getCopySourceName()); | 239 HgFileRevision src = new HgFileRevision(repo, fileNode.getCopySourceRevision(), fileNode.getCopySourceName()); |
| 237 HgFileRevision dst = new HgFileRevision(repo, fileNode.getRevision(0), fileNode.getPath(), src.getPath()); | 240 HgFileRevision dst = new HgFileRevision(repo, fileNode.getRevision(0), fileNode.getPath(), src.getPath()); |
| 238 try { | 241 try { |
| 239 ((FileHistoryHandler) handler).copy(src, dst); | 242 ((FileHistoryHandler) handler).copy(src, dst); |
| 240 } catch (RuntimeException ex) { | 243 } catch (HgCallbackTargetException.Wrap ex) { |
| 241 throw new HgCallbackTargetException(ex).setRevision(fileNode.getCopySourceRevision()).setFileName(fileNode.getCopySourceName()); | 244 throw new HgCallbackTargetException(ex).setRevision(fileNode.getCopySourceRevision()).setFileName(fileNode.getCopySourceName()); |
| 242 } | 245 } |
| 243 } | 246 } |
| 244 if (limit > 0 && count >= limit) { | 247 if (limit > 0 && count >= limit) { |
| 245 // if limit reach, follow is useless. | 248 // if limit reach, follow is useless. |
| 257 csetTransform = null; | 260 csetTransform = null; |
| 258 progressHelper.done(); | 261 progressHelper.done(); |
| 259 } | 262 } |
| 260 } | 263 } |
| 261 | 264 |
| 262 public void execute(HgChangesetTreeHandler handler) throws CancelledException, HgException { | 265 /** |
| 266 * | |
| 267 * @param handler | |
| 268 * @throws HgCallbackTargetException | |
| 269 * @throws HgException | |
| 270 * @throws CancelledException | |
| 271 */ | |
| 272 public void execute(HgChangesetTreeHandler handler) throws HgCallbackTargetException, HgException, CancelledException { | |
| 263 if (handler == null) { | 273 if (handler == null) { |
| 264 throw new IllegalArgumentException(); | 274 throw new IllegalArgumentException(); |
| 265 } | 275 } |
| 266 if (csetTransform != null) { | 276 if (csetTransform != null) { |
| 267 throw new ConcurrentModificationException(); | 277 throw new ConcurrentModificationException(); |
| 316 progressHelper.worked(1); | 326 progressHelper.worked(1); |
| 317 ph2 = new ProgressSupport.Sub(progressHelper, 2); | 327 ph2 = new ProgressSupport.Sub(progressHelper, 2); |
| 318 } else { | 328 } else { |
| 319 ph2 = new ProgressSupport.Sub(progressHelper, 3); | 329 ph2 = new ProgressSupport.Sub(progressHelper, 3); |
| 320 } | 330 } |
| 321 ph2.start(completeHistory.length); | 331 try { |
| 322 // XXX shall sort completeHistory according to changeset numbers? | 332 ph2.start(completeHistory.length); |
| 323 for (int i = 0; i < completeHistory.length; i++ ) { | 333 // XXX shall sort completeHistory according to changeset numbers? |
| 324 final HistoryNode n = completeHistory[i]; | 334 for (int i = 0; i < completeHistory.length; i++ ) { |
| 325 handler.next(ei.init(n)); | 335 final HistoryNode n = completeHistory[i]; |
| 326 ph2.worked(1); | 336 handler.next(ei.init(n)); |
| 327 cancelHelper.checkCancelled(); | 337 ph2.worked(1); |
| 338 cancelHelper.checkCancelled(); | |
| 339 } | |
| 340 } catch (HgCallbackTargetException.Wrap ex) { | |
| 341 throw new HgCallbackTargetException(ex); | |
| 328 } | 342 } |
| 329 progressHelper.done(); | 343 progressHelper.done(); |
| 330 } | 344 } |
| 331 | 345 |
| 332 // | 346 // |
| 377 * followed by any changesets. | 391 * followed by any changesets. |
| 378 * | 392 * |
| 379 * @author Artem Tikhomirov | 393 * @author Artem Tikhomirov |
| 380 * @author TMate Software Ltd. | 394 * @author TMate Software Ltd. |
| 381 */ | 395 */ |
| 382 public interface FileHistoryHandler extends HgChangesetHandler { | 396 public interface FileHistoryHandler extends HgChangesetHandler { // FIXME move to stanalone class file, perhaps? |
| 383 // XXX perhaps, should distinguish copy from rename? And what about merged revisions and following them? | 397 // XXX perhaps, should distinguish copy from rename? And what about merged revisions and following them? |
| 384 void copy(HgFileRevision from, HgFileRevision to); | 398 /** |
| 399 * @throws HgCallbackTargetException.Wrap wrapper object for any exception user code may produce. Wrapped exception would get re-thrown with {@link HgCallbackTargetException} | |
| 400 */ | |
| 401 void copy(HgFileRevision from, HgFileRevision to) throws HgCallbackTargetException.Wrap; | |
| 385 } | 402 } |
| 386 | 403 |
| 387 public static class CollectHandler implements HgChangesetHandler { | 404 public static class CollectHandler implements HgChangesetHandler { |
| 388 private final List<HgChangeset> result = new LinkedList<HgChangeset>(); | 405 private final List<HgChangeset> result = new LinkedList<HgChangeset>(); |
| 389 | 406 |
