@Override public void process(SCMRepository repo, Commit commit, PersistenceMechanism writer) { if (!noKeywordsIn(commit)) return; SCM scm = repo.getScm(); for (Modification modification : commit.getModifications()) { if (modification.wasDeleted()) continue; String fileName = modification.getFileName(); if (!Languages.contains(fileName)) continue; Language lang = Languages.forFile(fileName); if (lang.isTest(fileName)) continue; List<Integer> lines = findLinesToBeBlamedIn(modification); if (!lines.isEmpty()) { bugInFile(modification); } for (Integer buggedLine : lines) { String hash = scm.blame(modification.getNewPath(), commit.getHash(), buggedLine); if (hash == null || hash.isEmpty()) continue; Commit buggedCommit = scm.getCommit(hash); bugInCommit(buggedCommit); } } }
@Override public List<ChangeSet> get(SCM scm) { List<ChangeSet> commits = scm.getChangeSets(); for (ChangeSet cs : commits) { if (cs.getId().equals(commit)) return Arrays.asList(cs); } throw new RuntimeException("commit " + commit + " does not exist"); }
@Test public void should_get_commits_in_range() { range = new Range("2", "4"); ChangeSet c1 = new ChangeSet("1", new GregorianCalendar(2015, Calendar.JANUARY, 23)); ChangeSet c2 = new ChangeSet("2", new GregorianCalendar(2015, Calendar.MARCH, 24)); ChangeSet c3 = new ChangeSet("3", new GregorianCalendar(2015, Calendar.APRIL, 25)); ChangeSet c4 = new ChangeSet("4", new GregorianCalendar(2014, Calendar.APRIL, 25)); ChangeSet c5 = new ChangeSet("5", new GregorianCalendar(2013, Calendar.APRIL, 25)); Mockito.when(scm.getChangeSets()).thenReturn(Arrays.asList(c1, c2, c3, c4, c5)); List<ChangeSet> list = range.get(scm); Assert.assertEquals(3, list.size()); Assert.assertEquals(c2, list.get(0)); Assert.assertEquals(c3, list.get(1)); Assert.assertEquals(c4, list.get(2)); }