CommitIssues(this GitHubClient appClient, string organization, string repository1, string repository2, DateTimeOffset?since, string branch = null,
                     ItemStateFilter state = ItemStateFilter.All, DateTimeOffset?until = null)
        {
            var allRepos = appClient.Repository.GetAllForOrg(organization).ToObservable().Replay().RefCount();

            return(allRepos.Select(list => list.First(repository => repository.Name == repository1))
                   .Zip(allRepos.Select(list => list.First(repository => repository.Name == repository2)), (repo1, repo2) => (repo1, repo2))
                   .Select(repoTuple => {
                var allIssues = appClient.Issue
                                .GetAllForRepository(repoTuple.repo1.Id, new RepositoryIssueRequest {
                    Since = since, State = state
                }).ToObservable()
                                .SelectMany(list => list).Distinct(issue => issue.Number).ToEnumerable().OrderBy(issue => issue.Number).ToArray();
                var commits = appClient.Repository.Commit.GetAll(repoTuple.repo2.Id, new CommitRequest {
                    Since = since, Sha = branch, Until = until
                })
                              .ToObservable().SelectMany(list => list).ToEnumerable().ToArray();
                var commitIssues = commits.Select(commit => {
                    var issues = allIssues.Where(issue => new Regex($@"\#{issue.Number}\b").IsMatch(commit.Commit.Message)).ToArray();
                    return (commit, issues);
                })
                                   .Where(_ => _.issues.Any())
                                   .ToArray();
                return (commitIssues, repoTuple);
            }));
        }
 public void UpdateSettingsEnum()
 {
     State             = ParseEnum <ItemStateFilter>(SelectedState);
     FilterBy          = ParseEnum <IssueFilter>(SelectedFilterBy);
     ResourceType      = ParseEnum <ResourceType>(SelectedResourceType);
     PullRequestSortBy = ParseEnum <PullRequestSort>(SelectedPullRequestSortBy);
 }
        public async Task ForRepo_PassesState(ItemStateFilter state)
        {
            ListIssuesCommand command = new ListIssuesCommand(_gitHubClient.Object, _discoveryService.Object, _reporter.Object);

            command.State = state;

            // Act
            await command.OnExecuteAsync(NullConsole.Singleton);

            // Assert
            _issuesClient.Verify(client => client.GetAllForRepository(ValidOwner, ValidRepo, It.Is <RepositoryIssueRequest>(request => request.State == state)), Times.Once());
        }
        protected override async Task BeginProcessingAsync()
        {
            await base.BeginProcessingAsync();

            if (!Since.HasValue)
            {
                ItemStateFilter = ItemStateFilter.All;
                var release = await GitHubClient.Repository.GetForOrg(Organization, Repository1)
                              .SelectMany(repository => GitHubClient.Repository.Release.GetAll(repository.Id))
                              .Select(list => list.First(_ => !_.Draft));

                Since = release.PublishedAt;
                WriteVerbose($"Last {Repository1} release {release.Name} was at {release.PublishedAt}");
            }
        }
        public async Task NoRepo_PassesState(ItemStateFilter state)
        {
            // Arrange
            _discoveryService.Setup(service => service.DiscoverInCurrentDirectory())
            .Returns(() => null);

            ListIssuesCommand command = new ListIssuesCommand(_gitHubClient.Object, _discoveryService.Object, _reporter.Object);

            command.State = state;

            // Act
            await command.OnExecuteAsync(NullConsole.Singleton);

            // Assert
            _issuesClient.Verify(client => client.GetAllForCurrent(It.Is <IssueRequest>(request => request.State == state)), Times.Once());
        }
        public static ItemState FromItemStateFilter(this ItemStateFilter filter)
        {
            switch (filter)
            {
            case ItemStateFilter.Open:
                return(ItemState.Open);

            case ItemStateFilter.Closed:
                return(ItemState.Closed);

            case ItemStateFilter.All:
                return(ItemState.All);

            default:
                throw new ArgumentOutOfRangeException(nameof(filter), filter, null);
            }
        }
        private static ItemStateFilter ConvertToGitHubStateFilter(PullRequestState status)
        {
            ItemStateFilter filter = ItemStateFilter.All;

            switch (status)
            {
            case PullRequestState.All:
                filter = ItemStateFilter.All;
                break;

            case PullRequestState.Closed:
                filter = ItemStateFilter.Closed;
                break;

            case PullRequestState.Open:
                filter = ItemStateFilter.Open;
                break;
            }

            return(filter);
        }
Exemple #8
0
        private async Task <IEnumerable <GithubPullRequest> > InternalGetPullRequestsWithFiltering(ApplicationImage applicationImage, ItemStateFilter itemStateFilter)
        {
            if (!applicationImage.SourceCode.Enabled)
            {
                throw new InvalidOperationException($"Source code settings not available or not enabled.");
            }

            var pullRequests = await _gitHubClient.PullRequest.GetAllForRepository(
                applicationImage.SourceCode.Github.Owner,
                applicationImage.SourceCode.Github.Repository,
                new PullRequestRequest()
            {
                State = itemStateFilter
            });

            var pullRequestMap = pullRequests
                                 .Select(x =>
                                         new GithubPullRequest(
                                             x.Id,
                                             applicationImage.SourceCode.Github.Owner,
                                             applicationImage.SourceCode.Github.Repository,
                                             x.Head.Label,
                                             x.Number,
                                             x.State.Value == ItemState.Open,
                                             x.Title,
                                             x.User.Email ?? x.User.Name
                                             )
                                         )
                                 .ToList();

            return(pullRequestMap);
        }
 public ProjectRequest(ItemStateFilter state)
 {
     State = state;
 }
        IWithPullRequestOptions IWithPullRequestOptions.WithState(ItemStateFilter state)
        {
            pullRequestRequest.State = state;

            return(this);
        }
        public IWithIssueOptions WithState(ItemStateFilter state)
        {
            repositoryIssueRequest.State = state;

            return(this);
        }
 private Task <IReadOnlyList <Octokit.Issue> > GetIssuesFromMilestoneAsync(string owner, string repository, int milestoneNumber, ItemStateFilter state = ItemStateFilter.Closed)
 {
     _logger.Verbose("Finding issues with milestone: '{Milestone}", milestoneNumber);
     return(_gitHubClient.Issue.GetAllForRepository(owner, repository, new RepositoryIssueRequest
     {
         Milestone = milestoneNumber.ToString(),
         State = state,
     }));
 }
Exemple #13
0
        public static IObservable <((GitHubCommit commit, Issue[] issues)[] commitIssues, (Repository repo1, Repository repo2) repoTuple)> CommitIssues(
            this GitHubClient appClient, string organization, string repository1, string repository2, DateTimeOffset?since, string branch = null, ItemStateFilter state = ItemStateFilter.All, DateTimeOffset?until = null)
        {
            var allRepos = appClient.Repository.GetAllForOrg(organization).ToObservable().Replay().RefCount();

            return(allRepos.Select(list => list.First(repository => repository.Name == repository1))
                   .Zip(allRepos.Select(list => list.First(repository => repository.Name == repository2)), (repo1, repo2) => (repo1, repo2))
                   .Select(repoTuple => {
                var allIssues = appClient.Issue.GetAllForRepository(repoTuple.repo1.Id, new RepositoryIssueRequest {
                    Since = since, State = state
                }).ToObservable().SelectMany(list => list).ToEnumerable().ToArray();
                var commits = appClient.Repository.Commit.GetAll(repoTuple.repo2.Id, new CommitRequest()
                {
                    Since = since, Sha = branch, Until = until
                }).ToObservable().SelectMany(list => list).ToEnumerable().ToArray();
                var commitIssues = commits.Select(commit => {
                    var issues = allIssues.Where(issue => commit.Commit.Message.Contains($"#{issue.Number}")).ToArray();
                    return (commit, issues);
                }).ToArray();
                return (commitIssues, repoTuple);
            }));
        }