Mercurial > hg4j
comparison cmdline/org/tmatesoft/hg/console/Main.java @ 449:5787e912f60e smartgit3
Speed up changeset phase detection when no parent cache is avalable
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 07 Jun 2012 16:01:09 +0200 |
| parents | d0e5dc3cae6e |
| children | 03fd8d079e9c |
comparison
equal
deleted
inserted
replaced
| 448:2e402c12ebc6 | 449:5787e912f60e |
|---|---|
| 43 import org.tmatesoft.hg.internal.ByteArrayChannel; | 43 import org.tmatesoft.hg.internal.ByteArrayChannel; |
| 44 import org.tmatesoft.hg.internal.DigestHelper; | 44 import org.tmatesoft.hg.internal.DigestHelper; |
| 45 import org.tmatesoft.hg.internal.PathGlobMatcher; | 45 import org.tmatesoft.hg.internal.PathGlobMatcher; |
| 46 import org.tmatesoft.hg.internal.PhasesHelper; | 46 import org.tmatesoft.hg.internal.PhasesHelper; |
| 47 import org.tmatesoft.hg.internal.RelativePathRewrite; | 47 import org.tmatesoft.hg.internal.RelativePathRewrite; |
| 48 import org.tmatesoft.hg.internal.RevisionDescendants; | |
| 48 import org.tmatesoft.hg.internal.StreamLogFacility; | 49 import org.tmatesoft.hg.internal.StreamLogFacility; |
| 49 import org.tmatesoft.hg.repo.HgBranches; | 50 import org.tmatesoft.hg.repo.HgBranches; |
| 50 import org.tmatesoft.hg.repo.HgChangelog; | 51 import org.tmatesoft.hg.repo.HgChangelog; |
| 51 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | 52 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; |
| 52 import org.tmatesoft.hg.repo.HgDataFile; | 53 import org.tmatesoft.hg.repo.HgDataFile; |
| 93 System.out.println("REPO:" + hgRepo.getLocation()); | 94 System.out.println("REPO:" + hgRepo.getLocation()); |
| 94 } | 95 } |
| 95 | 96 |
| 96 public static void main(String[] args) throws Exception { | 97 public static void main(String[] args) throws Exception { |
| 97 Main m = new Main(args); | 98 Main m = new Main(args); |
| 98 m.dumpPhases(); | 99 m.testRevisionDescendants(); |
| 100 for (int i : new int[] {1,2,3}) { | |
| 101 m.dumpPhases(); | |
| 102 } | |
| 99 // m.buildFileLog(); | 103 // m.buildFileLog(); |
| 100 // m.testConsoleLog(); | 104 // m.testConsoleLog(); |
| 101 // m.testTreeTraversal(); | 105 // m.testTreeTraversal(); |
| 102 // m.testRevisionMap(); | 106 // m.testRevisionMap(); |
| 103 // m.testSubrepos(); | 107 // m.testSubrepos(); |
| 116 // m.dumpCompleteManifestLow(); | 120 // m.dumpCompleteManifestLow(); |
| 117 // m.dumpCompleteManifestHigh(); | 121 // m.dumpCompleteManifestHigh(); |
| 118 // m.bunchOfTests(); | 122 // m.bunchOfTests(); |
| 119 } | 123 } |
| 120 | 124 |
| 121 // hg/test-phases | 125 // -R {junit-test-repos}/branches-1 |
| 126 private void testRevisionDescendants() throws Exception { | |
| 127 int[] roots = new int[] {0, 1, 2, 3, 4, 5}; | |
| 128 RevisionDescendants[] result = new RevisionDescendants[roots.length]; | |
| 129 for (int i = 0; i < roots.length; i++) { | |
| 130 result[i] = new RevisionDescendants(hgRepo, roots[i]); | |
| 131 result[i].build(); | |
| 132 } | |
| 133 for (int i = 0; i < roots.length; i++) { | |
| 134 System.out.printf("For root %d descendats are:", roots[i]); | |
| 135 for (int j = roots[i], x = hgRepo.getChangelog().getLastRevision(); j <= x; j++) { | |
| 136 if (result[i].isDescendant(j)) { | |
| 137 System.out.printf("%3d ", j); | |
| 138 } | |
| 139 } | |
| 140 System.out.printf(", isEmpty:%b\n", !result[i].hasDescendants()); | |
| 141 } | |
| 142 } | |
| 143 | |
| 144 // -R ${system_property:user.home}/hg/test-phases/ | |
| 122 // TODO as junit test | 145 // TODO as junit test |
| 123 private void dumpPhases() throws Exception { | 146 private void dumpPhases() throws Exception { |
| 147 HgPhase[] result1 = new HgPhase[hgRepo.getChangelog().getRevisionCount()]; | |
| 148 HgPhase[] result2 = new HgPhase[hgRepo.getChangelog().getRevisionCount()]; | |
| 149 final long start1 = System.nanoTime(); | |
| 124 HgChangelog.ParentWalker pw = hgRepo.getChangelog().new ParentWalker(); | 150 HgChangelog.ParentWalker pw = hgRepo.getChangelog().new ParentWalker(); |
| 125 pw.init(); | 151 pw.init(); |
| 152 final long start1bis = System.nanoTime(); | |
| 126 PhasesHelper ph = new PhasesHelper(hgRepo, pw); | 153 PhasesHelper ph = new PhasesHelper(hgRepo, pw); |
| 127 System.out.println("With ParentWalker(simulates HgChangeset case)"); | |
| 128 for (int i = 0, l = hgRepo.getChangelog().getLastRevision(); i <= l; i++) { | 154 for (int i = 0, l = hgRepo.getChangelog().getLastRevision(); i <= l; i++) { |
| 129 HgPhase phase = ph.getPhase(i, null); | 155 result1[i] = ph.getPhase(i, null); |
| 130 System.out.printf("rev:%3d, phase:%s\n", i, phase); | 156 } |
| 131 } | 157 final long start2 = System.nanoTime(); |
| 132 ph = new PhasesHelper(hgRepo); | 158 ph = new PhasesHelper(hgRepo); |
| 133 System.out.println("Without ParentWalker"); | |
| 134 for (int i = 0, l = hgRepo.getChangelog().getLastRevision(); i <= l; i++) { | 159 for (int i = 0, l = hgRepo.getChangelog().getLastRevision(); i <= l; i++) { |
| 135 HgPhase phase = ph.getPhase(i, null); | 160 result2[i] = ph.getPhase(i, null); |
| 136 System.out.printf("rev:%3d, phase:%s\n", i, phase); | 161 } |
| 162 final long end = System.nanoTime(); | |
| 163 System.out.printf("With ParentWalker(simulates log command for whole repo): %d ms (pw init: %,d ns)\n", (start2 - start1)/1000, start1bis - start1); | |
| 164 printPhases(result1); | |
| 165 System.out.printf("Without ParentWalker (simulates log command for single file): %d ms\n", (end - start2)/1000); | |
| 166 printPhases(result2); | |
| 167 } | |
| 168 | |
| 169 private static void printPhases(HgPhase[] phase) { | |
| 170 for (int i = 0; i < phase.length; i++) { | |
| 171 System.out.printf("rev:%3d, phase:%s\n", i, phase[i]); | |
| 137 } | 172 } |
| 138 } | 173 } |
| 139 | 174 |
| 140 private void buildFileLog() throws Exception { | 175 private void buildFileLog() throws Exception { |
| 141 HgLogCommand cmd = new HgLogCommand(hgRepo); | 176 HgLogCommand cmd = new HgLogCommand(hgRepo); |
