public void RebuildSince(DateTime? since, Action<string> reportProgress)
{
try
{
var buildStatuses = _sosDb.ReadAll();
var sortedBuildStatuses = buildStatuses
.Where(buildStatus => since == null || buildStatus.StartedTime > since)
.OrderByDescending(buildStatus => buildStatus.LocalStartTime)
.ToList();
var totalBuilds = sortedBuildStatuses.Count;
var rulesEngine = new RulesEngine(_settings)
{
DisableSosOnline = true,
DisableWritingToSosDb = true
};
int i = 0;
foreach (var buildStatus in sortedBuildStatuses)
{
rulesEngine.ExecuteNewBuilds(new List<BuildStatus> {buildStatus});
if (i%10 == 0)
{
reportProgress(string.Format("Processing {0}/{1}", i, totalBuilds));
}
i++;
}
_settings.Save();
reportProgress("Completed reset successfully");
}
catch (Exception ex)
{
_log.Error("Error in sync", ex);
reportProgress("Error, check the logs. " + ex.Message);
}
}