Mercurial > jhg
changeset 511:122e0600799f
Respect multiple joins/forks in a history of a single file
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 14 Dec 2012 15:39:49 +0100 |
parents | 90093ee56c0d |
children | 10ca3ede8367 |
files | cmdline/org/tmatesoft/hg/console/Main.java src/org/tmatesoft/hg/core/HgLogCommand.java |
diffstat | 2 files changed, 20 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/cmdline/org/tmatesoft/hg/console/Main.java Thu Dec 13 15:46:40 2012 +0100 +++ b/cmdline/org/tmatesoft/hg/console/Main.java Fri Dec 14 15:39:49 2012 +0100 @@ -172,7 +172,8 @@ private void buildFileLog() throws Exception { final long start = System.nanoTime(); HgLogCommand cmd = new HgLogCommand(hgRepo); - cmd.file("cmdline/org/tmatesoft/hg/console/Remote.java", true); + cmd.file("file1b.txt", true); + final int[] count = new int[] { 0 }; cmd.execute(new HgChangesetTreeHandler() { public void treeElement(HgChangesetTreeHandler.TreeElement entry) { StringBuilder sb = new StringBuilder(); @@ -208,8 +209,10 @@ if (isJoin || isFork) { System.out.println(); } + count[0]++; } }); + System.out.println(count[0]); final long end = System.nanoTime(); System.out.printf("buildFileLog: %,d ms\n", (end-start)/1000); }
--- a/src/org/tmatesoft/hg/core/HgLogCommand.java Thu Dec 13 15:46:40 2012 +0100 +++ b/src/org/tmatesoft/hg/core/HgLogCommand.java Fri Dec 14 15:39:49 2012 +0100 @@ -24,6 +24,7 @@ import java.util.Calendar; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.LinkedList; @@ -541,6 +542,11 @@ queue.add(completeHistory[lastRevisionIndex]); do { HistoryNode withFileChange = queue.removeFirst(); + if (strippedHistoryList.contains(withFileChange)) { + // fork point for the change that was later merged (and we traced + // both lines of development by now. + continue; + } if (withFileChange.children != null) { withFileChange.children.retainAll(strippedHistoryList); } @@ -552,6 +558,12 @@ queue.addLast(withFileChange.parent2); } } while (!queue.isEmpty()); + Collections.sort(strippedHistoryList, new Comparator<HistoryNode>() { + + public int compare(HistoryNode o1, HistoryNode o2) { + return o1.changeset - o2.changeset; + } + }); completeHistory = null; commitRevisions = null; // collected values are no longer valid - shall @@ -666,6 +678,10 @@ child.parent1 = this; addChild(child); } + + public String toString() { + return String.format("<cset:%d, parents: %s, %s>", changeset, parent1 == null ? "-" : String.valueOf(parent1.changeset), parent2 == null ? "-" : String.valueOf(parent2.changeset)); + } } private class ElementImpl implements HgChangesetTreeHandler.TreeElement, HgChangelog.Inspector {