private static void Main(string[] args) { try { var commitIds = ParseCommitIds(args); using (var repo = new Repository(".")) { var mergeBaseCommit = repo.ResolveMergeBaseCommit(commitIds); Console.WriteLine("Using " + mergeBaseCommit + " as merge base."); var patch = repo.Diff.Compare<Patch>(mergeBaseCommit.Tree, repo.Head.Tip.Tree); var valid = patch.Where(HasValidChangeStatus).ToList(); var specs = valid.Where(IsSpec).ToList(); var testable = valid.Where(IsTestable).ToList(); var testableClassesMissingSpecFiles = testable.Where(testablePatchEntryChange => GetPossibleSpecs(testablePatchEntryChange, specs).Count < 1).ToList(); var testableClassesPossiblyMissingSpecs = testable.Where(testablePatchEntryChange => !testableClassesMissingSpecFiles.Contains(testablePatchEntryChange) && !IsTested(testablePatchEntryChange, GetPossibleSpecs(testablePatchEntryChange, specs))); Console.WriteLine(); Console.WriteLine("All changes"); patch.ForEach(patchEntryChanges => Console.WriteLine(patchEntryChanges.Status + " -> " + patchEntryChanges.Path)); Console.WriteLine(); Console.WriteLine("Changes with valid change status of " + string.Join(", ", ValidChangeStatuses.ToList().ConvertAll(validChangeStatus => validChangeStatus.ToString()))); valid.ForEach(patchEntryChanges => Console.WriteLine(patchEntryChanges.Status + " -> " + patchEntryChanges.Path)); Console.WriteLine(); Console.WriteLine("testable class changes"); testable.ForEach(patchEntryChanges => Console.WriteLine(patchEntryChanges.Status + " -> " + patchEntryChanges.Path)); Console.WriteLine(); Console.WriteLine("specs found"); specs.ForEach(patchEntryChanges => Console.WriteLine(patchEntryChanges.Status + " -> " + patchEntryChanges.Path)); Console.WriteLine(); Console.WriteLine("testable classes with missing specs"); testableClassesMissingSpecFiles.ForEach(patchEntryChanges => Console.WriteLine(patchEntryChanges.Status + " -> " + patchEntryChanges.Path)); Console.WriteLine(); Console.WriteLine("testable classes with possibly missing specs"); testableClassesPossiblyMissingSpecs.ForEach(patchEntryChanges => Console.WriteLine(patchEntryChanges.Status + " -> " + patchEntryChanges.Path)); } } catch (Exception ex) { Console.WriteLine(ex); } }