Search in sources :

Example 1 with CheckoutRules

use of jetbrains.buildServer.vcs.CheckoutRules in project teamcity-rest by JetBrains.

the class BuildTypeTest method testInheritance.

@Test
public void testInheritance() {
    // see also alike setup in BuildTypeRequestTest.testCreatingWithTemplate()
    ProjectEx project10 = createProject("project10", "project 10");
    MockVcsSupport vcs = vcsSupport().withName("vcs").dagBased(true).register();
    final SVcsRoot vcsRoot10 = project10.createVcsRoot("vcs", "extId10", "name10");
    final SVcsRoot vcsRoot20 = project10.createVcsRoot("vcs", "extId20", "name20");
    final SVcsRoot vcsRoot30 = project10.createVcsRoot("vcs", "extId30", "name30");
    project10.addParameter(new SimpleParameter("p", "v"));
    BuildTypeEx bt100 = project10.createBuildType("bt100", "bt 100");
    BuildTypeEx bt110 = project10.createBuildType("bt110", "bt 110");
    BuildTypeEx bt120 = project10.createBuildType("bt120", "bt 120");
    // TEMPLATE
    BuildTypeTemplate t10 = project10.createBuildTypeTemplate("t10", "bt 10");
    t10.setArtifactPaths("aaaaa");
    t10.setBuildNumberPattern("pattern");
    t10.setOption(BuildTypeOptions.BT_ALLOW_EXTERNAL_STATUS, true);
    t10.setOption(BuildTypeOptions.BT_CHECKOUT_DIR, "checkout_t");
    t10.setOption(BuildTypeOptions.BT_CHECKOUT_MODE, "ON_AGENT");
    t10.setOption(BuildTypeOptions.BT_FAIL_ON_ANY_ERROR_MESSAGE, true);
    t10.setOption(BuildTypeOptions.BT_EXECUTION_TIMEOUT, 11);
    t10.addVcsRoot(vcsRoot10);
    t10.addVcsRoot(vcsRoot20);
    t10.setCheckoutRules(vcsRoot20, new CheckoutRules("a=>b"));
    BuildRunnerDescriptorFactory runnerDescriptorFactory = myFixture.getSingletonService(BuildRunnerDescriptorFactory.class);
    t10.addBuildRunner(runnerDescriptorFactory.createBuildRunner(project10, "run10", "name10", "Ant1", map("a", "b")));
    t10.addBuildRunner(runnerDescriptorFactory.createBuildRunner(project10, "run20", "name20", "Ant2", map("a", "b")));
    BuildTriggerDescriptor trigger10 = t10.addBuildTrigger("Type", map("a", "b"));
    BuildTriggerDescriptor trigger20 = t10.addBuildTrigger("Type", map("a", "b"));
    t10.addBuildFeature(myFixture.getBuildFeatureDescriptorFactory().createBuildFeature("f10", "type", map("a", "b")));
    t10.addBuildFeature(myFixture.getBuildFeatureDescriptorFactory().createBuildFeature("f20", "type", map("a", "b")));
    t10.addBuildFeature(myFixture.getBuildFeatureDescriptorFactory().createBuildFeature("f30", "type", map("a", "b")));
    ArtifactDependencyFactory artifactDependencyFactory = myFixture.getSingletonService(ArtifactDependencyFactory.class);
    ArrayList<SArtifactDependency> artifactDeps = new ArrayList<>();
    artifactDeps.add(artifactDependencyFactory.createArtifactDependency("art10", bt100.getExternalId(), "path1", RevisionRules.LAST_PINNED_RULE));
    artifactDeps.add(artifactDependencyFactory.createArtifactDependency("art20", bt100.getExternalId(), "path2", RevisionRules.LAST_PINNED_RULE));
    artifactDeps.add(artifactDependencyFactory.createArtifactDependency("art30", bt100.getExternalId(), "path3", RevisionRules.LAST_PINNED_RULE));
    t10.setArtifactDependencies(artifactDeps);
    t10.addDependency(myFixture.getSingletonService(DependencyFactory.class).createDependency(bt100));
    t10.addDependency(myFixture.getSingletonService(DependencyFactory.class).createDependency(bt110));
    t10.addParameter(new SimpleParameter("a10", "b"));
    t10.addParameter(new SimpleParameter("a20", "b"));
    t10.addRequirement(myFixture.findSingletonService(RequirementFactory.class).createRequirement("req10", "a", null, RequirementType.EXISTS));
    t10.addRequirement(myFixture.findSingletonService(RequirementFactory.class).createRequirement("req20", "b", null, RequirementType.EXISTS));
    t10.addRequirement(myFixture.findSingletonService(RequirementFactory.class).createRequirement("req30", "c", null, RequirementType.EXISTS));
    // BUILD TYPE
    BuildTypeEx bt10 = project10.createBuildType("bt10", "bt 10");
    bt10.attachToTemplate(t10);
    // todo: test w/o override
    bt10.setArtifactPaths("bbbb");
    bt10.setOption(BuildTypeOptions.BT_ALLOW_EXTERNAL_STATUS, false);
    bt10.setOption(BuildTypeOptions.BT_CHECKOUT_DIR, "checkout_bt");
    bt10.setOption(BuildTypeOptions.BT_CHECKOUT_MODE, "ON_AGENT");
    bt10.setOption(BuildTypeOptions.BT_EXECUTION_TIMEOUT, 17);
    bt10.addVcsRoot(vcsRoot20);
    bt10.setCheckoutRules(vcsRoot20, new CheckoutRules("x=>y"));
    bt10.addVcsRoot(vcsRoot30);
    bt10.setEnabled("run20", false);
    bt10.addBuildRunner(runnerDescriptorFactory.createBuildRunner(project10, "run30", "name30", "Ant30", map("a", "b")));
    bt10.setEnabled(trigger20.getId(), false);
    BuildTriggerDescriptor trigger30 = bt10.addBuildTrigger("Type", map("a", "b"));
    bt10.setEnabled("f20", false);
    bt10.addBuildFeature(myFixture.getBuildFeatureDescriptorFactory().createBuildFeature("f30", "type_bt", map("a", "b")));
    bt10.addBuildFeature(myFixture.getBuildFeatureDescriptorFactory().createBuildFeature("f40", "type", map("a", "b")));
    ArrayList<SArtifactDependency> artifactDepsBt = new ArrayList<>();
    artifactDepsBt.add(artifactDependencyFactory.createArtifactDependency("art30", bt100.getExternalId(), "path30", RevisionRules.LAST_FINISHED_RULE));
    artifactDepsBt.add(artifactDependencyFactory.createArtifactDependency("art40", bt100.getExternalId(), "path4", RevisionRules.LAST_PINNED_RULE));
    bt10.setArtifactDependencies(artifactDepsBt);
    bt10.setEnabled("art20", false);
    bt10.addDependency(myFixture.getSingletonService(DependencyFactory.class).createDependency(bt110));
    bt10.addDependency(myFixture.getSingletonService(DependencyFactory.class).createDependency(bt120));
    bt10.addParameter(new SimpleParameter("a20", "x"));
    bt10.addParameter(new SimpleParameter("a30", "x"));
    bt10.setEnabled("req20", false);
    bt10.addRequirement(myFixture.findSingletonService(RequirementFactory.class).createRequirement("req30", "x", null, RequirementType.EQUALS));
    bt10.addRequirement(myFixture.findSingletonService(RequirementFactory.class).createRequirement("req40", "y", null, RequirementType.EXISTS));
    // NOW, TEST TIME!
    BuildType buildType = new BuildType(new BuildTypeOrTemplate(bt10), new Fields("$long"), myBeanContext);
    parameterEquals(find(buildType.getSettings().properties, "artifactRules"), "artifactRules", "bbbb", null);
    parameterEquals(find(buildType.getSettings().properties, "buildNumberPattern"), "buildNumberPattern", "pattern", true);
    parameterEquals(find(buildType.getSettings().properties, "allowExternalStatus"), "allowExternalStatus", "false", null);
    parameterEquals(find(buildType.getSettings().properties, "checkoutDirectory"), "checkoutDirectory", "checkout_bt", null);
    // parameterEquals(find(buildType.getSettings().properties, "checkoutMode"), "checkoutMode", "ON_AGENT", null); //option set to the same value in bt - API does not make difference so far
    parameterEquals(find(buildType.getSettings().properties, "shouldFailBuildOnAnyErrorMessage"), "shouldFailBuildOnAnyErrorMessage", "true", true);
    parameterEquals(find(buildType.getSettings().properties, "executionTimeoutMin"), "executionTimeoutMin", "17", null);
    // default value
    assertNull(find(buildType.getSettings().properties, "showDependenciesChanges"));
    assertEquals(3, buildType.getVcsRootEntries().vcsRootAssignments.size());
    vcsRootEntryEquals(buildType.getVcsRootEntries().vcsRootAssignments.get(0), vcsRoot10.getExternalId(), "", true);
    // bt modifications are ignored
    vcsRootEntryEquals(buildType.getVcsRootEntries().vcsRootAssignments.get(1), vcsRoot20.getExternalId(), "a=>b", true);
    vcsRootEntryEquals(buildType.getVcsRootEntries().vcsRootAssignments.get(2), vcsRoot30.getExternalId(), "", null);
    assertEquals(3, buildType.getSteps().propEntities.size());
    stepsEquals(buildType.getSteps().propEntities.get(0), "run10", "Ant1", null, true);
    stepsEquals(buildType.getSteps().propEntities.get(1), "run20", "Ant2", false, true);
    stepsEquals(buildType.getSteps().propEntities.get(2), "run30", "Ant30", null, null);
    // TeamCity issue: order of some entities depends on where the trigger is defined (build type or template)
    assertEquals(3, buildType.getTriggers().propEntities.size());
    stepsEquals(buildType.getTriggers().propEntities.get(0), trigger30.getId(), "Type", null, null);
    stepsEquals(buildType.getTriggers().propEntities.get(1), trigger10.getId(), "Type", null, true);
    stepsEquals(buildType.getTriggers().propEntities.get(2), trigger20.getId(), "Type", false, true);
    assertEquals(4, buildType.getFeatures().propEntities.size());
    stepsEquals(buildType.getFeatures().propEntities.get(0), "f30", "type_bt", null, null);
    stepsEquals(buildType.getFeatures().propEntities.get(1), "f40", "type", null, null);
    stepsEquals(buildType.getFeatures().propEntities.get(2), "f10", "type", null, true);
    stepsEquals(buildType.getFeatures().propEntities.get(3), "f20", "type", false, true);
    assertEquals(4, buildType.getArtifactDependencies().propEntities.size());
    stepsEquals(buildType.getArtifactDependencies().propEntities.get(0), "art30", "artifact_dependency", null, null);
    stepsEquals(buildType.getArtifactDependencies().propEntities.get(1), "art40", "artifact_dependency", null, null);
    stepsEquals(buildType.getArtifactDependencies().propEntities.get(2), "art10", "artifact_dependency", null, true);
    stepsEquals(buildType.getArtifactDependencies().propEntities.get(3), "art20", "artifact_dependency", false, true);
    assertEquals(3, buildType.getSnapshotDependencies().propEntities.size());
    stepsEquals(buildType.getSnapshotDependencies().propEntities.get(0), bt100.getExternalId(), "snapshot_dependency", null, true);
    stepsEquals(buildType.getSnapshotDependencies().propEntities.get(1), bt110.getExternalId(), "snapshot_dependency", null, true);
    stepsEquals(buildType.getSnapshotDependencies().propEntities.get(2), bt120.getExternalId(), "snapshot_dependency", null, null);
    assertEquals(4, buildType.getParameters().properties.size());
    parameterEquals(buildType.getParameters().properties.get(0), "a10", "b", true);
    parameterEquals(buildType.getParameters().properties.get(1), "a20", "x", null);
    parameterEquals(buildType.getParameters().properties.get(2), "a30", "x", null);
    parameterEquals(buildType.getParameters().properties.get(3), "p", "v", true);
    assertEquals(4, buildType.getAgentRequirements().propEntities.size());
    stepsEquals(buildType.getAgentRequirements().propEntities.get(0), "req30", "equals", null, null);
    stepsEquals(buildType.getAgentRequirements().propEntities.get(1), "req40", "exists", null, null);
    stepsEquals(buildType.getAgentRequirements().propEntities.get(2), "req10", "exists", null, true);
    stepsEquals(buildType.getAgentRequirements().propEntities.get(3), "req20", "exists", false, true);
}
Also used : BuildTypeOrTemplate(jetbrains.buildServer.server.rest.util.BuildTypeOrTemplate) CheckoutRules(jetbrains.buildServer.vcs.CheckoutRules) ArrayList(java.util.ArrayList) SArtifactDependency(jetbrains.buildServer.serverSide.artifacts.SArtifactDependency) ProjectEx(jetbrains.buildServer.serverSide.impl.ProjectEx) BuildTriggerDescriptor(jetbrains.buildServer.buildTriggers.BuildTriggerDescriptor) SVcsRoot(jetbrains.buildServer.vcs.SVcsRoot) MockVcsSupport(jetbrains.buildServer.serverSide.impl.MockVcsSupport) BuildType(jetbrains.buildServer.server.rest.model.buildType.BuildType) Test(org.testng.annotations.Test) ProjectRequestTest(jetbrains.buildServer.server.rest.request.ProjectRequestTest) BaseFinderTest(jetbrains.buildServer.server.rest.data.BaseFinderTest)

Example 2 with CheckoutRules

use of jetbrains.buildServer.vcs.CheckoutRules in project teamcity-rest by JetBrains.

the class BuildTypeRequest method updateVcsRootEntryCheckoutRules.

@PUT
@Path("/{btLocator}/vcs-root-entries/{vcsRootLocator}/" + VcsRootEntry.CHECKOUT_RULES)
@Consumes({ "text/plain" })
@Produces({ "text/plain" })
@ApiOperation(value = "Update checkout rules of a VCS root of the matching build configuration.", nickname = "updateBuildTypeVcsRootCheckoutRules")
public String updateVcsRootEntryCheckoutRules(@ApiParam(format = LocatorName.BUILD_TYPE) @PathParam("btLocator") String buildTypeLocator, @ApiParam(format = LocatorName.VCS_ROOT) @PathParam("vcsRootLocator") String vcsRootLocator, String newCheckoutRules) {
    final BuildTypeOrTemplate buildType = myBuildTypeFinder.getBuildTypeOrTemplate(null, buildTypeLocator, true);
    final SVcsRoot vcsRoot = myVcsRootFinder.getItem(vcsRootLocator);
    if (!buildType.get().containsVcsRoot(vcsRoot.getId())) {
        throw new NotFoundException("VCS root with id '" + vcsRoot.getExternalId() + "' is not attached to the build type.");
    }
    buildType.get().setCheckoutRules(vcsRoot, new CheckoutRules(newCheckoutRules != null ? newCheckoutRules : ""));
    buildType.persist("VCS root checkout rules changed");
    // not handling setting errors...
    return buildType.get().getCheckoutRules(vcsRoot).getAsString();
}
Also used : BuildTypeOrTemplate(jetbrains.buildServer.server.rest.util.BuildTypeOrTemplate) SVcsRoot(jetbrains.buildServer.vcs.SVcsRoot) CheckoutRules(jetbrains.buildServer.vcs.CheckoutRules) NotFoundException(jetbrains.buildServer.server.rest.errors.NotFoundException) ApiOperation(io.swagger.annotations.ApiOperation)

Example 3 with CheckoutRules

use of jetbrains.buildServer.vcs.CheckoutRules in project teamcity-git by JetBrains.

the class SubmoduleAwareTreeIterator method movedToEntry.

/**
 * Move iterator to the specific entry.
 *
 * @throws CorruptObjectException in case of submodule processing problem
 */
protected void movedToEntry() throws CorruptObjectException {
    myIsEof = eof();
    if (myIsEof) {
        return;
    }
    int wrappedMode = myWrappedIterator.getEntryRawMode();
    String entryPath = myWrappedIterator.getEntryPathString();
    myIsOnSubmodule = checkoutSubmodules() && GITLINK_MODE_BITS == wrappedMode;
    if (myIsOnSubmodule && myRules != null) {
        // if submodule dir is excluded by checkout rules we can treat it as an empty dir
        String pathFromRoot = getPathFromRoot(entryPath);
        if (myRules.map(pathFromRoot) == null) {
            // submodule dir itself is excluded, but some of its dirs can be included
            // happens with checkout rules like +:submodule/dir1
            boolean rulesInsideSubmodule = false;
            CheckoutRules submoduleAsRule = new CheckoutRules("+:" + pathFromRoot);
            for (IncludeRule rule : myRules.getRootIncludeRules()) {
                if (submoduleAsRule.map(rule.getFrom()) != null) {
                    rulesInsideSubmodule = true;
                    break;
                }
            }
            if (!rulesInsideSubmodule) {
                myIsOnSubmodule = false;
            }
        }
    }
    mode = myIsOnSubmodule ? TREE_MODE_BITS : wrappedMode;
    if (myIsOnSubmodule) {
        try {
            mySubmoduleCommit = getSubmoduleCommit(entryPath, myWrappedIterator.getEntryObjectId());
        } catch (Exception e) {
            if (mySubmodulesPolicy.isIgnoreSubmodulesErrors()) {
                if (myLogSubmoduleErrors)
                    LOG.warn("Ignore submodule error for SHA " + ObjectId.toString(myWrappedIterator.getEntryObjectId()) + ": \"" + e.getMessage() + "\". It seems to be fixed in one of the later commits.");
                mySubmoduleCommit = null;
                myIsOnSubmodule = false;
                mySubmoduleError = true;
                mode = wrappedMode;
            } else {
                if (e instanceof CorruptObjectException) {
                    throw (CorruptObjectException) e;
                } else {
                    CorruptObjectException ex = new CorruptObjectException(myWrappedIterator.getEntryObjectId(), e.getMessage());
                    ex.initCause(e);
                    throw ex;
                }
            }
        }
        if (myIdBuffer == null) {
            myIdBuffer = new byte[Constants.OBJECT_ID_LENGTH];
        }
        if (mySubmoduleCommit != null) {
            mySubmoduleCommit.getTree().getId().copyRawTo(myIdBuffer, 0);
        }
    } else {
        mySubmoduleCommit = null;
    }
    // copy name
    final int nameLength = myWrappedIterator.getNameLength();
    final int pathLength = nameLength + pathOffset;
    ensurePathCapacity(pathLength, pathOffset);
    myWrappedIterator.getName(path, pathOffset);
    pathLen = pathLength;
}
Also used : CorruptObjectException(org.eclipse.jgit.errors.CorruptObjectException) CheckoutRules(jetbrains.buildServer.vcs.CheckoutRules) IncludeRule(jetbrains.buildServer.vcs.IncludeRule) CorruptObjectException(org.eclipse.jgit.errors.CorruptObjectException) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) TransportException(org.eclipse.jgit.errors.TransportException) VcsAuthenticationException(jetbrains.buildServer.buildTriggers.vcs.git.VcsAuthenticationException) VcsException(jetbrains.buildServer.vcs.VcsException) SubmoduleFetchException(jetbrains.buildServer.buildTriggers.vcs.git.submodules.SubmoduleFetchException)

Example 4 with CheckoutRules

use of jetbrains.buildServer.vcs.CheckoutRules in project teamcity-git by JetBrains.

the class AgentSslCheckoutTest method fetchGitHub.

private void fetchGitHub(final AgentRunningBuild build) throws VcsException {
    String versionFirst = "1d45e81f92970f025a8699915b32496a0b6885bd";
    CheckoutRules rules = new CheckoutRules("");
    myVcsSupport.updateSources(myRoot, rules, versionFirst, myCheckoutDir, build, false);
    then(myCheckoutDir.list()).contains("README.md");
    checkConfig(false, build);
    String versionNext = "ec6baf656c6f3a4f090ed245b423b893e0226264";
    myVcsSupport.updateSources(myRoot, rules, versionNext, myCheckoutDir, build, false);
    then(myCheckoutDir.list()).contains("README.md");
    checkConfig(false, build);
}
Also used : CheckoutRules(jetbrains.buildServer.vcs.CheckoutRules)

Example 5 with CheckoutRules

use of jetbrains.buildServer.vcs.CheckoutRules in project teamcity-git by JetBrains.

the class AutoCheckoutTest method git_version_does_not_support_sparse_checkout.

public void git_version_does_not_support_sparse_checkout() throws IOException, VcsException {
    GitVersion gitVersion = GIT_WITH_SPARSE_CHECKOUT.previousVersion();
    myVcsSupport = vcsSupportWithFakeGitOfVersion(gitVersion);
    VcsRoot vcsRoot = vcsRootWithAgentGitPath(getGitPath());
    AgentRunningBuild build = runningBuild().sharedConfigParams(PluginConfigImpl.USE_SPARSE_CHECKOUT, "true").addRootEntry(vcsRoot, "-:dir/q.txt").build();
    AgentCheckoutAbility canCheckout = myVcsSupport.canCheckout(vcsRoot, new CheckoutRules("-:dir/q.txt"), build);
    then(canCheckout.getCanNotCheckoutReason().getType()).isEqualTo(AgentCanNotCheckoutReason.NOT_SUPPORTED_CHECKOUT_RULES);
    then(canCheckout.getCanNotCheckoutReason().getDetails()).contains("Cannot perform sparse checkout using git " + gitVersion);
}
Also used : AgentRunningBuild(jetbrains.buildServer.agent.AgentRunningBuild) GitVersion(jetbrains.buildServer.buildTriggers.vcs.git.GitVersion) AgentCheckoutAbility(jetbrains.buildServer.agent.vcs.AgentCheckoutAbility) CheckoutRules(jetbrains.buildServer.vcs.CheckoutRules) VcsRoot(jetbrains.buildServer.vcs.VcsRoot)

Aggregations

CheckoutRules (jetbrains.buildServer.vcs.CheckoutRules)71 File (java.io.File)29 GitTestUtil.dataFile (jetbrains.buildServer.buildTriggers.vcs.git.tests.GitTestUtil.dataFile)29 VcsRoot (jetbrains.buildServer.vcs.VcsRoot)25 Test (org.testng.annotations.Test)23 TestFor (jetbrains.buildServer.util.TestFor)21 AgentRunningBuild (jetbrains.buildServer.agent.AgentRunningBuild)13 GitVcsSupport (jetbrains.buildServer.buildTriggers.vcs.git.GitVcsSupport)10 AgentCheckoutAbility (jetbrains.buildServer.agent.vcs.AgentCheckoutAbility)7 VcsException (jetbrains.buildServer.vcs.VcsException)6 VcsRootImpl (jetbrains.buildServer.vcs.impl.VcsRootImpl)5 FileReader (java.io.FileReader)4 Method (java.lang.reflect.Method)4 FetchCommand (jetbrains.buildServer.buildTriggers.vcs.git.command.FetchCommand)4 SVcsRoot (jetbrains.buildServer.vcs.SVcsRoot)4 BuildTypeOrTemplate (jetbrains.buildServer.server.rest.util.BuildTypeOrTemplate)3 AfterMethod (org.testng.annotations.AfterMethod)3 BeforeMethod (org.testng.annotations.BeforeMethod)3 ArrayList (java.util.ArrayList)2 BuildTriggerDescriptor (jetbrains.buildServer.buildTriggers.BuildTriggerDescriptor)2