public void RepositorySnapshotBuilderBuildsExpectedStructureFromArguments()
        {
            var args = new RepositorySnapshotBuilderArguments(string.Empty,
                                                              DirPath,
                                                              "src",
                                                              new[] { ".cs" },
                                                              "lcov.info",
                                                              "hash",
                                                              default(DateTime),
                                                              MockRepo.CreateDiskIOWrapperMock()
                                                              .Object,
                                                              Mock.Of <IPathValidator>());

            var snapshot = args.Build();

            snapshot.Files
            .Should()
            .HaveCount(2);
            snapshot.AtHash.Match(x => x, () => string.Empty)
            .Should()
            .Be("hash");
            snapshot.CommitCreationDate.Match(x => x, DateTime.Today)
            .Should()
            .Be(default);
예제 #2
0
        public Repository Enrich(Repository repository,
                                 RepositoryStatsEnricherArguments args)
        {
            var initialSnapshotId = string.Empty;
            var repoArgs          = new RepositorySnapshotBuilderArguments(initialSnapshotId,
                                                                           args.RepoPath,
                                                                           args.SourceRoot,
                                                                           args.SourceExtensions,
                                                                           args.CoverageOutputLocation,
                                                                           Option <string> .None,
                                                                           Option <DateTime> .None,
                                                                           _ioWrapper,
                                                                           _pathValidator);
            var sampleInterval = (args.LastCommitToSample - args.FirstCommitToSample) / (args.NumberOfSamples - 1);

            return(Enumerable
                   .Range(0, args.NumberOfSamples - 1) // -1 so that last sample comes from args.LastCommitToSample
                   .Select(i => args.FirstCommitToSample + (i * sampleInterval))
                   .Append(args.LastCommitToSample)
                   .Select(commitNo => _gitCommands.GetHashForNthCommit(args.RepoPath, commitNo))
                   .ToList() // force eval
                   .Fold(repository,
                         (repo, hash) =>
            {
                _gitCommands.Checkout(hash, args.RepoPath);
                _executor.Execute(args.CoverageCommand, string.Empty, args.RepoPath);
                var commitCreationDate = _gitCommands.DateOfLatestCommitOnBranch(args.RepoPath);

                return repoArgs.With(initialSnapshotId, hash, commitCreationDate)
                .Build()
                .Apply(ConvertCoverageResults)
                .Apply(EnrichWithCoverage)
                .Apply(x => EnrichWithGitStats(x, GitStatGranularity.File))
                .Apply(repo.AddSnapshot);
            }));
        }