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);
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); })); }