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