Mercurial > hg4j
diff test/org/tmatesoft/hg/test/TestHistory.java @ 508:ca5202afea90
Support follow history option when walking file history tree
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 12 Dec 2012 20:52:10 +0100 |
parents | a6435c1a42d0 |
children | a30e74dca193 |
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/TestHistory.java Wed Dec 12 14:17:12 2012 +0100 +++ b/test/org/tmatesoft/hg/test/TestHistory.java Wed Dec 12 20:52:10 2012 +0100 @@ -130,30 +130,23 @@ assertTrue("[sanity]", repo.getFileNode(fname).exists()); eh.run("hg", "log", "--debug", fname, "--cwd", repo.getLocation()); - final LinkedList<HgChangeset> cmdResult = new LinkedList<HgChangeset>(); - new HgLogCommand(repo).file(fname, false).execute(new HgChangesetTreeHandler() { - - public void treeElement(TreeElement entry) throws HgCallbackTargetException { - // check consistency - Nodeid cset = entry.changeset().getNodeid(); - errorCollector.assertEquals(entry.changesetRevision(), cset); - Pair<HgChangeset, HgChangeset> parents_a = entry.parents(); - Pair<Nodeid, Nodeid> parents_b = entry.parentRevisions(); - if (parents_b.first().isNull()) { - errorCollector.assertTrue(parents_a.first() == null); - } else { - errorCollector.assertEquals(parents_b.first(), parents_a.first().getNodeid()); - } - if (parents_b.second().isNull()) { - errorCollector.assertTrue(parents_a.second() == null); - } else { - errorCollector.assertEquals(parents_b.second(), parents_a.second().getNodeid()); - } - // - cmdResult.add(entry.changeset()); - } - }); - report("execute with HgChangesetTreeHandler", cmdResult, true); + TreeCollectHandler h = new TreeCollectHandler(false); + new HgLogCommand(repo).file(fname, false).execute(h); + // since we use TreeCollectHandler with natural order (older to newer), shall reverse console result in report() + report("execute with HgChangesetTreeHandler(follow == false)", h.getResult(), true); + } + + @Test + public void testChangesetTreeFollowRename() throws Exception { + // FIXME better test with more than 1 rename, and renames not from the last revision (somewhere from the middle of the origin change history) + final String fname = "cmdline/org/tmatesoft/hg/console/Remote.java"; + assertTrue("[sanity]", repo.getFileNode(fname).exists()); + eh.run("hg", "log", "--debug", "--follow", fname); + + TreeCollectHandler h = new TreeCollectHandler(true); + new HgLogCommand(repo).file(fname, true).execute(h); + + report("execute with HgChangesetTreeHandler(follow == true)", h.getResult(), false); } private void report(String what, List<HgChangeset> r, boolean reverseConsoleResult) { @@ -291,4 +284,45 @@ eh.run("hg", "log", "--debug", "-b", "default", "-b", "test", "--cwd", repo.getLocation()); report("log -b default -b test" , new HgLogCommand(repo).branch("default").branch("test").execute(), true); } + + //// + + private final class TreeCollectHandler implements HgChangesetTreeHandler { + private final LinkedList<HgChangeset> cmdResult = new LinkedList<HgChangeset>(); + private final boolean reverseResult; + + public TreeCollectHandler(boolean _reverseResult) { + this.reverseResult = _reverseResult; + } + + public List<HgChangeset> getResult() { + return cmdResult; + } + + public void treeElement(TreeElement entry) throws HgCallbackTargetException { + // check consistency + Nodeid cset = entry.changeset().getNodeid(); + errorCollector.assertEquals(entry.changesetRevision(), cset); + Pair<HgChangeset, HgChangeset> parents_a = entry.parents(); + Pair<Nodeid, Nodeid> parents_b = entry.parentRevisions(); + if (parents_b.first().isNull()) { + errorCollector.assertTrue(parents_a.first() == null); + } else { + errorCollector.assertEquals(parents_b.first(), parents_a.first().getNodeid()); + } + if (parents_b.second().isNull()) { + errorCollector.assertTrue(parents_a.second() == null); + } else { + errorCollector.assertEquals(parents_b.second(), parents_a.second().getNodeid()); + } + // + if (reverseResult) { + cmdResult.addFirst(entry.changeset()); + } else { + cmdResult.addLast(entry.changeset()); + } + } + + + } }