comparison src/org/tmatesoft/hg/core/HgLogCommand.java @ 366:189dc6dc1c3e

Use exceptions to expose errors reading mercurial data
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 16 Dec 2011 04:43:18 +0100
parents 5f9073eabf06
children 2fadf8695f8a
comparison
equal deleted inserted replaced
365:3572fcb06473 366:189dc6dc1c3e
257 csetTransform = null; 257 csetTransform = null;
258 progressHelper.done(); 258 progressHelper.done();
259 } 259 }
260 } 260 }
261 261
262 public void execute(HgChangesetTreeHandler handler) throws CancelledException { 262 public void execute(HgChangesetTreeHandler handler) throws CancelledException, HgException {
263 if (handler == null) { 263 if (handler == null) {
264 throw new IllegalArgumentException(); 264 throw new IllegalArgumentException();
265 } 265 }
266 if (csetTransform != null) { 266 if (csetTransform != null) {
267 throw new ConcurrentModificationException(); 267 throw new ConcurrentModificationException();
289 p2 = completeHistory[parent2]; 289 p2 = completeHistory[parent2];
290 } 290 }
291 completeHistory[revisionNumber] = new HistoryNode(commitRevisions[revisionNumber], revision, p1, p2); 291 completeHistory[revisionNumber] = new HistoryNode(commitRevisions[revisionNumber], revision, p1, p2);
292 } 292 }
293 293
294 HistoryNode[] go(HgDataFile fileNode) { 294 HistoryNode[] go(HgDataFile fileNode) throws HgInvalidControlFileException {
295 completeHistory = new HistoryNode[fileNode.getRevisionCount()]; 295 completeHistory = new HistoryNode[fileNode.getRevisionCount()];
296 commitRevisions = new int[completeHistory.length]; 296 commitRevisions = new int[completeHistory.length];
297 fileNode.walk(0, TIP, this); 297 fileNode.walk(0, TIP, this);
298 return completeHistory; 298 return completeHistory;
299 } 299 }
356 } 356 }
357 count++; 357 count++;
358 csetTransform.next(revisionNumber, nodeid, cset); 358 csetTransform.next(revisionNumber, nodeid, cset);
359 } 359 }
360 360
361 private HgChangelog.ParentWalker getParentHelper(boolean create) { 361 private HgChangelog.ParentWalker getParentHelper(boolean create) throws HgInvalidControlFileException {
362 if (parentHelper == null && create) { 362 if (parentHelper == null && create) {
363 parentHelper = repo.getChangelog().new ParentWalker(); 363 parentHelper = repo.getChangelog().new ParentWalker();
364 parentHelper.init(); 364 parentHelper.init();
365 } 365 }
366 return parentHelper; 366 return parentHelper;
449 449
450 public Nodeid fileRevision() { 450 public Nodeid fileRevision() {
451 return historyNode.fileRevision; 451 return historyNode.fileRevision;
452 } 452 }
453 453
454 public HgChangeset changeset() { 454 public HgChangeset changeset() throws HgException {
455 return get(historyNode.changeset)[0]; 455 return get(historyNode.changeset)[0];
456 } 456 }
457 457
458 public Pair<HgChangeset, HgChangeset> parents() { 458 public Pair<HgChangeset, HgChangeset> parents() throws HgException {
459 if (parents != null) { 459 if (parents != null) {
460 return parents; 460 return parents;
461 } 461 }
462 HistoryNode p; 462 HistoryNode p;
463 final int p1, p2; 463 final int p1, p2;
473 } 473 }
474 HgChangeset[] r = get(p1, p2); 474 HgChangeset[] r = get(p1, p2);
475 return parents = new Pair<HgChangeset, HgChangeset>(r[0], r[1]); 475 return parents = new Pair<HgChangeset, HgChangeset>(r[0], r[1]);
476 } 476 }
477 477
478 public Collection<HgChangeset> children() { 478 public Collection<HgChangeset> children() throws HgException {
479 if (children != null) { 479 if (children != null) {
480 return children; 480 return children;
481 } 481 }
482 if (historyNode.children == null) { 482 if (historyNode.children == null) {
483 children = Collections.emptyList(); 483 children = Collections.emptyList();
494 494
495 void populate(HgChangeset cs) { 495 void populate(HgChangeset cs) {
496 cachedChangesets.put(cs.getRevision(), cs); 496 cachedChangesets.put(cs.getRevision(), cs);
497 } 497 }
498 498
499 private HgChangeset[] get(int... changelogRevisionNumber) { 499 private HgChangeset[] get(int... changelogRevisionNumber) throws HgInvalidControlFileException {
500 HgChangeset[] rv = new HgChangeset[changelogRevisionNumber.length]; 500 HgChangeset[] rv = new HgChangeset[changelogRevisionNumber.length];
501 IntVector misses = new IntVector(changelogRevisionNumber.length, -1); 501 IntVector misses = new IntVector(changelogRevisionNumber.length, -1);
502 for (int i = 0; i < changelogRevisionNumber.length; i++) { 502 for (int i = 0; i < changelogRevisionNumber.length; i++) {
503 if (changelogRevisionNumber[i] == -1) { 503 if (changelogRevisionNumber[i] == -1) {
504 rv[i] = null; 504 rv[i] = null;
535 } 535 }
536 return rv; 536 return rv;
537 } 537 }
538 538
539 // init only when needed 539 // init only when needed
540 void initTransform() { 540 void initTransform() throws HgInvalidControlFileException {
541 if (transform == null) { 541 if (transform == null) {
542 transform = new ChangesetTransformer.Transformation(new HgStatusCollector(repo)/*XXX try to reuse from context?*/, getParentHelper(false)); 542 transform = new ChangesetTransformer.Transformation(new HgStatusCollector(repo)/*XXX try to reuse from context?*/, getParentHelper(false));
543 } 543 }
544 } 544 }
545 545