public async Task <bool> CreateBranchAsync(string url, string name, string sourceName) { var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; var branch = await _client.Repository.Branch.Get(username, reponame, sourceName); if (branch == null) { _log.LogError("Source branch not found"); return(false); } var reference = await _client.Git.Reference.Create(username, reponame, new NewReference($"refs/heads/{name}", branch.Commit.Sha)); if (reference == null) { _log.LogError("Branch not created"); return(false); } return(true); }
public async Task <long> GetIdAsync(string url) { if (_lookup.TryGetValue(url, out long value)) { return(value); } var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; _log.LogInformation("Loading repo info : {0} / {1}", username, reponame); // Octokit.AuthorizationException: Bad credentials var repository = await _client.Repository.Get(username, reponame); if (repository == null) { throw new DevKnack.Common.Exceptions.NotFoundException("Repository not found", url); } _lookup.TryAdd(url, repository.Id); return(repository.Id); }
public async Task CreatePullRequestAsync(string url, string name, string targetName) { var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; await _client.PullRequest.Create(username, reponame, new NewPullRequest("Gitscribe translation", name, targetName)); }
public async Task <IEnumerable <string> > GetBranchNamesAsync(string url) { var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; var branches = await _client.Repository.Branch.GetAll(username, reponame); var names = branches.Select(b => b.Name); // Put master & develop at the top of the branch list return(names.OrderByDescending(n => n == "master" || n == "develop")); }
public async Task <IEnumerable <string> > SearchAsync(string url, string extension) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException(nameof(url)); } if (string.IsNullOrEmpty(extension)) { throw new ArgumentNullException(nameof(extension)); } string branchName = url.ExtractBranchName(); url = url.StripBranchName(branchName); if (!extension.StartsWith('.')) { extension = $".{extension}"; } var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; string search = $"extension:{extension}"; var req = new SearchCodeRequest(search, username, reponame); if (string.IsNullOrEmpty(branchName)) { var results = await _client.Search.SearchCode(req); // Github is searching the contents of the files too // Github seems generous with the match, so do a secondary filter var filteredResults = results.Items.Select(i => i.Path); return(filteredResults); } else { // Search in a specific branch var tree = await _client.Git.Tree.GetRecursive(username, reponame, branchName); var filePaths = tree.Tree.Select(item => item.Path).Where(path => Path.GetExtension(path) == extension); return(filePaths); } }
public async Task <long> GetIdAsync(string url) { if (_lookup.TryGetValue(url, out long value)) { return(value); } var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; var repository = await _client.Repository.Get(username, reponame); if (repository == null) { throw new DevKnack.Common.Exceptions.NotFoundException("Repository not found", url); } _lookup.TryAdd(url, repository.Id); return(repository.Id); }
public async Task <IEnumerable <string> > SearchAsync(string url, string query) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException(nameof(url)); } if (string.IsNullOrEmpty(query)) { throw new ArgumentNullException(nameof(query)); } string branchName = url.ExtractBranchName(); url = url.StripBranchName(branchName); var values = GitHubUrlExtractor.ExtractFromUrl(url); string username = values.Item1; string reponame = values.Item2; //var req = new SearchCodeRequest(query, username, reponame); //if (string.IsNullOrEmpty(branchName)) //{ // var results = await _client.Search.SearchCode(req); // // Github is searching the contents of the files too // // Github seems generous with the match, so do a secondary filter // var filteredResults = results.Items.Select(i => i.Path); // return filteredResults; //} //else { if (string.IsNullOrEmpty(branchName)) { branchName = "master"; } long repositoryId = await _idLookup.GetIdAsync(url); // Search in a specific branch TreeResponse?tree; try { tree = await _client.Git.Tree.GetRecursive(repositoryId, branchName); } catch (Octokit.NotFoundException) { _log.LogWarning($"Repository not found : {url}"); return(Enumerable.Empty <string>()); } var filePaths = tree.Tree.Select(item => item.Path); if (!string.IsNullOrEmpty(query)) { if (query.StartsWith("extension:")) { string extension = query.Replace("extension:", ""); filePaths = filePaths.Where(path => Path.GetExtension(path) == extension); } else { var splits = query.Split('+'); filePaths = filePaths.Where(path => path.Contains(splits[0])); } } return(filePaths); } }