diff --git a/pom.xml b/pom.xml index 17bea18745..1a748c519e 100644 --- a/pom.xml +++ b/pom.xml @@ -662,7 +662,7 @@ che-core-api-auth-bitbucket ${che.version} - + org.eclipse.che.core che-core-api-auth-github ${che.version} @@ -1409,7 +1409,6 @@ ${junit.junit.version} test - org.apache.maven.plugin-testing maven-plugin-testing-harness diff --git a/wsmaster/che-core-api-factory-azure-devops/pom.xml b/wsmaster/che-core-api-factory-azure-devops/pom.xml index 23630f79d3..32965f17b0 100644 --- a/wsmaster/che-core-api-factory-azure-devops/pom.xml +++ b/wsmaster/che-core-api-factory-azure-devops/pom.xml @@ -78,6 +78,10 @@ org.eclipse.che.core che-core-api-workspace + + org.eclipse.che.core + che-core-api-workspace-shared + org.eclipse.che.core che-core-commons-lang diff --git a/wsmaster/che-core-api-factory-azure-devops/src/main/java/org/eclipse/che/api/factory/server/azure/devops/AzureDevOpsFactoryParametersResolver.java b/wsmaster/che-core-api-factory-azure-devops/src/main/java/org/eclipse/che/api/factory/server/azure/devops/AzureDevOpsFactoryParametersResolver.java index 05b1b6de2b..2e42153b6f 100644 --- a/wsmaster/che-core-api-factory-azure-devops/src/main/java/org/eclipse/che/api/factory/server/azure/devops/AzureDevOpsFactoryParametersResolver.java +++ b/wsmaster/che-core-api-factory-azure-devops/src/main/java/org/eclipse/che/api/factory/server/azure/devops/AzureDevOpsFactoryParametersResolver.java @@ -16,7 +16,9 @@ import static org.eclipse.che.api.factory.shared.Constants.URL_PARAMETER_NAME; import static org.eclipse.che.dto.server.DtoFactory.newDto; import static org.eclipse.che.security.oauth1.OAuthAuthenticationService.ERROR_QUERY_NAME; +import com.google.common.base.Strings; import jakarta.validation.constraints.NotNull; +import java.util.HashMap; import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; @@ -32,6 +34,10 @@ import org.eclipse.che.api.factory.shared.dto.FactoryMetaDto; import org.eclipse.che.api.factory.shared.dto.FactoryVisitor; import org.eclipse.che.api.factory.shared.dto.ScmInfoDto; import org.eclipse.che.api.workspace.server.devfile.URLFetcher; +import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto; +import org.eclipse.che.api.workspace.shared.dto.SourceStorageDto; +import org.eclipse.che.api.workspace.shared.dto.devfile.ProjectDto; +import org.eclipse.che.api.workspace.shared.dto.devfile.SourceDto; /** * Provides Factory Parameters resolver for Azure DevOps repositories. @@ -113,8 +119,40 @@ public class AzureDevOpsFactoryParametersResolver extends DefaultFactoryParamete @Override public FactoryDto visit(FactoryDto factory) { - // Should never happen - throw new UnsupportedOperationException(); + if (factory.getWorkspace() != null) { + return projectConfigDtoMerger.merge( + factory, + () -> { + // Compute project configuration + return newDto(ProjectConfigDto.class) + .withSource(buildWorkspaceConfigSource(azureDevOpsUrl)) + .withName(azureDevOpsUrl.getRepository()) + .withPath("/".concat(azureDevOpsUrl.getRepository())); + }); + } else if (factory.getDevfile() == null) { + factory.setDevfile(urlFactoryBuilder.buildDefaultDevfile(azureDevOpsUrl.getRepository())); + } + + updateProjects( + factory.getDevfile(), + () -> + newDto(ProjectDto.class) + .withSource( + newDto(SourceDto.class) + .withLocation(azureDevOpsUrl.getRepositoryLocation()) + .withType("git") + .withBranch(azureDevOpsUrl.getBranch()) + .withTag(azureDevOpsUrl.getTag())) + .withName(azureDevOpsUrl.getRepository()), + project -> { + final String location = project.getSource().getLocation(); + if (location.equals(azureDevOpsUrl.getRepositoryLocation())) { + project.getSource().setBranch(azureDevOpsUrl.getBranch()); + project.getSource().setTag(azureDevOpsUrl.getTag()); + } + }); + + return factory; } } @@ -122,4 +160,19 @@ public class AzureDevOpsFactoryParametersResolver extends DefaultFactoryParamete public RemoteFactoryUrl parseFactoryUrl(String factoryUrl) throws ApiException { return azureDevOpsURLParser.parse(factoryUrl); } + + private SourceStorageDto buildWorkspaceConfigSource(AzureDevOpsUrl azureDevOpsUrl) { + Map parameters = new HashMap<>(1); + if (!Strings.isNullOrEmpty(azureDevOpsUrl.getBranch())) { + parameters.put("branch", azureDevOpsUrl.getBranch()); + } + if (!Strings.isNullOrEmpty(azureDevOpsUrl.getTag())) { + parameters.put("tag", azureDevOpsUrl.getTag()); + } + + return newDto(SourceStorageDto.class) + .withLocation(azureDevOpsUrl.getRepositoryLocation()) + .withType("git") + .withParameters(parameters); + } }