Example #1
0
        // Translates
        //   ssh://{account}@{ssh-subdomain}.{domain}:{port}/{repositoryPath}/_ssh/{"_full"|"_optimized"}/{repositoryName}
        // to
        //   https://{http-domain}/{account}/{repositoryPath}/_git/{repositoryName}
        //
        // Dommain mapping:
        //   ssh://vs-ssh.*.com -> https://{account}.*.com
        //   ssh://ssh.*.com -> https://*.com/{account}
        protected override string TranslateSshUrl(Uri uri)
        {
            var host = uri.GetHost();
            var isVisualStudioHost = AzureDevOpsUrlParser.IsVisualStudioHostedServer(host);
            var prefix             = isVisualStudioHost ? "vs-ssh." : "ssh.";

            if (!host.StartsWith(prefix))
            {
                return(null);
            }

            if (!AzureDevOpsUrlParser.TryParseHostedSsh(uri, out var account, out var repositoryPath, out var repositoryName))
            {
                return(null);
            }

            var result = host.Substring(prefix.Length);

            if (isVisualStudioHost)
            {
                result = account + "." + result;
            }
            else
            {
                result = result + "/" + account;
            }

            return
                (UriUtilities.Combine(
                     UriUtilities.Combine("https://" + result, repositoryPath), "_git/" + repositoryName));
        }
Example #2
0
        protected override string?BuildSourceLinkUrl(Uri contentUri, Uri gitUri, string relativeUrl, string revisionId, ITaskItem?hostItem)
        {
            var path = GetVersion(hostItem) >= s_versionWithNewUrlFormat
                ? "-/raw/" + revisionId + "/*"
                : "raw/" + revisionId + "/*";

            return(UriUtilities.Combine(UriUtilities.Combine(contentUri.ToString(), relativeUrl), path));
        }
        // Translates
        //   ssh://{account}@{domain}:{port}/{repositoryPath}/_ssh/{"_full"|"_optimized"}/{repositoryName}
        // to
        //   https://{domain}/{repositoryPath}/_git/{repositoryName}
        protected override string?TranslateSshUrl(Uri uri)
        {
            if (!AzureDevOpsUrlParser.TryParseOnPremSsh(uri, out var repositoryPath, out var repositoryName))
            {
                return(null);
            }

            return
                (UriUtilities.Combine(
                     UriUtilities.Combine("https://" + uri.Host, repositoryPath), "_git/" + repositoryName));
        }
        private static string BuildSourceLinkUrlForCloudEdition(Uri contentUri, string relativeUrl, string revisionId)
        {
            // change bitbucket.org to api.bitbucket.org
            UriBuilder apiUriBuilder = new UriBuilder(contentUri);

            apiUriBuilder.Host = $"api.{apiUriBuilder.Host}";

            string relativeApiUrl = UriUtilities.Combine(UriUtilities.Combine("2.0/repositories", relativeUrl), $"src/{revisionId}/*");

            return(UriUtilities.Combine(apiUriBuilder.Uri.ToString(), relativeApiUrl));
        }
Example #5
0
        protected override string BuildSourceLinkUrl(Uri contentUri, Uri gitUri, string relativeUrl, string revisionId, ITaskItem hostItem)
        {
            if (!TeamFoundationUrlParser.TryParseHostedHttp(gitUri.Host, relativeUrl, out var projectPath, out var repositoryName))
            {
                Log.LogError(CommonResources.ValueOfWithIdentityIsInvalid, Names.SourceRoot.RepositoryUrlFullName, SourceRoot.ItemSpec, gitUri);
                return(null);
            }

            return
                (UriUtilities.Combine(
                     UriUtilities.Combine(contentUri.ToString(), projectPath), $"_apis/git/repositories/{repositoryName}/items") +
                 $"?api-version=1.0&versionType=commit&version={revisionId}&path=/*");
        }
Example #6
0
        protected override string BuildSourceLinkUrl(Uri contentUri, Uri gitUri, string relativeUrl, string revisionId, ITaskItem?hostItem)
        {
            var trimLeadingSlash  = relativeUrl.TrimStart('/');
            var trimmedContentUrl = contentUri.ToString().TrimEnd('/', '\\');

            // p = project/path
            // a = action
            // hb = SHA/revision
            // f = repo file path
            var gitwebRawUrl = UriUtilities.Combine(trimmedContentUrl, $"?p={trimLeadingSlash}.git;a=blob_plain;hb={revisionId};f=*");

            return(gitwebRawUrl);
        }
        internal static string BuildSourceLinkUrlForEnterpriseEdition(
            Uri contentUri,
            string relativeBaseUrl,
            string projectName,
            string repositoryName,
            string commitSha,
            Version version)
        {
            var relativeUrl = (version >= s_versionWithNewUrlFormat) ?
                              $"projects/{projectName}/repos/{repositoryName}/raw/*?at={commitSha}" :
                              $"projects/{projectName}/repos/{repositoryName}/browse/*?at={commitSha}&raw";

            return(UriUtilities.Combine(contentUri.ToString(), UriUtilities.Combine(relativeBaseUrl, relativeUrl)));
        }
Example #8
0
        protected override string?BuildSourceLinkUrl(Uri contentUri, Uri gitUri, string relativeUrl, string revisionId, ITaskItem?hostItem)
        {
            var virtualDirectory = hostItem?.GetMetadata(VirtualDirectoryMetadataName) ?? "";

            if (!AzureDevOpsUrlParser.TryParseOnPremHttp(relativeUrl, virtualDirectory, out var projectPath, out var repositoryName))
            {
                Log.LogError(CommonResources.ValueOfWithIdentityIsInvalid, Names.SourceRoot.RepositoryUrlFullName, SourceRoot.ItemSpec, gitUri);
                return(null);
            }

            return
                (UriUtilities.Combine(
                     UriUtilities.Combine(contentUri.ToString(), projectPath), $"_apis/git/repositories/{repositoryName}/items") +
                 $"?api-version=1.0&versionType=commit&version={revisionId}&path=/*");
        }
Example #9
0
        private string BuildSourceLinkUrlForEnterpriseEdition(Uri contentUri, string relativeUrl, string revisionId,
                                                              ITaskItem hostItem)
        {
            var bitbucketEnterpriseVersion = GetBitbucketEnterpriseVersion(hostItem);

            var splits         = relativeUrl.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            var isSshRepoUri   = !(splits.Length == 3 && splits[0] == "scm");
            var projectName    = isSshRepoUri ? splits[0] : splits[1];
            var repositoryName = isSshRepoUri ? splits[1] : splits[2];

            var relativeUrlForBitbucketEnterprise =
                GetRelativeUrlForBitbucketEnterprise(projectName, repositoryName, revisionId,
                                                     bitbucketEnterpriseVersion);

            var result = UriUtilities.Combine(contentUri.ToString(), relativeUrlForBitbucketEnterprise);

            return(result);
        }
        protected override string BuildSourceLinkUrl(Uri contentUri, Uri gitUri, string relativeUrl, string revisionId, ITaskItem hostItem)
        {
            var virtualDirectory = hostItem.GetMetadata(VirtualDirectoryMetadataName);

            if (string.IsNullOrEmpty(virtualDirectory))
            {
                Log.LogError(CommonResources.ItemOfItemGroupMustSpecifyMetadata, hostItem.ItemSpec, HostsItemGroupName, VirtualDirectoryMetadataName);
                return(null);
            }

            if (!TeamFoundationUrlParser.TryParseOnPremHttp(relativeUrl, virtualDirectory, out var projectPath, out var repositoryName))
            {
                Log.LogError(CommonResources.ValueOfWithIdentityIsInvalid, Names.SourceRoot.RepositoryUrlFullName, SourceRoot.ItemSpec, gitUri);
                return(null);
            }

            return
                (UriUtilities.Combine(
                     UriUtilities.Combine(contentUri.ToString(), projectPath), $"_apis/git/repositories/{repositoryName}/items") +
                 $"?api-version=1.0&versionType=commit&version={revisionId}&path=/*");
        }
 protected override Uri GetDefaultContentUriFromRepositoryUri(Uri repositoryUri)
 => new Uri(UriUtilities.Combine(repositoryUri.ToString(), "repo-default"), UriKind.Absolute);
Example #12
0
 protected override string?BuildSourceLinkUrl(Uri contentUri, Uri gitUri, string relativeUrl, string revisionId, ITaskItem?hostItem)
 => UriUtilities.Combine(UriUtilities.Combine(contentUri.ToString(), relativeUrl), revisionId + "/*");
Example #13
0
 private static string BuildSourceLinkUrlForCloudEdition(Uri contentUri, string relativeUrl, string revisionId)
 {
     return(UriUtilities.Combine(UriUtilities.Combine(contentUri.ToString(), relativeUrl),
                                 "raw/" + revisionId + "/*"));
 }