private void Rebuild(Checkpoint from, Checkpoint to, IEnumerable <IProjection> rawProjections) { var projections = rawProjections.Select(e => new ProjectionWrapper(e, log)).ToArray(); if (!projections.Any()) { return; } if (from.IsUndefined) { foreach (var projection in projections) { projection.Clear(); } } DateTime start; if (from.IsUndefined) { start = new DateTime(2013, 1, 1); } else { start = from.CommitStampProcessed.Value.AddSeconds(-2); } foreach (var projection in projections) { projection.Begin(); } var commits = historyReader.Read(start, DateTime.UtcNow); commits = FilterByCheckpoints(commits, from, to); commits = PauseAware(commits, from); commits = ShowLogs(commits, from, to, projections); foreach (var commit in commits) { RebuildCommit(commit, projections); } foreach (var projection in projections) { projection.Flush(); } }