Exemplo n.º 1
0
        private static async Task CheckObjectsAsync()
        {
            // This checks that the objects in the list, they exist on those repos
            List <GitHubObject>          objectsToCheck       = GitHubObject.Parse(s_cmdLine.ObjectsFile);
            IEnumerable <RepositoryInfo> repoToCreateObjectIn = RepositoryInfo.Parse(s_cmdLine.Repositories);

            foreach (RepositoryInfo repo in repoToCreateObjectIn)
            {
                Colorizer.WriteLine("Processing [Magenta!{0}\\{1}] repo.", repo.Owner, repo.Name);

                // we can check labels and milestones.
                HashSet <Creator.Models.Objects.Label>     labelsInRepo     = new HashSet <Creator.Models.Objects.Label>(await s_gitHub.ListLabelsAsync(repo));
                HashSet <Creator.Models.Objects.Milestone> milestonesInRepo = new HashSet <Creator.Models.Objects.Milestone>(await s_gitHub.ListMilestonesAsync(repo));

                List <GitHubObject> foundObjects = new List <GitHubObject>();

                foreach (GitHubObject item in objectsToCheck)
                {
                    switch (item)
                    {
                    case Creator.Models.Objects.Milestone milestone:
                        if (milestonesInRepo.Contains(milestone))
                        {
                            foundObjects.Add(item);
                        }
                        break;

                    case Creator.Models.Objects.Label label:
                        if (labelsInRepo.Contains(label))
                        {
                            foundObjects.Add(item);
                        }
                        break;

                    default:
                        throw new InvalidOperationException($"Unknown type {item.GetType()}.");
                    }
                }

                // remove all the found objets from the initial list.
                foreach (GitHubObject item in foundObjects)
                {
                    objectsToCheck.Remove(item);
                }

                if (objectsToCheck.Count == 0)
                {
                    Colorizer.WriteLine("[Green!Done]: All requested objects are present");
                }
                else
                {
                    Colorizer.WriteLine("[Red!Done]: The following were not found:");
                    foreach (var item in objectsToCheck)
                    {
                        Console.WriteLine(item.ToString());
                    }
                }
            }
        }
Exemplo n.º 2
0
        private static async Task CreateObjectsAsync(Func <RepositoryInfo, Models.Objects.Milestone, Task> milestoneDelegate,
                                                     Func <RepositoryInfo, Models.Objects.Label, Task> labelsDelegate)
        {
            Colorizer.WriteLine("[Yellow!Warning]: About to create milestones on GitHub. Proceed? \\[[Red!Yes]/[Green!No]\\]");
            if (Console.ReadKey().Key != ConsoleKey.Y)
            {
                Colorizer.WriteLine("\b[Green!No changes made].");
                return;
            }

            Colorizer.WriteLine("\b[Red!Creating items on GitHub].");

            // parse the data
            IEnumerable <GitHubObject>   objectsToCreate      = GitHubObject.Parse(s_cmdLine.ObjectsFile);
            IEnumerable <RepositoryInfo> repoToCreateObjectIn = RepositoryInfo.Parse(s_cmdLine.Repositories);

            foreach (RepositoryInfo repo in repoToCreateObjectIn)
            {
                Colorizer.WriteLine("Processing [Yellow!{0}\\{1}] repo.", repo.Owner, repo.Name);
                foreach (GitHubObject item in objectsToCreate)
                {
                    try
                    {
                        switch (item)
                        {
                        case Creator.Models.Objects.Milestone milestone:
                            await milestoneDelegate(repo, milestone);

                            break;

                        case Creator.Models.Objects.Label label:
                            await labelsDelegate(repo, label);

                            break;

                        default:
                            throw new InvalidOperationException($"Unknown type {item.GetType()}.");
                        }
                    }
                    catch (Exception e) when(e is AggregateException)
                    {
                        Colorizer.WriteLine("[Red!Error occured] Creating object failed.");
                        var ag = e as AggregateException;

                        foreach (var exs in ag.InnerExceptions)
                        {
                            Colorizer.WriteLine(exs.Message);
                        }
                    }
                    catch (Exception e)
                    {
                        Colorizer.WriteLine("[Red!Error occured] Creating milestone failed.");
                        Colorizer.WriteLine(e.Message);
                    }
                }
            }
        }
Exemplo n.º 3
0
        static async Task InternalMainAsync(string[] args)
        {
            if (!CommandLine.Parser.TryParse(args, out s_cmdLine))
            {
                return;
            }

            // if we have specified a token, use that.
            if (s_cmdLine.Token == null)
            {
                Colorizer.WriteLine("[Red!Error] Please specify a GitHub access token!");
            }

            s_gitHub = GitHubHelpers.GetGitHubClientWithToken(s_cmdLine.Token);

            IEnumerable <GitHubObject> objects = GitHubObject.Parse(s_cmdLine.ObjectsFile);

            if (s_cmdLine.Action == CommandAction.Create)
            {
                await CreateObjectsInGitHubAsync();
            }
            else if (s_cmdLine.Action == CommandAction.CreateOrUpdate)
            {
                await CreateOrUpdateObjectsInGitHubAsync();
            }
            else if (s_cmdLine.Action == CommandAction.List)
            {
                List <RepositoryInfo> reposToList = RepositoryInfo.Parse(s_cmdLine.RepositoriesList).ToList();

                foreach (var repo in reposToList)
                {
                    Colorizer.WriteLine("Processing [Magenta!{0}\\{1}] repo.", repo.Owner, repo.Name);

                    foreach (var milestone in s_gitHub.ListMilestonesAsync(repo).Result)
                    {
                        Colorizer.Write("Title: [Yellow!{0}]", milestone.Title);
                        if (!string.IsNullOrEmpty(milestone.Description))
                        {
                            Colorizer.Write(", Description: [Yellow!{0}]", milestone.Description);
                        }
                        if (milestone.DueOn.HasValue)
                        {
                            Colorizer.Write(", DueOn: [Yellow!{0}]", milestone.DueOn.Value.Date.ToShortDateString());
                        }

                        Colorizer.WriteLine($", Open issues: [Cyan!{milestone.OpenIssues}],  Closed issues: [Green!{milestone.ClosedIssues}]  ");
                    }
                }
            }
            else if (s_cmdLine.Action == CommandAction.Check)
            {
                // This checks that the objects in the list, they exist on those repos
                List <GitHubObject>          objectsToCheck       = GitHubObject.Parse(s_cmdLine.ObjectsFile);
                IEnumerable <RepositoryInfo> repoToCreateObjectIn = RepositoryInfo.Parse(s_cmdLine.RepositoriesList);

                foreach (RepositoryInfo repo in repoToCreateObjectIn)
                {
                    Colorizer.WriteLine("Processing [Magenta!{0}\\{1}] repo.", repo.Owner, repo.Name);

                    // we can check labels and milestones.
                    HashSet <Creator.Models.Objects.Label>     labelsInRepo     = new HashSet <Creator.Models.Objects.Label>(await s_gitHub.ListLabelsAsync(repo));
                    HashSet <Creator.Models.Objects.Milestone> milestonesInRepo = new HashSet <Creator.Models.Objects.Milestone>(await s_gitHub.ListMilestonesAsync(repo));

                    List <GitHubObject> foundObjects = new List <GitHubObject>();

                    foreach (GitHubObject item in objectsToCheck)
                    {
                        switch (item)
                        {
                        case Creator.Models.Objects.Milestone milestone:
                            if (milestonesInRepo.Contains(milestone))
                            {
                                foundObjects.Add(item);
                            }
                            break;

                        case Creator.Models.Objects.Label label:
                            if (labelsInRepo.Contains(label))
                            {
                                foundObjects.Add(item);
                            }
                            break;

                        default:
                            throw new InvalidOperationException($"Unknown type {item.GetType()}.");
                        }
                    }

                    // remove all the found objets from the initial list.
                    foreach (GitHubObject item in foundObjects)
                    {
                        objectsToCheck.Remove(item);
                    }

                    if (objectsToCheck.Count == 0)
                    {
                        Colorizer.WriteLine("[Green!Done]: All requested objects are present");
                    }
                    else
                    {
                        Colorizer.WriteLine("[Red!Done]: The following were not found:");
                        foreach (var item in objectsToCheck)
                        {
                            Console.WriteLine(item.ToString());
                        }
                    }
                }
            }
        }