Mercurial > hg4j
diff test/org/tmatesoft/hg/test/TestHistory.java @ 528:f7fbf48b9383
Report rename when walking file history regardless of followRenames parameter, solely based on HgFileRenameHandlerMixin presence
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 17 Jan 2013 19:23:52 +0100 |
parents | 2103388d4010 |
children | 6526d8adbc0f |
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/TestHistory.java Tue Jan 15 19:46:19 2013 +0100 +++ b/test/org/tmatesoft/hg/test/TestHistory.java Thu Jan 17 19:23:52 2013 +0100 @@ -38,6 +38,7 @@ import org.tmatesoft.hg.core.HgChangesetTreeHandler; import org.tmatesoft.hg.core.HgFileRenameHandlerMixin; import org.tmatesoft.hg.core.HgFileRevision; +import org.tmatesoft.hg.core.HgIterateDirection; import org.tmatesoft.hg.core.HgLogCommand; import org.tmatesoft.hg.core.HgLogCommand.CollectHandler; import org.tmatesoft.hg.core.Nodeid; @@ -234,7 +235,9 @@ CollectWithRenameHandler h = new CollectWithRenameHandler(); new HgLogCommand(repo).file(fname2, false, true).execute(h); - errorCollector.assertEquals(0, h.rh.renames.size()); + // renames are reported regardless of followRenames parameter, but + // solely based on HgFileRenameHandlerMixin + errorCollector.assertEquals(1, h.rh.renames.size()); report("HgChangesetHandler(renames: false, ancestry:true)", h.getChanges(), fname2Follow, true, errorCollector); // // Direction @@ -252,15 +255,12 @@ final List<Record> fname2Follow = getAncestryWithoutRenamesFromCmdline(fname2); TreeCollectHandler h = new TreeCollectHandler(false); - RenameCollector rh = new RenameCollector(h); h.checkPrevInParents = true; new HgLogCommand(repo).file(fname2, false, true).execute(h); - errorCollector.assertEquals(0, rh.renames.size()); report("HgChangesetTreeHandler(renames: false, ancestry:true)", h.getResult(), fname2Follow, true, errorCollector); // Direction h = new TreeCollectHandler(false); - rh = new RenameCollector(h); h.checkPrevInChildren = true; new HgLogCommand(repo).file(fname2, false, true).order(NewToOld).execute(h); report("HgChangesetTreeHandler(renames: false, ancestry:true)", h.getResult(), fname2Follow, false, errorCollector); @@ -351,6 +351,68 @@ assertEquals(1, rh.renames.size()); assertEquals(Path.create(fname), rh.renames.get(0).second().getPath()); } + + /** + * Ensure {@link HgFileRenameHandlerMixin} is always notified, even + * if followRename is false. + * Shall check: + * both {@link HgLogCommand#execute(HgChangesetHandler)} and {@link HgLogCommand#execute(HgChangesetTreeHandler)} + * and for both iteration directions in each case + */ + @Test + public void testRenameHandlerNotifiedEvenIfNotFollowRename() throws Exception { + repo = Configuration.get().find("log-follow"); + final String fname1 = "file1_a"; + final String fname2 = "file1_b"; + final String fnameNoRename = "file2"; + assertTrue("[sanity]", repo.getFileNode(fnameNoRename).exists()); + + // first, check that file without renames doesn't report any accidentally + CollectWithRenameHandler h1 = new CollectWithRenameHandler(); + HgLogCommand cmd = new HgLogCommand(repo).file(fnameNoRename, false, false); + cmd.execute(h1); + errorCollector.assertEquals(0, h1.rh.renames.size()); + TreeCollectHandler h2 = new TreeCollectHandler(false); + RenameCollector rh = new RenameCollector(h2); + cmd.execute(h2); + errorCollector.assertEquals(0, rh.renames.size()); + + // check default iterate direction + cmd = new HgLogCommand(repo).file(fname2, false, false); + cmd.execute(h1 = new CollectWithRenameHandler()); + errorCollector.assertEquals(1, h1.rh.renames.size()); + assertRename(fname1, fname2, h1.rh.renames.get(0)); + + h2 = new TreeCollectHandler(false); + rh = new RenameCollector(h2); + cmd.execute(h2); + errorCollector.assertEquals(1, rh.renames.size()); + assertRename(fname1, fname2, rh.renames.get(0)); + + eh.run("hg", "log", "--debug", fname2, "--cwd", repo.getLocation()); + report("HgChangesetHandler+RenameHandler with followRenames = false, default iteration order", h1.getChanges(), true); + report("HgChangesetTreeHandler+RenameHandler with followRenames = false, default iteration order", h2.getResult(), true); + + // + // Now, check that iteration in opposite direction (new to old) + // still reports renames (and correct revisions, too) + cmd.order(HgIterateDirection.NewToOld); + cmd.execute(h1 = new CollectWithRenameHandler()); + errorCollector.assertEquals(1, h1.rh.renames.size()); + assertRename(fname1, fname2, h1.rh.renames.get(0)); + h2 = new TreeCollectHandler(false); + rh = new RenameCollector(h2); + cmd.execute(h2); + errorCollector.assertEquals(1, rh.renames.size()); + assertRename(fname1, fname2, rh.renames.get(0)); + report("HgChangesetHandler+RenameHandler with followRenames = false, new2old iteration order", h1.getChanges(), false); + report("HgChangesetTreeHandler+RenameHandler with followRenames = false, new2old iteration order", h2.getResult(), false); + } + + private void assertRename(String fnameFrom, String fnameTo, Pair<HgFileRevision, HgFileRevision> rename) { + errorCollector.assertEquals(fnameFrom, rename.first().getPath().toString()); + errorCollector.assertEquals(fnameTo, rename.second().getPath().toString()); + } /** * @see TestAuxUtilities#testChangelogCancelSupport() @@ -623,7 +685,7 @@ public RenameCollector(AdapterPlug ap) { ap.attachAdapter(HgFileRenameHandlerMixin.class, this); } - + public void copy(HgFileRevision from, HgFileRevision to) { copyReported = true; renames.add(new Pair<HgFileRevision, HgFileRevision>(from, to));