in src/configure/configure.ts [305:370]
private async getAzureDevOpsDetails(): Promise<void> {
try {
this.organizationsClient = new OrganizationsClient(this.inputs.azureSession.credentials2);
if (this.inputs.sourceRepository.repositoryProvider === RepositoryProvider.AzureRepos) {
const repoDetails = AzureDevOpsHelper.getRepositoryDetailsFromRemoteUrl(this.inputs.sourceRepository.remoteUrl);
this.inputs.organizationName = repoDetails.organizationName;
const azureDevOpsClient = await this.getAzureDevOpsClient();
const gitApi = await azureDevOpsClient.getGitApi();
const repository = await gitApi.getRepository(this.inputs.sourceRepository.repositoryName, repoDetails.projectName);
this.inputs.sourceRepository.repositoryId = repository.id;
this.inputs.project = {
id: repository.project.id,
name: repository.project.name
};
} else {
this.inputs.isNewOrganization = false;
let devOpsOrganizations = await this.organizationsClient.listOrganizations();
if (devOpsOrganizations && devOpsOrganizations.length > 0) {
let selectedOrganization = await this.controlProvider.showQuickPick(
constants.SelectOrganization,
devOpsOrganizations.map(organization => { return { label: organization.accountName }; }),
{ placeHolder: Messages.selectOrganization },
TelemetryKeys.OrganizationListCount);
this.inputs.organizationName = selectedOrganization.label;
const azureDevOpsClient = await this.getAzureDevOpsClient();
const coreApi = await azureDevOpsClient.getCoreApi();
const projects = await coreApi.getProjects();
// FIXME: It _is_ possible for an organization to have no projects.
// We need to guard against this and create a project for them.
const selectedProject = await this.controlProvider.showQuickPick(
constants.SelectProject,
projects.map(project => { return { label: project.name, data: project }; }),
{ placeHolder: Messages.selectProject },
TelemetryKeys.ProjectListCount);
this.inputs.project = selectedProject.data;
} else {
telemetryHelper.setTelemetry(TelemetryKeys.NewOrganization, 'true');
this.inputs.isNewOrganization = true;
let userName = this.inputs.azureSession.userId.substring(0, this.inputs.azureSession.userId.indexOf("@"));
let organizationName = AzureDevOpsHelper.generateDevOpsOrganizationName(userName, this.inputs.sourceRepository.repositoryName);
let validationErrorMessage = await this.organizationsClient.validateOrganizationName(organizationName);
if (validationErrorMessage) {
this.inputs.organizationName = await this.controlProvider.showInputBox(
constants.EnterOrganizationName,
{
placeHolder: Messages.enterAzureDevOpsOrganizationName,
validateInput: (organizationName) => this.organizationsClient.validateOrganizationName(organizationName)
});
}
else {
this.inputs.organizationName = organizationName;
}
}
}
}
catch (error) {
telemetryHelper.logError(Layer, TracePoints.GetAzureDevOpsDetailsFailed, error);
throw error;
}
}