public WebSocketUpdater(WebSocketClientRepository webSocketClientRepository, PullRequestRepository pullRequestRepository, CompletedPullRequestRepository completedPullRequestRepository, IEventBus eventBus)
 {
     this.webSocketClientRepository      = webSocketClientRepository;
     this.pullRequestRepository          = pullRequestRepository;
     this.completedPullRequestRepository = completedPullRequestRepository;
     this.eventBus = eventBus;
     this.logger   = Log.Logger;
 }
        public PullRequestRepositoryTests()
        {
            var gitHubClientMock = new Mock <IGitHubClient>();

            _pullRequestsClientMock = new Mock <IPullRequestsClient>();
            gitHubClientMock.SetupGet(x => x.PullRequest).Returns(_pullRequestsClientMock.Object);

            _sut = new PullRequestRepository(gitHubClientMock.Object);
        }
 public PullRequestUpdater(PullRequestRepository pullRequestRepository, RequestData requestData, RepositoryRepository repositoryRepository,
                           UpdateStatusRepository updateStatusRepository, BuildRepository buildRepository, ILogger <PullRequestUpdater> logger) : base(logger)
 {
     this.requestData            = requestData;
     this.repositoryRepository   = repositoryRepository;
     this.updateStatusRepository = updateStatusRepository;
     this.buildRepository        = buildRepository;
     this.pullRequestRepository  = pullRequestRepository;
 }
Example #4
0
        protected override void Update()
        {
            DateTime startTime = DateTime.Now;

            base.Update();
            IList <TFSAdvanced.Models.DTO.PullRequest> stalePullRequests = PullRequestRepository.GetStale(startTime);

            if (stalePullRequests.Any())
            {
                Parallel.ForEach(stalePullRequests, new ParallelOptions {
                    MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM
                }, pullRequest =>
                {
                    PullRequest updatedPullRequest = GetAsync.Fetch <PullRequest>(RequestData, pullRequest.ApiUrl).Result;
                    if (updatedPullRequest.status != "active")
                    {
                        PullRequestRepository.Remove(new[] { pullRequest });
                    }
                });
            }
        }
Example #5
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "pull-requests")] HttpRequest req,
            CloudStorageAccount storageAccount,
            ILogger log)
        {
            var session = await req.GetAuthSession(storageAccount);

            if (session == null)
            {
                log.LogInformation("Unable to find session");
                return(new UnauthorizedResult());
            }

            var organisations         = session.Organisations.Select(x => x.Name).ToList();
            var pullRequestRepository = new PullRequestRepository(new AzureStorage(storageAccount));
            var pullRequests          = await pullRequestRepository.GetForOrganisations(organisations);

            return(new JsonResult(pullRequests, new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }));
        }
Example #6
0
        public static int CreateAutoMergePullRequest(this ICakeContext ctx, AutoMergeSettings settings, Action <AutoMergeCredentials> credentialConfigurator = null)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            var credentials = new AutoMergeCredentials(ctx.Log);

            if (credentialConfigurator == null)
            {
                credentials.AuthenticationNtlm();
            }
            else
            {
                credentialConfigurator(credentials);
            }

            var repository    = new PullRequestRepository(ctx.Log, settings, credentials);
            var pullRequestId = repository.CreatePullRequest();

            if (settings.AutoApprove)
            {
                repository.VotePullRequest(pullRequestId, AutoMergeVote.Approved);
            }

            if (settings.AutoComplete)
            {
                repository.CompletePullRequest(pullRequestId, settings.OverridePolicies);
            }

            foreach (var reviewer in settings.Reviewers)
            {
                repository.AddReviewer(pullRequestId, reviewer);
            }

            return(pullRequestId);
        }
Example #7
0
 public PullRequestUpdatesSocket(WebSocketClientRepository webSocketClientRepository, PullRequestRepository pullRequestRepository)
 {
     this.webSocketClientRepository = webSocketClientRepository;
     this.pullRequestRepository     = pullRequestRepository;
 }
Example #8
0
 public PullRequestUpdater(PullRequestRepository pullRequestRepository, RequestData requestData, RepositoryRepository repositoryRepository, UpdateStatusRepository updateStatusRepository, BuildRepository buildRepository, ILogger <PullRequestUpdaterBase> logger) : base(pullRequestRepository, requestData, repositoryRepository, updateStatusRepository, buildRepository, logger)
 {
 }
 public OverviewViewModel(IssueRepository issues, PullRequestRepository pullRequest)
 {
     Issues = issues;
     PullRequests = pullRequest;
     Contexts = new ObservableCollection<ContextViewModel>();
 }
        protected override void Update()
        {
            var pullRequestCount = 0;

            Parallel.ForEach(repositoryRepository.GetAll(), new ParallelOptions {
                MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM
            }, repository =>
            {
                var repositoryPullRequests = new ConcurrentBag <PullRequest>();
                if (string.IsNullOrEmpty(repository.PullRequestUrl))
                {
                    return;
                }
                IList <TFSAdvanced.Updater.Models.PullRequests.PullRequest> pullRequests = GetPullRequests(repository);
                if (pullRequests == null)
                {
                    return;
                }
                Parallel.ForEach(pullRequests, new ParallelOptions {
                    MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM
                }, pullRequest =>
                {
                    try
                    {
                        CommitLink commitId = null;
                        if (pullRequest.lastMergeCommit != null)
                        {
                            commitId = pullRequest.lastMergeCommit;
                        }
                        else if (pullRequest.lastMergeSourceCommit != null)
                        {
                            commitId = pullRequest.lastMergeSourceCommit;
                        }

                        if (commitId == null)
                        {
                            Logger.LogWarning($"Unable to get last merge commit for the pullrequest ({pullRequest.pullRequestId}) {pullRequest.description}");
                            return;
                        }

                        if (string.IsNullOrEmpty(commitId.commitId))
                        {
                            Logger.LogWarning($"Unable to get the last commitID for the pull request ({pullRequest.pullRequestId}) {pullRequest.description}");
                            return;
                        }
                        Build build = buildRepository.GetBuildBySourceVersion(repository, commitId.commitId);

                        PullRequest pullRequestDto       = BuildPullRequest(pullRequest, build);
                        pullRequestDto.Repository        = repository;
                        pullRequestDto.Url               = BuildPullRequestUrl(pullRequest, RequestData.BaseAddress);
                        pullRequestDto.RequiredReviewers = repository.MinimumApproverCount;

                        foreach (TFSAdvanced.Updater.Models.PullRequests.Reviewer reviewer in pullRequest.reviewers)
                        {
                            // Container reviewers do not count
                            if (reviewer.isContainer)
                            {
                                continue;
                            }
                            if (reviewer.vote == (int)Vote.Approved)
                            {
                                pullRequestDto.AcceptedReviewers++;
                            }
                        }
                        pullRequestDto.LastUpdated = DateTime.Now;
                        repositoryPullRequests.Add(pullRequestDto);
                        Interlocked.Increment(ref pullRequestCount);
                    }
                    catch (Exception e)
                    {
                        Logger.LogError(e, "Error parsing pull request");
                    }
                });
                if (repositoryPullRequests.Any())
                {
                    PullRequestRepository.Update(repositoryPullRequests.ToList());
                }
            });
            updateStatusRepository.UpdateStatus(new UpdateStatus {
                LastUpdate = DateTime.Now, UpdatedRecords = pullRequestCount, UpdaterName = GetType().Name
            });
        }
Example #11
0
 public PullRequestsController(PullRequestRepository pullRequestRepository)
 {
     this.pullRequestRepository = pullRequestRepository;
 }