예제 #1
0
        public async Task <int> Run(SettingsContainer settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            _logger.Detailed($"{Now()}: Started");
            _folderFactory.DeleteExistingTempDirs();

            var user = await _collaborationFactory.CollaborationPlatform.GetCurrentUser();

            var credentials = new GitUsernamePasswordCredentials
            {
                Username = user.Login,
                Password = _collaborationFactory.Settings.Token
            };

            var repositories = await _collaborationFactory.RepositoryDiscovery.GetRepositories(settings.SourceControlServerSettings);

            var reposUpdated = 0;

            foreach (var repository in repositories)
            {
                if (reposUpdated >= settings.UserSettings.MaxRepositoriesChanged)
                {
                    _logger.Detailed($"Reached max of {reposUpdated} repositories changed");
                    break;
                }

                var updatesInThisRepo = await _repositoryEngine.Run(repository,
                                                                    credentials, settings, user);

                if (updatesInThisRepo > 0)
                {
                    reposUpdated++;
                }
            }

            if (reposUpdated > 1)
            {
                _logger.Detailed($"{reposUpdated} repositories were updated");
            }

            _logger.Detailed($"Done at {Now()}");
            return(reposUpdated);
        }
예제 #2
0
        public async Task <int> Run(SettingsContainer settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            _logger.Detailed($"{Now()}: Started");
            _folderFactory.DeleteExistingTempDirs();

            var user = await _collaborationFactory.CollaborationPlatform.GetCurrentUser();

            var credentials = new GitUsernamePasswordCredentials
            {
                Username = user.Login,
                Password = _collaborationFactory.Settings.Token
            };

            var repositories = await _collaborationFactory.RepositoryDiscovery.GetRepositories(settings.SourceControlServerSettings);

            var reposUpdated = 0;

            (bool Happened, Exception Value)unhandledEx = (false, null);

            foreach (var repository in repositories)
            {
                if (reposUpdated >= settings.UserSettings.MaxRepositoriesChanged)
                {
                    _logger.Detailed($"Reached max of {reposUpdated} repositories changed");
                    break;
                }
                try
                {
                    var updatesInThisRepo = await _repositoryEngine.Run(repository,
                                                                        credentials, settings, user);

                    if (updatesInThisRepo > 0)
                    {
                        reposUpdated++;
                    }
                }
#pragma warning disable CA1031
                catch (Exception ex)
#pragma warning restore CA1031
                {
                    _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
                    SetOrUpdateUnhandledException(ref unhandledEx, ex);
                }
            }

            if (reposUpdated > 1)
            {
                _logger.Detailed($"{reposUpdated} repositories were updated");
            }

            _logger.Detailed($"Done at {Now()}");

            ThrowIfUnhandledException(unhandledEx);

            return(reposUpdated);
        }