Example #1
0
        public async Task <int> MakeUpdatePullRequests(
            IGitDriver git,
            RepositoryData repository,
            IReadOnlyCollection <PackageUpdateSet> updates,
            NuGetSources sources,
            SettingsContainer settings)
        {
            int totalCount = 0;

            try
            {
                var groups = UpdateConsolidator.Consolidate(updates,
                                                            settings.UserSettings.ConsolidateUpdatesInSinglePullRequest);

                foreach (var updateSets in groups)
                {
                    var updatesMade = await MakeUpdatePullRequests(
                        git, repository,
                        sources, settings, updateSets);

                    totalCount += updatesMade;
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Updates failed", ex);
            }

            return(totalCount);
        }
        public void WhenOneItemIsNotConsolidated()
        {
            var items = PackageUpdates.MakeUpdateSet("foo")
                        .InList();

            var output = UpdateConsolidator.Consolidate(items, false);

            var listOfLists = output.ToList();

            // one list, containing all the items
            Assert.That(listOfLists.Count, Is.EqualTo(1));
            Assert.That(listOfLists[0].Count, Is.EqualTo(1));
        }
        public void WhenItemsAreConsolidated()
        {
            var items = new List <PackageUpdateSet>
            {
                PackageUpdates.MakeUpdateSet("foo"),
                PackageUpdates.MakeUpdateSet("bar")
            };

            var output = UpdateConsolidator.Consolidate(items, true);

            var listOfLists = output.ToList();

            // one list, containing all the items
            Assert.That(listOfLists.Count, Is.EqualTo(1));
            Assert.That(listOfLists[0].Count, Is.EqualTo(2));
        }
Example #4
0
        public async Task <int> MakeUpdatePullRequests(
            IGitDriver git,
            RepositoryData repository,
            IReadOnlyCollection <PackageUpdateSet> updates,
            NuGetSources sources,
            SettingsContainer settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (git == null)
            {
                throw new ArgumentNullException(nameof(git));
            }

            if (repository == null)
            {
                throw new ArgumentNullException(nameof(repository));
            }

            int totalCount = 0;

            try
            {
                var groups = UpdateConsolidator.Consolidate(updates,
                                                            settings.UserSettings.ConsolidateUpdatesInSinglePullRequest);

                foreach (var updateSets in groups)
                {
                    var updatesMade = await MakeUpdatePullRequests(
                        git, repository,
                        sources, settings, updateSets);

                    totalCount += updatesMade;
                }
            }
#pragma warning disable CA1031
            catch (Exception ex)
#pragma warning restore CA1031
            {
                _logger.Error("Updates failed", ex);
            }

            return(totalCount);
        }
        public void WhenItemsAreNotConsolidated()
        {
            var items = new List <PackageUpdateSet>
            {
                PackageUpdates.MakeUpdateSet("foo"),
                PackageUpdates.MakeUpdateSet("bar")
            };

            var output = UpdateConsolidator.Consolidate(items, false);

            var listOfLists = output.ToList();

            // two lists, each containing 1 item
            Assert.That(listOfLists.Count, Is.EqualTo(2));
            Assert.That(listOfLists.SelectMany(x => x).Count(), Is.EqualTo(2));
            Assert.That(listOfLists[0].Count, Is.EqualTo(1));
            Assert.That(listOfLists[1].Count, Is.EqualTo(1));
        }
Example #6
0
        public async Task <(int UpdatesMade, bool ThresholdReached)> MakeUpdatePullRequests(
            IGitDriver git,
            RepositoryData repository,
            IReadOnlyCollection <PackageUpdateSet> updates,
            NuGetSources sources,
            SettingsContainer settings
            )
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (git == null)
            {
                throw new ArgumentNullException(nameof(git));
            }

            if (repository == null)
            {
                throw new ArgumentNullException(nameof(repository));
            }

            var openPrs = await _collaborationFactory.CollaborationPlatform.GetNumberOfOpenPullRequests(
                repository.Pull.Owner,
                repository.Pull.Name
                );

            var allowedPrs = settings.UserSettings.MaxOpenPullRequests;

            if (openPrs >= allowedPrs)
            {
                _logger.Normal("Number of open pull requests equals or exceeds allowed number of open pull requests.");
                return(0, true);
            }

            int totalCount = 0;

            var groups = UpdateConsolidator.Consolidate(updates,
                                                        settings.UserSettings.ConsolidateUpdatesInSinglePullRequest);

            foreach (var updateSets in groups)
            {
                var(updatesMade, pullRequestCreated) = await MakeUpdatePullRequests(
                    git, repository,
                    sources, settings, updateSets);

                totalCount += updatesMade;

                if (pullRequestCreated)
                {
                    openPrs++;
                }

                if (openPrs == allowedPrs)
                {
                    return(totalCount, true);
                }
            }

            return(totalCount, false);
        }