Exemple #1
0
        public async Task <string> GenerateLinkAsync(
            string repositoryFolder,
            RepositoryInfo repositoryInfo,
            string filePath,
            long?startLineNumber   = null,
            long?startColumnNumber = null,
            long?endLineNumber     = null,
            long?endColumnNumber   = null)
        {
            Requires.NotNullOrEmpty(repositoryFolder, nameof(repositoryFolder));
            Requires.NotNull(repositoryInfo, nameof(repositoryInfo));
            Requires.NotNullOrEmpty(filePath, nameof(filePath));

            string branchName
                = Uri.EscapeDataString(
                      await _gitCommandService.GetBestRemoteGitBranchAsync(repositoryFolder)
                      .ConfigureAwait(false));

            var relativePath
                = Uri.EscapeDataString(
                      filePath.Substring(repositoryFolder.Length))
                  .Replace("%5C", "/");

            var repositoryUrl = repositoryInfo.Properties[RepositoryUrl];

            Requires.NotNullOrEmpty(repositoryUrl, nameof(repositoryUrl));
            Requires.NotNullOrEmpty(branchName, nameof(branchName));

            // Link to a file without line to select.
            string url = $"{repositoryUrl}?path={relativePath}&version=GB{branchName}&lineStyle=plain";

            if (startLineNumber.HasValue)
            {
                url += $"&line={startLineNumber + 1}";
            }

            if (endLineNumber.HasValue)
            {
                url += $"&lineEnd={endLineNumber + 1}";
            }

            if (startColumnNumber.HasValue)
            {
                url += $"&lineStartColumn={startColumnNumber + 1}";
            }

            if (endColumnNumber.HasValue)
            {
                url += $"&lineEndColumn={endColumnNumber + 1}";
            }

            return(url);
        }
Exemple #2
0
        public async Task <string> GenerateLinkAsync(
            string repositoryFolder,
            RepositoryInfo repositoryInfo,
            string filePath,
            long?startLineNumber   = null,
            long?startColumnNumber = null,
            long?endLineNumber     = null,
            long?endColumnNumber   = null)
        {
            Requires.NotNullOrEmpty(repositoryFolder, nameof(repositoryFolder));
            Requires.NotNull(repositoryInfo, nameof(repositoryInfo));
            Requires.NotNullOrEmpty(filePath, nameof(filePath));

            string branchName
                = Uri.EscapeDataString(
                      await _gitCommandService.GetBestRemoteGitBranchAsync(repositoryFolder)
                      .ConfigureAwait(false));

            var relativePath
                = Uri.EscapeDataString(
                      filePath.Substring(repositoryFolder.Length))
                  .Replace("%5C", "/");

            var repositoryName = repositoryInfo.Properties[Repository];
            var organization   = repositoryInfo.Properties[Organization];

            Requires.NotNullOrEmpty(organization, nameof(organization));
            Requires.NotNullOrEmpty(repositoryName, nameof(repositoryName));
            Requires.NotNullOrEmpty(branchName, nameof(branchName));

            // Link to a file without line to select.
            string url = $"https://github.com/{organization}/{repositoryName}/blob/{branchName}/{relativePath}";

            if (startLineNumber.HasValue && endLineNumber.HasValue)
            {
                // Link to a file with line to select.
                url += $"#L{startLineNumber + 1}-L{endLineNumber + 1}";
            }

            return(url);
        }