Mercurial > jhg
comparison cmdline/org/tmatesoft/hg/console/Main.java @ 423:9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 23 Mar 2012 22:51:18 +0100 |
| parents | ccd7d25e5aea |
| children | 6437d261048a |
comparison
equal
deleted
inserted
replaced
| 422:5d1cc7366d04 | 423:9c9c442b5f2e |
|---|---|
| 26 import java.util.HashSet; | 26 import java.util.HashSet; |
| 27 import java.util.List; | 27 import java.util.List; |
| 28 import java.util.Map; | 28 import java.util.Map; |
| 29 | 29 |
| 30 import org.junit.Assert; | 30 import org.junit.Assert; |
| 31 import org.tmatesoft.hg.core.HgBadStateException; | |
| 32 import org.tmatesoft.hg.core.HgCallbackTargetException; | 31 import org.tmatesoft.hg.core.HgCallbackTargetException; |
| 33 import org.tmatesoft.hg.core.HgCatCommand; | 32 import org.tmatesoft.hg.core.HgCatCommand; |
| 34 import org.tmatesoft.hg.core.HgChangeset; | 33 import org.tmatesoft.hg.core.HgChangeset; |
| 35 import org.tmatesoft.hg.core.HgChangesetFileSneaker; | 34 import org.tmatesoft.hg.core.HgChangesetFileSneaker; |
| 36 import org.tmatesoft.hg.core.HgChangesetTreeHandler; | 35 import org.tmatesoft.hg.core.HgChangesetTreeHandler; |
| 55 import org.tmatesoft.hg.repo.HgInternals; | 54 import org.tmatesoft.hg.repo.HgInternals; |
| 56 import org.tmatesoft.hg.repo.HgManifest; | 55 import org.tmatesoft.hg.repo.HgManifest; |
| 57 import org.tmatesoft.hg.repo.HgManifest.Flags; | 56 import org.tmatesoft.hg.repo.HgManifest.Flags; |
| 58 import org.tmatesoft.hg.repo.HgMergeState; | 57 import org.tmatesoft.hg.repo.HgMergeState; |
| 59 import org.tmatesoft.hg.repo.HgRepository; | 58 import org.tmatesoft.hg.repo.HgRepository; |
| 59 import org.tmatesoft.hg.repo.HgRuntimeException; | |
| 60 import org.tmatesoft.hg.repo.HgStatusCollector; | 60 import org.tmatesoft.hg.repo.HgStatusCollector; |
| 61 import org.tmatesoft.hg.repo.HgStatusInspector; | 61 import org.tmatesoft.hg.repo.HgStatusInspector; |
| 62 import org.tmatesoft.hg.repo.HgSubrepoLocation; | 62 import org.tmatesoft.hg.repo.HgSubrepoLocation; |
| 63 import org.tmatesoft.hg.repo.HgSubrepoLocation.Kind; | 63 import org.tmatesoft.hg.repo.HgSubrepoLocation.Kind; |
| 64 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; | 64 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; |
| 129 private void buildFileLog() throws Exception { | 129 private void buildFileLog() throws Exception { |
| 130 HgLogCommand cmd = new HgLogCommand(hgRepo); | 130 HgLogCommand cmd = new HgLogCommand(hgRepo); |
| 131 cmd.file("file1", false); | 131 cmd.file("file1", false); |
| 132 cmd.execute(new HgChangesetTreeHandler() { | 132 cmd.execute(new HgChangesetTreeHandler() { |
| 133 public void next(HgChangesetTreeHandler.TreeElement entry) { | 133 public void next(HgChangesetTreeHandler.TreeElement entry) { |
| 134 try { | 134 StringBuilder sb = new StringBuilder(); |
| 135 StringBuilder sb = new StringBuilder(); | 135 HashSet<Nodeid> test = new HashSet<Nodeid>(entry.childRevisions()); |
| 136 HashSet<Nodeid> test = new HashSet<Nodeid>(entry.childRevisions()); | 136 for (HgChangeset cc : entry.children()) { |
| 137 for (HgChangeset cc : entry.children()) { | 137 sb.append(cc.getRevisionIndex()); |
| 138 sb.append(cc.getRevisionIndex()); | 138 sb.append(':'); |
| 139 sb.append(':'); | 139 sb.append(cc.getNodeid().shortNotation()); |
| 140 sb.append(cc.getNodeid().shortNotation()); | 140 sb.append(", "); |
| 141 sb.append(", "); | 141 } |
| 142 final Pair<Nodeid, Nodeid> parents = entry.parentRevisions(); | |
| 143 final boolean isJoin = !parents.first().isNull() && !parents.second().isNull(); | |
| 144 final boolean isFork = entry.children().size() > 1; | |
| 145 final HgChangeset cset = entry.changeset(); | |
| 146 System.out.printf("%d:%s - %s\n", cset.getRevisionIndex(), cset.getNodeid().shortNotation(), cset.getComment()); | |
| 147 if (!isJoin && !isFork && !entry.children().isEmpty()) { | |
| 148 System.out.printf("\t=> %s\n", sb); | |
| 149 } | |
| 150 if (isJoin) { | |
| 151 HgChangeset p1 = entry.parents().first(); | |
| 152 HgChangeset p2 = entry.parents().second(); | |
| 153 System.out.printf("\tjoin <= (%d:%s, %d:%s)", p1.getRevisionIndex(), p1.getNodeid().shortNotation(), p2.getRevisionIndex(), p2.getNodeid().shortNotation()); | |
| 154 if (isFork) { | |
| 155 System.out.print(", "); | |
| 142 } | 156 } |
| 143 final Pair<Nodeid, Nodeid> parents = entry.parentRevisions(); | 157 } |
| 144 final boolean isJoin = !parents.first().isNull() && !parents.second().isNull(); | 158 if (isFork) { |
| 145 final boolean isFork = entry.children().size() > 1; | 159 if (!isJoin) { |
| 146 final HgChangeset cset = entry.changeset(); | 160 System.out.print('\t'); |
| 147 System.out.printf("%d:%s - %s\n", cset.getRevisionIndex(), cset.getNodeid().shortNotation(), cset.getComment()); | |
| 148 if (!isJoin && !isFork && !entry.children().isEmpty()) { | |
| 149 System.out.printf("\t=> %s\n", sb); | |
| 150 } | 161 } |
| 151 if (isJoin) { | 162 System.out.printf("fork => [%s]", sb); |
| 152 HgChangeset p1 = entry.parents().first(); | 163 } |
| 153 HgChangeset p2 = entry.parents().second(); | 164 if (isJoin || isFork) { |
| 154 System.out.printf("\tjoin <= (%d:%s, %d:%s)", p1.getRevisionIndex(), p1.getNodeid().shortNotation(), p2.getRevisionIndex(), p2.getNodeid().shortNotation()); | 165 System.out.println(); |
| 155 if (isFork) { | |
| 156 System.out.print(", "); | |
| 157 } | |
| 158 } | |
| 159 if (isFork) { | |
| 160 if (!isJoin) { | |
| 161 System.out.print('\t'); | |
| 162 } | |
| 163 System.out.printf("fork => [%s]", sb); | |
| 164 } | |
| 165 if (isJoin || isFork) { | |
| 166 System.out.println(); | |
| 167 } | |
| 168 } catch (HgException ex) { | |
| 169 ex.printStackTrace(); | |
| 170 } | 166 } |
| 171 } | 167 } |
| 172 }); | 168 }); |
| 173 } | 169 } |
| 174 | 170 |
| 195 } | 191 } |
| 196 if (join) { | 192 if (join) { |
| 197 System.out.print("]"); | 193 System.out.print("]"); |
| 198 } | 194 } |
| 199 fileLocalRevisions++; | 195 fileLocalRevisions++; |
| 200 } catch (HgException ex) { | 196 } catch (HgRuntimeException ex) { |
| 201 ex.printStackTrace(); | 197 ex.printStackTrace(); |
| 202 } | 198 } |
| 203 } | 199 } |
| 204 }); | 200 }); |
| 205 System.out.println(); | 201 System.out.println(); |
| 384 final ByteArrayChannel sink = new ByteArrayChannel(); | 380 final ByteArrayChannel sink = new ByteArrayChannel(); |
| 385 r.putContentTo(sink); | 381 r.putContentTo(sink); |
| 386 return String.format("%s %s (%d bytes)", r.getPath(), r.getRevision(), sink.toArray().length); | 382 return String.format("%s %s (%d bytes)", r.getPath(), r.getRevision(), sink.toArray().length); |
| 387 } | 383 } |
| 388 | 384 |
| 389 private void testFileStatus() throws HgException, IOException { | 385 private void testFileStatus() throws Exception { |
| 390 // final Path path = Path.create("src/org/tmatesoft/hg/util/"); | 386 // final Path path = Path.create("src/org/tmatesoft/hg/util/"); |
| 391 // final Path path = Path.create("src/org/tmatesoft/hg/internal/Experimental.java"); | 387 // final Path path = Path.create("src/org/tmatesoft/hg/internal/Experimental.java"); |
| 392 // final Path path = Path.create("missing-dir/"); | 388 // final Path path = Path.create("missing-dir/"); |
| 393 // HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, path); | 389 // HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, path); |
| 394 HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, new PathGlobMatcher("mi**")); | 390 HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, new PathGlobMatcher("mi**")); |
| 504 System.out.printf("%d : %s\n", manifestRevision, nid); | 500 System.out.printf("%d : %s\n", manifestRevision, nid); |
| 505 return true; | 501 return true; |
| 506 } | 502 } |
| 507 | 503 |
| 508 public boolean next(Nodeid nid, String fname, String flags) { | 504 public boolean next(Nodeid nid, String fname, String flags) { |
| 509 throw new HgBadStateException(HgManifest.Inspector2.class.getName()); | 505 throw new IllegalStateException(HgManifest.Inspector2.class.getName()); |
| 510 } | 506 } |
| 511 public boolean next(Nodeid nid, Path fname, Flags flags) { | 507 public boolean next(Nodeid nid, Path fname, Flags flags) { |
| 512 System.out.println(nid + "\t" + fname + "\t\t" + flags); | 508 System.out.println(nid + "\t" + fname + "\t\t" + flags); |
| 513 return true; | 509 return true; |
| 514 } | 510 } |
| 527 } | 523 } |
| 528 public void dir(Path p) { | 524 public void dir(Path p) { |
| 529 System.out.println(p); | 525 System.out.println(p); |
| 530 } | 526 } |
| 531 public void file(HgFileRevision fileRevision) { | 527 public void file(HgFileRevision fileRevision) { |
| 532 try { | 528 System.out.print(fileRevision.getRevision());; |
| 533 System.out.print(fileRevision.getRevision());; | 529 System.out.print(" "); |
| 534 System.out.print(" "); | 530 System.out.printf("%s %s", fileRevision.getParents().first().shortNotation(), fileRevision.getParents().second().shortNotation()); |
| 535 System.out.printf("%s %s", fileRevision.getParents().first().shortNotation(), fileRevision.getParents().second().shortNotation()); | 531 System.out.print(" "); |
| 536 System.out.print(" "); | 532 System.out.println(fileRevision.getPath()); |
| 537 System.out.println(fileRevision.getPath()); | |
| 538 } catch (HgException ex) { | |
| 539 throw new HgCallbackTargetException.Wrap(ex); | |
| 540 } | |
| 541 } | 533 } |
| 542 | 534 |
| 543 public void end(Nodeid manifestRevision) { | 535 public void end(Nodeid manifestRevision) { |
| 544 System.out.println(); | 536 System.out.println(); |
| 545 } | 537 } |
