use of jetbrains.buildServer.vcs.SVcsRoot in project teamcity-rest by JetBrains.
the class VcsRootRequest method putParameter.
@PUT
@Path("/{vcsRootLocator}/properties/{name}")
@Consumes("text/plain")
@Produces("text/plain")
@ApiOperation(value = "Update a property of the matching VCS root.", nickname = "setVcsRootProperty")
public String putParameter(@ApiParam(format = LocatorName.VCS_ROOT) @PathParam("vcsRootLocator") String vcsRootLocator, @PathParam("name") String parameterName, String newValue) {
final SVcsRoot vcsRoot = myVcsRootFinder.getItem(vcsRootLocator);
BuildTypeUtil.changeParameter(parameterName, newValue, VcsRoot.getEntityWithParameters(vcsRoot), myServiceLocator);
vcsRoot.schedulePersisting("New property with name " + parameterName + " added to VCS root");
return BuildTypeUtil.getParameter(parameterName, VcsRoot.getEntityWithParameters(vcsRoot), false, true, myServiceLocator);
}
use of jetbrains.buildServer.vcs.SVcsRoot in project teamcity-rest by JetBrains.
the class BuildTypeTest method testBranches.
@Test
public void testBranches() throws ExecutionException, InterruptedException {
final BuildTypeEx bt = getRootProject().createProject("Project1", "Project test 1").createBuildType("testBT", "My test build type");
final BuildTypeRequest buildTypeRequest = new BuildTypeRequest();
buildTypeRequest.setInTests(myBuildTypeFinder, myBranchFinder, myBeanContext);
Branches branches = buildTypeRequest.serveBranches("id:testBT", null, null);
ProjectRequestTest.assertBranchesEquals(branches.branches, "<default>", true, null);
branches = buildTypeRequest.serveBranches("id:testBT", null, Fields.ALL_NESTED.getFieldsSpec());
ProjectRequestTest.assertBranchesEquals(branches.branches, "<default>", true, false);
MockVcsSupport vcs = vcsSupport().withName("vcs").dagBased(true).register();
BuildFinderTestBase.MockCollectRepositoryChangesPolicy collectChangesPolicy = new BuildFinderTestBase.MockCollectRepositoryChangesPolicy();
vcs.setCollectChangesPolicy(collectChangesPolicy);
final SVcsRoot vcsRoot = bt.getProject().createVcsRoot("vcs", "extId", "name");
bt.addVcsRoot(vcsRoot);
final VcsRootInstance vcsRootInstance = bt.getVcsRootInstances().get(0);
collectChangesPolicy.setCurrentState(vcsRootInstance, createVersionState("master", map("master", "1", "branch1", "2", "branch2", "3")));
setBranchSpec(vcsRootInstance, "+:*");
branches = buildTypeRequest.serveBranches("id:testBT", null, null);
// why default before checking for changes???
ProjectRequestTest.assertBranchesEquals(branches.branches, "<default>", true, null);
myFixture.getVcsModificationChecker().checkForModifications(bt.getVcsRootInstances(), OperationRequestor.UNKNOWN);
branches = buildTypeRequest.serveBranches("id:testBT", null, null);
ProjectRequestTest.assertBranchesEquals(branches.branches, "master", true, null);
branches = buildTypeRequest.serveBranches("id:testBT", "policy:ALL_BRANCHES", null);
ProjectRequestTest.assertBranchesEquals(branches.branches, "master", true, null, "branch1", null, null, "branch2", null, null);
assertNull(branches.branches.get(0).getInternalName());
branches = buildTypeRequest.serveBranches("id:testBT", "policy:ALL_BRANCHES", Fields.ALL_NESTED.getFieldsSpec());
assertEquals("<default>", branches.branches.get(0).getInternalName());
assertEquals("branch1", branches.branches.get(1).getInternalName());
assertEquals("branch2", branches.branches.get(2).getInternalName());
branches = buildTypeRequest.serveBranches("id:testBT", "policy:all_branches", null);
ProjectRequestTest.assertBranchesEquals(branches.branches, "master", true, null, "branch1", null, null, "branch2", null, null);
branches = buildTypeRequest.serveBranches("id:testBT", "default:true", null);
ProjectRequestTest.assertBranchesEquals(branches.branches, "master", true, null);
bt.addVcsRoot(bt.getProject().createVcsRoot("vcs", "extId2", "name2"));
final VcsRootInstance vcsRootInstance2 = bt.getVcsRootInstances().get(1);
collectChangesPolicy.setCurrentState(vcsRootInstance2, createVersionState("master2", map("master2", "1", "branch1", "2", "branch2", "3")));
setBranchSpec(vcsRootInstance2, "+:*");
myFixture.getVcsModificationChecker().checkForModifications(bt.getVcsRootInstances(), OperationRequestor.UNKNOWN);
branches = buildTypeRequest.serveBranches("id:testBT", "policy:ALL_BRANCHES", Fields.ALL_NESTED.getFieldsSpec());
ProjectRequestTest.assertBranchesEquals(branches.branches, "<default>", true, false, "branch1", false, false, "branch2", false, false);
assertEquals("<default>", branches.branches.get(0).getInternalName());
checkException(LocatorProcessException.class, new Runnable() {
public void run() {
buildTypeRequest.serveBranches("id:testBT", "changesFromDependencies:any", null);
}
}, "searching with wrong changesFromDependencies");
checkException(BadRequestException.class, new Runnable() {
public void run() {
buildTypeRequest.serveBranches("id:testBT", "policy:INVALID_POLICY", null);
}
}, "searching with wrong changesFromDependencies");
// can also add test for branches from builds
// can also add test for "changesFromDependencies:true" locator and several defaults in different branches
}
use of jetbrains.buildServer.vcs.SVcsRoot 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);
}
use of jetbrains.buildServer.vcs.SVcsRoot in project teamcity-rest by JetBrains.
the class BuildTypeRequestTest method testUpdatingVcsRoots.
@Test
public void testUpdatingVcsRoots() {
BuildTypeImpl buildType1 = registerBuildType("buildType1", "projectName");
buildType1.addVcsRoot(createVcsRoot("name1", null));
buildType1.addVcsRoot(createVcsRoot("name2", null));
buildType1.addVcsRoot(createVcsRoot("name3", null));
String newRootId = createVcsRoot("name4", null).getExternalId();
final String btLocator = "id:" + buildType1.getExternalId();
assertEquals(3, myBuildTypeRequest.getVcsRootEntries(btLocator, "$long,vcs-root-entry($long)").vcsRootAssignments.size());
{
VcsRootEntry submitted = new VcsRootEntry();
submitted.vcsRoot = new VcsRoot();
submitted.vcsRoot.id = newRootId;
myBuildTypeRequest.addVcsRootEntry(btLocator, submitted, "$long");
assertEquals(4, myBuildTypeRequest.getVcsRootEntries(btLocator, "$long,vcs-root-entry($long)").vcsRootAssignments.size());
myBuildTypeRequest.deleteVcsRootEntry(btLocator, newRootId);
assertEquals(3, myBuildTypeRequest.getVcsRootEntries(btLocator, "$long,vcs-root-entry($long)").vcsRootAssignments.size());
}
buildType1.getSettings().addListener(new BuildTypeSettingsAdapter() {
private int myTriggerOnCall = 1;
@Override
public void afterAddVcsRoot(@NotNull final SVcsRoot vcsRoot) {
if (--myTriggerOnCall == 0) {
throw new RuntimeException("I need error here ");
}
}
});
{
VcsRootEntries submitted = new VcsRootEntries();
VcsRootEntry submitted1 = new VcsRootEntry();
submitted1.vcsRoot = new VcsRoot();
submitted1.vcsRoot.id = newRootId;
submitted.vcsRootAssignments = Arrays.asList(submitted1);
checkException(RuntimeException.class, new Runnable() {
public void run() {
myBuildTypeRequest.replaceVcsRootEntries(btLocator, submitted, "$long");
}
}, null);
assertEquals(3, myBuildTypeRequest.getVcsRootEntries(btLocator, "$long,vcs-root-entry($long)").vcsRootAssignments.size());
assertEquals(3, buildType1.getVcsRootEntries().size());
}
buildType1.getSettings().addListener(new BuildTypeSettingsAdapter() {
private int myTriggerOnCall = 1;
@Override
public void afterAddVcsRoot(@NotNull final SVcsRoot vcsRoot) {
if (--myTriggerOnCall == 0) {
throw new RuntimeException("I need error here ");
}
}
});
{
VcsRootEntry submitted = new VcsRootEntry();
submitted.vcsRoot = new VcsRoot();
submitted.vcsRoot.id = newRootId;
checkException(RuntimeException.class, new Runnable() {
public void run() {
myBuildTypeRequest.addVcsRootEntry(btLocator, submitted, "$long");
}
}, null);
assertEquals(3, myBuildTypeRequest.getVcsRootEntries(btLocator, "$long,vcs-root-entry($long)").vcsRootAssignments.size());
assertEquals(3, buildType1.getVcsRootEntries().size());
}
{
myBuildTypeRequest.replaceVcsRootEntries(btLocator, new VcsRootEntries(), "$long");
assertEquals(0, buildType1.getVcsRootEntries().size());
}
}
use of jetbrains.buildServer.vcs.SVcsRoot 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();
}
Aggregations