コード例 #1
0
        public async Task <int> Run(
            IGitDriver git,
            RepositoryData repository,
            SettingsContainer settings)
        {
            GitInit(git, repository);

            var userSettings = settings.UserSettings;

            var sources = _nugetSourcesReader.Read(git.WorkingFolder, userSettings.NuGetSources);

            var updates = await _updateFinder.FindPackageUpdateSets(
                git.WorkingFolder, sources, userSettings.AllowedChange);

            _reporter.Report(
                userSettings.OutputDestination,
                userSettings.OutputFormat,
                repository.Pull.Name,
                userSettings.OutputFileName,
                updates);

            if (updates.Count == 0)
            {
                _logger.Minimal("No potential updates found. Well done. Exiting.");
                return(0);
            }

            var targetUpdates = await _updateSelection.SelectTargets(
                repository.Push, updates, settings.PackageFilters);

            return(await DoTargetUpdates(git, repository, targetUpdates,
                                         sources, settings));
        }
コード例 #2
0
        public async Task <int> Run(
            IGitDriver git,
            RepositoryData repository,
            SettingsContainer settings)
        {
            if (repository == null)
            {
                throw new ArgumentNullException(nameof(repository));
            }

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

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

            if (!repository.IsLocalRepo)
            {
                await GitInit(git, repository);
            }

            var userSettings = settings.UserSettings;

            var sources = _nugetSourcesReader.Read(settings.WorkingFolder ?? git.WorkingFolder, userSettings.NuGetSources);

            var updates = await _updateFinder.FindPackageUpdateSets(
                settings.WorkingFolder ?? git.WorkingFolder,
                sources,
                userSettings.AllowedChange,
                userSettings.UsePrerelease,
                settings.PackageFilters?.Includes,
                settings.PackageFilters?.Excludes);

            _reporter.Report(
                userSettings.OutputDestination,
                userSettings.OutputFormat,
                repository.Pull.Name,
                userSettings.OutputFileName,
                updates);

            if (updates.Count == 0)
            {
                _logger.Minimal("No potential updates found. Well done. Exiting.");
                return(0);
            }

            var targetUpdates = _updateSelection.SelectTargets(
                repository.Push,
                updates,
                settings.PackageFilters);

            return(await DoTargetUpdates(git, repository, targetUpdates,
                                         sources, settings));
        }
コード例 #3
0
        private Identity GetUserIdentity(User user)
        {
            if (string.IsNullOrWhiteSpace(user?.Name))
            {
                _logger.Minimal("User name missing from profile, falling back to .gitconfig");
                return(null);
            }
            if (string.IsNullOrWhiteSpace(user?.Email))
            {
                _logger.Minimal("Email missing from profile, falling back to .gitconfig");
                return(null);
            }

            return(new Identity(user.Name, user.Email));
        }
コード例 #4
0
        private Identity GetUserIdentity(Account githubUser)
        {
            if (string.IsNullOrWhiteSpace(githubUser?.Name))
            {
                _logger.Minimal("GitHub user name missing from profile, falling back to .gitconfig");
                return(null);
            }
            if (string.IsNullOrWhiteSpace(githubUser?.Email))
            {
                _logger.Minimal("GitHub public email missing from profile, falling back to .gitconfig");
                return(null);
            }

            return(new Identity(githubUser.Name, githubUser.Email));
        }
コード例 #5
0
ファイル: TopologicalSort.cs プロジェクト: area55git/NuKeeper
        private void Visit(SortItemData item)
        {
            if (_cycleFound)
            {
                return;
            }

            if (item.Mark == Mark.Permanent)
            {
                return;
            }

            if (item.Mark == Mark.Temporary)
            {
                _logger.Minimal($"Cannot sort packages by dependencies, cycle found at package {item.PackageId}");
                _cycleFound = true;
                return;
            }

            item.Mark = Mark.Temporary;
            var nodesDependedOn = item.Dependencies
                                  .Select(dep => _data.FirstOrDefault(i => i.PackageId == dep.Id))
                                  .Where(dep => dep != null);

            foreach (var dep in nodesDependedOn)
            {
                Visit(dep);
            }

            item.Mark = Mark.Permanent;
            _sortedList.Add(item.PackageUpdateSet);
        }
コード例 #6
0
        public async Task ApplyAnUpdate(
            IReadOnlyCollection <PackageUpdateSet> updates,
            NuGetSources sources)
        {
            if (!updates.Any())
            {
                return;
            }

            var filtered = await _selection
                           .Filter(updates, p => Task.FromResult(true));

            if (!filtered.Any())
            {
                _logger.Detailed("All updates were filtered out");
                return;
            }

            var candidate = filtered.First();

            var reporter = new ConsoleReporter();

            _logger.Minimal("Updating " + reporter.Describe(candidate));

            await _updateRunner.Update(candidate, sources);
        }
コード例 #7
0
        private void Visit(SortItemData <T> item)
        {
            if (_cycleFound)
            {
                return;
            }

            if (item.Mark == Mark.Permanent)
            {
                return;
            }

            if (item.Mark == Mark.Temporary)
            {
                _logger.Minimal($"Cannot sort by dependencies, cycle found at item {item}");
                _cycleFound = true;
                return;
            }

            item.Mark = Mark.Temporary;

            foreach (var dep in NodesDependedOn(item))
            {
                Visit(dep);
            }

            item.Mark = Mark.Permanent;
            _sortedList.Add(item.Item);
        }
コード例 #8
0
        public async Task <int> Run(
            IGitDriver git,
            RepositoryData repository,
            SettingsContainer settings)
        {
            GitInit(git, repository);

            var sources = _nugetSourcesReader.Read(git.WorkingFolder, settings.UserSettings.NuGetSources);

            var updates = await _updateFinder.FindPackageUpdateSets(
                git.WorkingFolder, sources, settings.UserSettings.AllowedChange);

            _logger.Detailed($"Report mode is {settings.UserSettings.ReportMode}");
            switch (settings.UserSettings.ReportMode)
            {
            case ReportMode.Off:
                break;

            case ReportMode.On:
                // report and continue
                _availableUpdatesReporter.Report(repository.Pull.Name, updates);
                break;

            case ReportMode.ReportOnly:
                // report and exit
                _availableUpdatesReporter.Report(repository.Pull.Name, updates);
                _logger.Normal("Exiting after reports only");
                return(0);

            default:
                throw new Exception($"Unknown report mode: '{settings.UserSettings.ReportMode}'");
            }

            if (updates.Count == 0)
            {
                _logger.Minimal("No potential updates found. Well done. Exiting.");
                return(0);
            }

            var targetUpdates = await _updateSelection.SelectTargets(
                repository.Push, updates, settings.PackageFilters);

            return(await DoTargetUpdates(git, repository, targetUpdates,
                                         sources, settings));
        }
コード例 #9
0
        private async Task ApplyUpdates(IReadOnlyCollection <PackageUpdateSet> updates, IFolder workingFolder, NuGetSources sources)
        {
            await _solutionsRestore.CheckRestore(updates, workingFolder, sources);

            foreach (var update in updates)
            {
                _logger.Minimal("Updating " + Description.ForUpdateSet(update));

                await _updateRunner.Update(update, sources);
            }
        }
コード例 #10
0
        private async Task ApplyUpdates(IReadOnlyCollection <PackageUpdateSet> updates, IFolder workingFolder, NuGetSources sources)
        {
            await _solutionsRestore.CheckRestore(updates, workingFolder, sources);

            foreach (var update in updates)
            {
                var reporter = new ConsoleReporter();
                _logger.Minimal("Updating " + reporter.Describe(update));

                await _updateRunner.Update(update, sources);
            }
        }
コード例 #11
0
        public static void Log(this INuKeeperLogger logger, LogData data)
        {
            if (!string.IsNullOrWhiteSpace(data.Terse))
            {
                logger.Minimal(data.Terse);
            }

            if (!string.IsNullOrWhiteSpace(data.Info))
            {
                logger.Normal(data.Info);
            }
        }
コード例 #12
0
 public IReadOnlyCollection <FileInfo> Find(string pattern)
 {
     try
     {
         return(_root
                .EnumerateFiles(pattern, SearchOption.AllDirectories)
                .ToList());
     }
     catch (Exception ex)
     {
         _logger.Minimal(ex.Message);
         return(new List <FileInfo>());
     }
 }
コード例 #13
0
 public IReadOnlyCollection <IFile> Find(string pattern)
 {
     try
     {
         return(_root
                .EnumerateFiles(pattern, SearchOption.AllDirectories)
                .Select(f => new FileOnDisk(f))
                .ToList());
     }
     catch (IOException ex)
     {
         _logger.Minimal(ex.Message);
         return(new List <IFile>());
     }
 }
コード例 #14
0
        private void LogPackageCounts(int candidates, int filtered, int capped)
        {
            var message = $"Selection of package updates: {candidates} candidates";

            if (filtered < candidates)
            {
                message += $", filtered to {filtered}";
            }

            if (capped < filtered)
            {
                message += $", capped at {capped}";
            }

            _logger.Minimal(message);
        }
コード例 #15
0
        public static void Log(this INuKeeperLogger logger, LogData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

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

            if (!string.IsNullOrWhiteSpace(data.Terse))
            {
                logger.Minimal(data.Terse);
            }

            if (!string.IsNullOrWhiteSpace(data.Info))
            {
                logger.Normal(data.Info);
            }
        }
コード例 #16
0
ファイル: PackageUpdater.cs プロジェクト: GeradeDev/NuKeeper
        public async Task <bool> MakeUpdatePullRequest(
            IGitDriver git,
            RepositoryData repository,
            PackageUpdateSet updateSet,
            NuGetSources sources,
            SourceControlServerSettings serverSettings)
        {
            try
            {
                _logger.Minimal(UpdatesLogger.OldVersionsToBeUpdated(updateSet));

                git.Checkout(repository.DefaultBranch);

                // branch
                var branchName = BranchNamer.MakeName(updateSet);
                _logger.Detailed($"Using branch name: '{branchName}'");
                git.CheckoutNewBranch(branchName);

                await _updateRunner.Update(updateSet, sources);

                var commitMessage = CommitWording.MakeCommitMessage(updateSet);
                git.Commit(commitMessage);

                git.Push("nukeeper_push", branchName);

                var prTitle = CommitWording.MakePullRequestTitle(updateSet);
                await MakeGitHubPullRequest(updateSet, repository, prTitle,
                                            branchName, serverSettings.Labels);

                git.Checkout(repository.DefaultBranch);
                return(true);
            }
            catch (Exception ex)
            {
                _logger.Error("Update failed", ex);
                return(false);
            }
        }