public void T5B_Detects_Repository_Fetch()
 {
     Monitor.Expect(() =>
     {
         _cloneB.Fetch();
     },
                    changes => changes >= 1,
                    deletes => deletes == 0);
 }
Exemplo n.º 2
0
        private void FetchNext(object timerState)
        {
            var hasAny = RepositoryInformationAggregator.Repositories?.Any() ?? false;

            if (!hasAny)
            {
                return;
            }

            // sort the repository list alphabetically each time because  ...
            // 1. it's most comprehensive for the user
            // 2. makes sure that no repository is jumped over because the list
            //    of repositories is constantly changed and not sorted in any way in memory.
            //    So we cannot guarantuee that each repository is fetched on each iteration if we do not sort.
            var repositories = RepositoryInformationAggregator.Repositories
                               .OrderBy(r => r.Name)
                               .ToList();

            // temporarily disable the timer to prevent parallel fetch executions
            UpdateBehavior(AutoFetchMode.Off);

            _lastFetchRepository++;

            if (repositories.Count <= _lastFetchRepository)
            {
                _lastFetchRepository = 0;
            }

            var repositoryView = repositories[_lastFetchRepository];

            Console.WriteLine($"Auto-fetching {repositoryView.Name} (index {_lastFetchRepository} of {repositories.Count})");

            repositoryView.IsSynchronizing = true;
            try
            {
                RepositoryWriter.Fetch(repositoryView.Repository);
            }
            catch
            {
                // nothing to see here
            }
            finally
            {
                // re-enable the timer to get to the next fetch
                UpdateBehavior();

                repositoryView.IsSynchronizing = false;
            }
        }