private async getAzureDevOpsDetails()

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;
        }
    }