annotate mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MergeSupportSubreposTest.java @ 951:0cf858cb793c

Describe mercurial VCS root parameters
author Dmitry Neverov <dmitry.neverov@gmail.com>
date Thu, 09 Jun 2016 16:57:06 +0200
parents 31a1aca3305c
children 7bf4d943d5bb
rev   line source
732
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
1 /*
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
2 * Copyright 2000-2014 JetBrains s.r.o.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
3 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
4 * Licensed under the Apache License, Version 2.0 (the "License");
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
5 * you may not use this file except in compliance with the License.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
6 * You may obtain a copy of the License at
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
7 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
8 * http://www.apache.org/licenses/LICENSE-2.0
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
9 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
10 * Unless required by applicable law or agreed to in writing, software
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
11 * distributed under the License is distributed on an "AS IS" BASIS,
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
13 * See the License for the specific language governing permissions and
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
14 * limitations under the License.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
15 */
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 646
diff changeset
16
645
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
18
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
19 import jetbrains.buildServer.vcs.*;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
20 import org.testng.annotations.BeforeMethod;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
21 import org.testng.annotations.Test;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
22
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
23 import java.io.File;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
24 import java.util.List;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
25
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
26 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
27 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.ModificationDataMatcher.modificationData;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
28 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
29 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
30 import static org.hamcrest.MatcherAssert.assertThat;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
31 import static org.hamcrest.Matchers.hasItem;
646
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
32 import static org.testng.AssertJUnit.assertFalse;
645
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
33
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
34 @Test
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
35 public class MergeSupportSubreposTest extends BaseMercurialTestCase {
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
36
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
37 private File mySubrepo1;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
38 private File mySubrepo2;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
39 private MercurialVcsSupport myVcs;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
40 private MercurialMergeSupport myMergeSupport;
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
41
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
42 @BeforeMethod
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
43 @Override
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
44 public void setUp() throws Exception {
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
45 super.setUp();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
46 File parentDir = myTempFiles.createTempDir();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
47 mySubrepo1 = new File(parentDir, "subrepo1");
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
48 mySubrepo2 = new File(parentDir, "subrepo2");
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
49 mySubrepo1.mkdirs();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
50 mySubrepo2.mkdirs();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
51 copyRepository(new File("mercurial-tests/testData/merge/subrepos/subrepo1"), mySubrepo1);
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
52 copyRepository(new File("mercurial-tests/testData/merge/subrepos/subrepo2"), mySubrepo2);
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
53
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
54 ServerPluginConfig pluginConfig = new ServerPluginConfigBuilder()
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
55 .cachesDir(myTempFiles.createTempDir())
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
56 .build();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
57 MercurialSupportBuilder mercurialBuilder = mercurialSupport().withConfig(pluginConfig);
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
58 myVcs = mercurialBuilder.build();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
59 myMergeSupport = new MercurialMergeSupport(myVcs, myVcs.getMirrorManager(), pluginConfig,
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
60 mercurialBuilder.getHgRootFactory(), mercurialBuilder.getHgRepoFactory());
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
61 }
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
62
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
63
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
64 public void should_do_merge_in_subrepo_if_it_has_appropriate_branch() throws Exception {
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
65 VcsRoot root = vcsRoot().withUrl(mySubrepo1).withSubrepoChanges(true).build();
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
66 RepositoryStateData beforeMerge = myVcs.getCollectChangesPolicy().getCurrentState(root);
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
67 myMergeSupport.merge(root, "0bd1ae88632d", "default", "merge into default", new MergeOptions());
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
68 RepositoryStateData afterMerge = myVcs.getCollectChangesPolicy().getCurrentState(root);
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
69 List<ModificationData> ms = myVcs.getCollectChangesPolicy().collectChanges(root, beforeMerge, afterMerge, CheckoutRules.DEFAULT);
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
70 assertThat("Cannot find main repo merge commit", ms, hasItem(modificationData().withDescription("merge into default")
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
71 .withParentRevisions("eb211547efbe", "0bd1ae88632d")));
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
72 assertThat("Cannot find subrepo merge commit", ms, hasItem(modificationData().withDescription("merge into default")
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
73 .withParentRevisions("675fa105b184", "1532dee5d922")));
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
74 }
646
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
75
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
76
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
77 public void should_report_conflicts_from_subrepos() throws Exception {
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
78 VcsRoot root = vcsRoot().withUrl(mySubrepo1).withSubrepoChanges(true).build();
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
79 MergeResult result = myMergeSupport.merge(root, "3e43f76179ed", "default", "merge into default", new MergeOptions());
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
80 assertFalse(result.isSuccess());
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
81 assertThat("conflict from main repo is not reported", result.getConflicts(), hasItem("b/c"));
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
82 assertThat("conflict from subrepo is not reported", result.getConflicts(), hasItem("subrepo2/b/c"));
60425d39da84 Report conflicts from subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 645
diff changeset
83 }
645
4cf1ab3cd162 Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
84 }