Mercurial > hg > mercurial
changeset 674:61da07eceaa1
add more tests for fetchModificationInfo, simplified code
author | eugene.petrenko@gmail.com |
---|---|
date | Fri, 15 Nov 2013 13:28:45 +0100 |
parents | 2d566ca0fa65 |
children | 1d417eb6ea28 |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilder.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilderTest.java |
diffstat | 2 files changed, 69 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilder.java Mon Nov 11 17:39:56 2013 +0100 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilder.java Fri Nov 15 13:28:45 2013 +0100 @@ -4,12 +4,7 @@ import jetbrains.buildServer.vcs.*; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static java.util.Collections.emptyList; +import java.util.*; public class MercurialModificationInfoBuilder implements ModificationInfoBuilder, MercurialServerExtension { @@ -35,25 +30,21 @@ @NotNull CheckoutRules checkoutRules) throws VcsException { HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); myVcs.syncRepository(hgRoot); - Set<String> prevRevisions = getPrevRevisions(hgRoot, state); - if (prevRevisions.isEmpty()) - return emptyList(); - OperationContext ctx = new OperationContext(myVcs, myRepoFactory, myHgPathProvider, prevRevisions, state); - List<ModificationData> changes = new ArrayList<ModificationData>(); - for (String revision : state.getBranchRevisions().values()) { - changes.addAll(myVcs.getCollectChangesPolicy().collectChanges(ctx, root, prevRevisions, revision, checkoutRules)); + + final List<ModificationData> changes = new ArrayList<ModificationData>(); + for (Map.Entry<String, String> e : state.getBranchRevisions().entrySet()) { + final String commitId = e.getValue(); + final RepositoryStateData oneStateData = RepositoryStateData.createVersionState(e.getKey(), commitId); + + final List<String> parents = myVcs.createRepo(hgRoot).parents().ofRevision(commitId).call(); + if (parents.isEmpty()) continue; + + final OperationContext ctx = new OperationContext(myVcs, myRepoFactory, myHgPathProvider, parents, oneStateData); + changes.addAll(myVcs.getCollectChangesPolicy().collectChanges(ctx, root, parents, commitId, checkoutRules)); } + return changes; } - @NotNull - private Set<String> getPrevRevisions(@NotNull HgVcsRoot root, @NotNull RepositoryStateData state) throws VcsException { - Set<String> prevRevisions = new HashSet<String>(); - HgRepo repo = myVcs.createRepo(root); - for (String revision : state.getBranchRevisions().values()) { - prevRevisions.addAll(repo.parents().ofRevision(revision).call()); - } - return prevRevisions; - } }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilderTest.java Mon Nov 11 17:39:56 2013 +0100 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilderTest.java Fri Nov 15 13:28:45 2013 +0100 @@ -4,19 +4,18 @@ import jetbrains.buildServer.vcs.ModificationData; import jetbrains.buildServer.vcs.RepositoryStateData; import jetbrains.buildServer.vcs.VcsRoot; +import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; +import java.util.Arrays; import java.util.List; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport; -import static jetbrains.buildServer.buildTriggers.vcs.mercurial.ModificationDataMatcher.modificationData; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.ServerPluginConfigBuilder.serverPluginConfig; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot; import static jetbrains.buildServer.util.Util.map; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; import static org.testng.AssertJUnit.assertEquals; @RequiredHgVersion(min = "1.7.0") @@ -47,8 +46,60 @@ RepositoryStateData state = RepositoryStateData.createVersionState("default", map("default", "505c5b9d01e6", "personal-branch", "9ec402c74298")); List<ModificationData> changes = myModInfoBuilder.fetchModificationInfo(root, state, CheckoutRules.DEFAULT); - assertThat(changes, hasItem(modificationData().withVersion("505c5b9d01e6"))); - assertThat(changes, hasItem(modificationData().withVersion("9ec402c74298"))); + + for (ModificationData change : changes) { + if (change.getVersion().equals("505c5b9d01e6")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("78e67807f916")); + } else if (change.getVersion().equals("9ec402c74298")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("96b78d73081d")); + } else { + Assert.fail("Unexpected revision: " + change.getVersion()); + } + } + assertEquals(2, changes.size()); } + + + public void should_return_commits_for_every_revision_in_state_parent_child(HgVersion _) throws Exception { + VcsRoot root = vcsRoot().withUrl(myRemoteRepository.getAbsolutePath()).build(); + RepositoryStateData state = RepositoryStateData.createVersionState("default", + map("default", "505c5b9d01e6", "personal-branch", "9ec402c74298", "x", "96b78d73081d")); + List<ModificationData> changes = myModInfoBuilder.fetchModificationInfo(root, state, CheckoutRules.DEFAULT); + + for (ModificationData change : changes) { + if (change.getVersion().equals("505c5b9d01e6")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("78e67807f916")); + } else if (change.getVersion().equals("9ec402c74298")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("96b78d73081d")); + } else if (change.getVersion().equals("96b78d73081d")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("dec47d2d49bf")); + } else { + Assert.fail("Unexpected revision: " + change.getVersion()); + } + } + + assertEquals(3, changes.size()); + } + + public void should_return_commits_for_every_revision_in_state_parent_gap_child(HgVersion _) throws Exception { + VcsRoot root = vcsRoot().withUrl(myRemoteRepository.getAbsolutePath()).build(); + RepositoryStateData state = RepositoryStateData.createVersionState("default", + map("default", "505c5b9d01e6", "personal-branch", "9ec402c74298", "x", "dec47d2d49bf")); + List<ModificationData> changes = myModInfoBuilder.fetchModificationInfo(root, state, CheckoutRules.DEFAULT); + + for (ModificationData change : changes) { + if (change.getVersion().equals("505c5b9d01e6")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("78e67807f916")); + } else if (change.getVersion().equals("9ec402c74298")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("96b78d73081d")); + } else if (change.getVersion().equals("dec47d2d49bf")) { + Assert.assertEquals(change.getParentRevisions(), Arrays.asList("1e620196c4b6")); + } else { + Assert.fail("Unexpected revision: " + change.getVersion()); + } + } + + assertEquals(3, changes.size()); + } }