public static getRepositoryDetailsFromRemoteUrl()

in src/configure/helper/devOps/azureDevOpsHelper.ts [40:88]


    public static getRepositoryDetailsFromRemoteUrl(remoteUrl: string): { organizationName: string, projectName: string, repositoryName: string } {
        if (remoteUrl.indexOf(AzureDevOpsHelper.AzureReposUrl) >= 0) {
            const part = remoteUrl.substring(remoteUrl.indexOf(AzureDevOpsHelper.AzureReposUrl) + AzureDevOpsHelper.AzureReposUrl.length);
            const parts = part.split('/');
            if (parts.length !== 4) {
                throw new Error(Messages.failedToDetermineAzureRepoDetails);
            }

            return {
                organizationName: parts[0].trim(),
                projectName: parts[1].trim(),
                repositoryName: parts[3].trim()
            };
        } else if (remoteUrl.indexOf(AzureDevOpsHelper.VSOUrl) >= 0) {
            const part = remoteUrl.substring(remoteUrl.indexOf(AzureDevOpsHelper.VSOUrl) + AzureDevOpsHelper.VSOUrl.length);
            const organizationName = remoteUrl.substring(remoteUrl.indexOf('https://') + 'https://'.length, remoteUrl.indexOf('.visualstudio.com'));
            const parts = part.split('/');

            if (parts.length === 4 && parts[0].toLowerCase() === 'defaultcollection') {
                // Handle scenario where part is 'DefaultCollection/<project>/_git/<repository>'
                parts.shift();
            }

            if (parts.length !== 3) {
                throw new Error(Messages.failedToDetermineAzureRepoDetails);
            }

            return {
                organizationName: organizationName,
                projectName: parts[0].trim(),
                repositoryName: parts[2].trim()
            };
        } else if (remoteUrl.indexOf(AzureDevOpsHelper.SSHAzureReposUrl) >= 0 || remoteUrl.indexOf(AzureDevOpsHelper.SSHVsoReposUrl) >= 0) {
            const urlFormat = remoteUrl.indexOf(AzureDevOpsHelper.SSHAzureReposUrl) >= 0 ? AzureDevOpsHelper.SSHAzureReposUrl : AzureDevOpsHelper.SSHVsoReposUrl;
            const part = remoteUrl.substring(remoteUrl.indexOf(urlFormat) + urlFormat.length);
            const parts = part.split('/');
            if (parts.length !== 3) {
                throw new Error(Messages.failedToDetermineAzureRepoDetails);
            }

            return {
                organizationName: parts[0].trim(),
                projectName: parts[1].trim(),
                repositoryName: parts[2].trim()
            };
        } else {
            throw new Error(Messages.notAzureRepoUrl);
        }
    }