Mercurial > jhg
comparison src/com/tmate/hgkit/console/Log.java @ 48:e34f90b9ded1
Limit option for history/log
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 14 Jan 2011 23:22:20 +0100 |
| parents | b01500fe2604 |
| children | 26e3eeaa3962 |
comparison
equal
deleted
inserted
replaced
| 47:b01500fe2604 | 48:e34f90b9ded1 |
|---|---|
| 30 final Dump dump = new Dump(hgRepo); | 30 final Dump dump = new Dump(hgRepo); |
| 31 dump.complete = false; //cmdLineOpts; | 31 dump.complete = false; //cmdLineOpts; |
| 32 dump.reverseOrder = true; | 32 dump.reverseOrder = true; |
| 33 if (cmdLineOpts.files.isEmpty()) { | 33 if (cmdLineOpts.files.isEmpty()) { |
| 34 // no revisions and no limit | 34 // no revisions and no limit |
| 35 hgRepo.getChangelog().all(dump); | 35 if (cmdLineOpts.limit == -1) { |
| 36 hgRepo.getChangelog().all(dump); | |
| 37 } else { | |
| 38 int[] r = new int[] { 0, hgRepo.getChangelog().getRevisionCount() }; | |
| 39 if (fixRange(r, dump.reverseOrder, cmdLineOpts.limit) == 0) { | |
| 40 System.out.println("No changes"); | |
| 41 return; | |
| 42 } | |
| 43 hgRepo.getChangelog().range(r[0], r[1], dump); | |
| 44 } | |
| 36 dump.complete(); | 45 dump.complete(); |
| 37 } else { | 46 } else { |
| 38 for (String fname : cmdLineOpts.files) { | 47 for (String fname : cmdLineOpts.files) { |
| 39 HgDataFile f1 = hgRepo.getFileNode(fname); | 48 HgDataFile f1 = hgRepo.getFileNode(fname); |
| 40 System.out.println("History of the file: " + f1.getPath()); | 49 System.out.println("History of the file: " + f1.getPath()); |
| 41 f1.history(dump); | 50 if (cmdLineOpts.limit == -1) { |
| 51 f1.history(dump); | |
| 52 } else { | |
| 53 int[] r = new int[] { 0, f1.getRevisionCount() }; | |
| 54 if (fixRange(r, dump.reverseOrder, cmdLineOpts.limit) == 0) { | |
| 55 System.out.println("No changes"); | |
| 56 continue; | |
| 57 } | |
| 58 f1.history(r[0], r[1], dump); | |
| 59 } | |
| 42 dump.complete(); | 60 dump.complete(); |
| 43 } | 61 } |
| 44 } | 62 } |
| 45 // | 63 // |
| 46 // System.out.println("\n\n========================="); | 64 // System.out.println("\n\n========================="); |
| 47 // System.out.println("Range 1-3:"); | 65 // System.out.println("Range 1-3:"); |
| 48 // f1.history(1,3, callback); | 66 // f1.history(1,3, callback); |
| 49 // | 67 // |
| 50 //new ChangelogWalker().setFile("hello.c").setRevisionRange(1, 4).accept(new Visitor); | 68 //new ChangelogWalker().setFile("hello.c").setRevisionRange(1, 4).accept(new Visitor); |
| 69 } | |
| 70 | |
| 71 private static int fixRange(int[] start_end, boolean reverse, int limit) { | |
| 72 assert start_end.length == 2; | |
| 73 if (limit < start_end[1]) { | |
| 74 if (reverse) { | |
| 75 // adjust left boundary of the range | |
| 76 start_end[0] = start_end[1] - limit; | |
| 77 } else { | |
| 78 start_end[1] = limit; // adjust right boundary | |
| 79 } | |
| 80 } | |
| 81 int rv = start_end[1] - start_end[0]; | |
| 82 start_end[1]--; // range needs index, not length | |
| 83 return rv; | |
| 51 } | 84 } |
| 52 | 85 |
| 53 private static final class Dump implements Changeset.Inspector { | 86 private static final class Dump implements Changeset.Inspector { |
| 54 // params | 87 // params |
| 55 boolean complete = false; | 88 boolean complete = false; |
| 84 private String print(int revNumber, Nodeid csetNodeid, Changeset cset) { | 117 private String print(int revNumber, Nodeid csetNodeid, Changeset cset) { |
| 85 StringBuilder sb = new StringBuilder(); | 118 StringBuilder sb = new StringBuilder(); |
| 86 Formatter f = new Formatter(sb); | 119 Formatter f = new Formatter(sb); |
| 87 f.format("changeset: %d:%s\n", revNumber, complete ? csetNodeid : csetNodeid.shortNotation()); | 120 f.format("changeset: %d:%s\n", revNumber, complete ? csetNodeid : csetNodeid.shortNotation()); |
| 88 if (complete) { | 121 if (complete) { |
| 89 f.format("parent: %s\nparent: %s\nmanifest: %s", "-1", "-1", cset.manifest()); | 122 f.format("parent: %s\nparent: %s\nmanifest: %s\n", "-1", "-1", cset.manifest()); |
| 90 } | 123 } |
| 91 f.format("user: %s\ndate: %s\n", cset.user(), cset.dateString()); | 124 f.format("user: %s\ndate: %s\n", cset.user(), cset.dateString()); |
| 92 if (complete) { | 125 if (complete) { |
| 93 final List<String> files = cset.files(); | 126 final List<String> files = cset.files(); |
| 94 sb.append("files: "); | 127 sb.append("files: "); |
| 95 for (String s : files) { | 128 for (String s : files) { |
| 96 sb.append(' '); | 129 sb.append(' '); |
| 97 sb.append(s); | 130 sb.append(s); |
| 98 } | 131 } |
| 99 f.format("description:\n%s\n\n", cset.comment()); | 132 f.format("\ndescription:\n%s\n\n", cset.comment()); |
| 100 } else { | 133 } else { |
| 101 f.format("summary: %s\n\n", cset.comment()); | 134 f.format("summary: %s\n\n", cset.comment()); |
| 102 } | 135 } |
| 103 if (cset.extras() != null) { | 136 if (cset.extras() != null) { |
| 104 f.format("extra: " + cset.extras()); // TODO | 137 f.format("extra: " + cset.extras()); // TODO |
