Skip to content

Commit

Permalink
Added working stuff for removing pr's
Browse files Browse the repository at this point in the history
  • Loading branch information
devedse committed Aug 10, 2020
1 parent d02d0b7 commit 7fac4f2
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 40 deletions.
53 changes: 53 additions & 0 deletions WebOptimizationProject/Helpers/Git/GitOctoKitHandler.cs
Expand Up @@ -32,6 +32,59 @@ private GitHubClient CreateGitHubClient(WopConfig config)
return githubclient;
}

public async Task<List<IssueAndRepo>> GetAllMyOpenPrs()
{
var totalIssueList = new List<Issue>();

int page = 1;
while (true)
{
var searchIssuesRequest = new SearchIssuesRequest()
{
Page = page,
PerPage = 100,
Author = _config.GitHubUserName,
Type = IssueTypeQualifier.PullRequest,
State = ItemState.Open,
Head = Constants.FeatureName
};

var pullRequestsThisPage = await GitHubClient.Search.SearchIssues(searchIssuesRequest);

if (pullRequestsThisPage.IncompleteResults)
{
throw new Exception("Search result was incomplete");
}

totalIssueList.AddRange(pullRequestsThisPage.Items);

if (pullRequestsThisPage.TotalCount != 100)
{
break;
}
}

var issueAndRepoList = totalIssueList.Select(t =>
{
var start = "github.com/repos";
var urlShortened = t.Url.Substring(t.Url.IndexOf(start) + start.Length);
var split = urlShortened.Split('/', StringSplitOptions.RemoveEmptyEntries);
var repoOwner = split[0];
var repoName = split[1];
var issueAndRepo = new IssueAndRepo()
{
Issue = t,
RepoOwner = repoOwner,
RepoName = repoName
};
return issueAndRepo;
});

return issueAndRepoList.ToList();
}

public async Task<PullRequest> GetPullRequest(string repositoryOwner, string repositoryName)
{
Console.WriteLine($"Getting pullrequest with RepoOwner: {repositoryOwner} RepoName: {repositoryName}");
Expand Down
11 changes: 11 additions & 0 deletions WebOptimizationProject/Helpers/Git/IssueAndRepo.cs
@@ -0,0 +1,11 @@
using Octokit;

namespace WebOptimizationProject.Helpers.Git
{
public class IssueAndRepo
{
public string RepoOwner { get; set; }
public string RepoName { get; set; }
public Issue Issue { get; set; }
}
}
78 changes: 38 additions & 40 deletions WebOptimizationProject/WopRepoManager.cs
Expand Up @@ -28,49 +28,40 @@ public void Start()

consoleMenu.MenuOptions.Add(new ConsoleMenuOption("Remove all my forks and close their active PR's", new Action(() =>
{
var myUser = _gitOctoKitHandler.GitHubClient.User.Current().Result;
var myReposAll = _gitOctoKitHandler.GitHubClient.Repository.GetAllForCurrent().Result;
var myReposTemp = myReposAll.Where(t => t.Fork).ToList();
Console.WriteLine("Actions to execute:");
var prDict = new Dictionary<Repository, List<PullRequest>>();
var allPrs = _gitOctoKitHandler.GetAllMyOpenPrs().Result;
foreach (var repo in myReposTemp)
foreach (var pr in allPrs)
{
var prsHereList = new List<PullRequest>();
var thisRepo = _gitOctoKitHandler.GitHubClient.Repository.Get(repo.Id).Result;
prDict.Add(thisRepo, prsHereList);
Console.WriteLine($"\tClose:\t{pr.Issue.HtmlUrl} ({pr.Issue.State})");
}
var prsHere = _gitOctoKitHandler.GitHubClient.PullRequest.GetAllForRepository(thisRepo.Parent.Id).Result;
var prsFiltered = prsHere.Where(t => t.State.Value == ItemState.Open && t.User.Id == myUser.Id).ToList();
foreach (var pr in prsHere)
{
Console.WriteLine($"\tClose:\t{pr.HtmlUrl} ({pr.State})");
prsHereList.Add(pr);
}
var myReposAll = _gitOctoKitHandler.GitHubClient.Repository.GetAllForCurrent().Result;
var myRepos = myReposAll.Where(t => t.Fork).ToList();
foreach (var repo in myRepos)
{
Console.WriteLine($"\tDelete:\t{repo.FullName}");
}
var consMenuRemoveRepos = new ConsoleMenu(ConsoleMenuType.StringInput);
consMenuRemoveRepos.MenuOptions.Add(new ConsoleMenuOption("Yes", new Action(() =>
{
foreach (var kvp in prDict)
foreach (var pr in allPrs)
{
var repo = kvp.Key;
foreach (var pr in kvp.Value)
Console.Write($"Closing: {pr.Issue.HtmlUrl} ");
var up = new PullRequestUpdate()
{
Console.Write($"Closing: {pr.HtmlUrl} ");
var up = new PullRequestUpdate()
{
State = ItemState.Closed
};
_gitOctoKitHandler.GitHubClient.PullRequest.Update(repo.Parent.Id, pr.Number, up).Wait();
Console.WriteLine("Done");
}
State = ItemState.Closed
};
_gitOctoKitHandler.GitHubClient.PullRequest.Update(pr.RepoOwner, pr.RepoName, pr.Issue.Number, up).Wait();
Console.WriteLine("Done");
}
foreach (var repo in myRepos)
{
Console.Write($"Removing: {repo.FullName} ");
_gitOctoKitHandler.GitHubClient.Repository.Delete(repo.Id).Wait();
Console.WriteLine("Done");
Expand All @@ -83,21 +74,21 @@ public void Start()
})));
Console.WriteLine();
Console.WriteLine("Are you sure you want to remove all these repositories?");
Console.WriteLine("Are you sure you want to execute these actions?");
consMenuRemoveRepos.RenderMenu();
consMenuRemoveRepos.WaitForResult();
})));

consoleMenu.MenuOptions.Add(new ConsoleMenuOption("Remove all my forks", new Action(() =>
{
Console.WriteLine("Actions to execute:");
var myReposAll = _gitOctoKitHandler.GitHubClient.Repository.GetAllForCurrent().Result;
var myRepos = myReposAll.Where(t => t.Fork).ToList();
Console.WriteLine("All these repositories will be removed:");
foreach (var repo in myRepos)
{
Console.WriteLine($"\t{repo.FullName}");
Console.WriteLine($"\tDelete:\t{repo.FullName}");
}
var consMenuRemoveRepos = new ConsoleMenu(ConsoleMenuType.StringInput);
Expand All @@ -118,29 +109,36 @@ public void Start()
})));
Console.WriteLine();
Console.WriteLine("Are you sure you want to remove all these repositories?");
Console.WriteLine("Are you sure you want to execute these actions?");
consMenuRemoveRepos.RenderMenu();
consMenuRemoveRepos.WaitForResult();
})));

consoleMenu.MenuOptions.Add(new ConsoleMenuOption("Close all my pull requests", new Action(() =>
{
var myIssues = _gitOctoKitHandler.GitHubClient.Issue.GetAllForCurrent(new IssueRequest() { Filter = IssueFilter.All, State = ItemStateFilter.All }, new ApiOptions() { }).Result;
Console.WriteLine("Actions to execute:");
Console.WriteLine("All these issues will be closed:");
var allPrs = _gitOctoKitHandler.GetAllMyOpenPrs().Result;
foreach (var issue in myIssues)
foreach (var pr in allPrs)
{
Console.WriteLine($"\t{issue.HtmlUrl} ({issue.State})");
Console.WriteLine($"\tClose:\t{pr.Issue.HtmlUrl} ({pr.Issue.State})");
}
Console.WriteLine("Yeah this doesn't work yet because for some reason you can't obtain all your pull requests. I made a support request for this");
var consMenuRemoveRepos = new ConsoleMenu(ConsoleMenuType.StringInput);
consMenuRemoveRepos.MenuOptions.Add(new ConsoleMenuOption("Yes", new Action(() =>
{
Console.WriteLine("Yeahhh. this is sadly not yet implemented");
foreach (var pr in allPrs)
{
Console.Write($"Closing: {pr.Issue.HtmlUrl} ");
var up = new PullRequestUpdate()
{
State = ItemState.Closed
};
_gitOctoKitHandler.GitHubClient.PullRequest.Update(pr.RepoOwner, pr.RepoName, pr.Issue.Number, up).Wait();
Console.WriteLine("Done");
}
})));
consMenuRemoveRepos.MenuOptions.Add(new ConsoleMenuOption("No", new Action(() =>
Expand All @@ -149,7 +147,7 @@ public void Start()
})));
Console.WriteLine();
Console.WriteLine("Are you sure you want to remove all these repositories?");
Console.WriteLine("Are you sure you want to execute these actions?");
consMenuRemoveRepos.RenderMenu();
consMenuRemoveRepos.WaitForResult();
})));
Expand Down

0 comments on commit 7fac4f2

Please sign in to comment.