Mercurial > hg4j
diff 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 |
line wrap: on
line diff
--- a/cmdline/org/tmatesoft/hg/console/Main.java Wed Jun 06 21:23:57 2012 +0200 +++ b/cmdline/org/tmatesoft/hg/console/Main.java Thu Jun 07 16:01:09 2012 +0200 @@ -45,6 +45,7 @@ import org.tmatesoft.hg.internal.PathGlobMatcher; import org.tmatesoft.hg.internal.PhasesHelper; import org.tmatesoft.hg.internal.RelativePathRewrite; +import org.tmatesoft.hg.internal.RevisionDescendants; import org.tmatesoft.hg.internal.StreamLogFacility; import org.tmatesoft.hg.repo.HgBranches; import org.tmatesoft.hg.repo.HgChangelog; @@ -95,7 +96,10 @@ public static void main(String[] args) throws Exception { Main m = new Main(args); - m.dumpPhases(); + m.testRevisionDescendants(); + for (int i : new int[] {1,2,3}) { + m.dumpPhases(); + } // m.buildFileLog(); // m.testConsoleLog(); // m.testTreeTraversal(); @@ -118,22 +122,53 @@ // m.bunchOfTests(); } - // hg/test-phases + // -R {junit-test-repos}/branches-1 + private void testRevisionDescendants() throws Exception { + int[] roots = new int[] {0, 1, 2, 3, 4, 5}; + RevisionDescendants[] result = new RevisionDescendants[roots.length]; + for (int i = 0; i < roots.length; i++) { + result[i] = new RevisionDescendants(hgRepo, roots[i]); + result[i].build(); + } + for (int i = 0; i < roots.length; i++) { + System.out.printf("For root %d descendats are:", roots[i]); + for (int j = roots[i], x = hgRepo.getChangelog().getLastRevision(); j <= x; j++) { + if (result[i].isDescendant(j)) { + System.out.printf("%3d ", j); + } + } + System.out.printf(", isEmpty:%b\n", !result[i].hasDescendants()); + } + } + + // -R ${system_property:user.home}/hg/test-phases/ // TODO as junit test private void dumpPhases() throws Exception { + HgPhase[] result1 = new HgPhase[hgRepo.getChangelog().getRevisionCount()]; + HgPhase[] result2 = new HgPhase[hgRepo.getChangelog().getRevisionCount()]; + final long start1 = System.nanoTime(); HgChangelog.ParentWalker pw = hgRepo.getChangelog().new ParentWalker(); pw.init(); + final long start1bis = System.nanoTime(); PhasesHelper ph = new PhasesHelper(hgRepo, pw); - System.out.println("With ParentWalker(simulates HgChangeset case)"); for (int i = 0, l = hgRepo.getChangelog().getLastRevision(); i <= l; i++) { - HgPhase phase = ph.getPhase(i, null); - System.out.printf("rev:%3d, phase:%s\n", i, phase); + result1[i] = ph.getPhase(i, null); } + final long start2 = System.nanoTime(); ph = new PhasesHelper(hgRepo); - System.out.println("Without ParentWalker"); for (int i = 0, l = hgRepo.getChangelog().getLastRevision(); i <= l; i++) { - HgPhase phase = ph.getPhase(i, null); - System.out.printf("rev:%3d, phase:%s\n", i, phase); + result2[i] = ph.getPhase(i, null); + } + final long end = System.nanoTime(); + System.out.printf("With ParentWalker(simulates log command for whole repo): %d ms (pw init: %,d ns)\n", (start2 - start1)/1000, start1bis - start1); + printPhases(result1); + System.out.printf("Without ParentWalker (simulates log command for single file): %d ms\n", (end - start2)/1000); + printPhases(result2); + } + + private static void printPhases(HgPhase[] phase) { + for (int i = 0; i < phase.length; i++) { + System.out.printf("rev:%3d, phase:%s\n", i, phase[i]); } }