Add a flag for evidence trackers that allows to disable/enable ignoring the test files

This commit is contained in:
standash 2017-12-07 20:40:55 +01:00
parent 911f22334b
commit debe8e21ab
9 changed files with 51 additions and 10 deletions

View File

@ -12,8 +12,10 @@ public abstract class AbstractEvidenceTracker {
protected Set<Changes> changes; protected Set<Changes> changes;
protected Set<String> commits = new LinkedHashSet<>(); protected Set<String> commits = new LinkedHashSet<>();
protected Set<String> restOfCommits = new LinkedHashSet<>(); protected Set<String> restOfCommits = new LinkedHashSet<>();
protected boolean ignoreChangesToTests;
public AbstractEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public AbstractEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
this.ignoreChangesToTests = ignoreChangesToTests;
this.fixedRevision = fixedRev; this.fixedRevision = fixedRev;
this.repoPath = wrapper.getBasePath(); this.repoPath = wrapper.getBasePath();
this.repoWrapper = wrapper; this.repoWrapper = wrapper;
@ -26,6 +28,10 @@ public abstract class AbstractEvidenceTracker {
this.changes = repoWrapper.inferChangesFromDiff(initDiff, vulnRevision, fixedRevision); this.changes = repoWrapper.inferChangesFromDiff(initDiff, vulnRevision, fixedRevision);
} }
public AbstractEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
this(wrapper, fixedRev, true);
}
public RepoWrapper getRepoWrapper() { public RepoWrapper getRepoWrapper() {
return this.repoWrapper; return this.repoWrapper;
} }
@ -42,9 +48,16 @@ public abstract class AbstractEvidenceTracker {
protected Set<Changes> filterNonJavaChanges(Set<Changes> changes) { protected Set<Changes> filterNonJavaChanges(Set<Changes> changes) {
Set<Changes> filteredChanges = new HashSet<>(); Set<Changes> filteredChanges = new HashSet<>();
for (Changes change : changes) { for (Changes change : changes) {
if (!change.getPath().endsWith(".java") || change.getPath().toLowerCase().contains("test")) { // ignore non-Java files
if (!change.getPath().endsWith(".java")) {
filteredChanges.add(change); filteredChanges.add(change);
} }
else {
// ignore tests if the corresponding setting is set
if (ignoreChangesToTests && change.getPath().toLowerCase().contains("test")) {
filteredChanges.add(change);
}
}
this.repoWrapper.filterCommentsAndBlanks(change.getDeletions()); this.repoWrapper.filterCommentsAndBlanks(change.getDeletions());
this.repoWrapper.filterCommentsAndBlanks(change.getAdditions()); this.repoWrapper.filterCommentsAndBlanks(change.getAdditions());
} }

View File

@ -11,7 +11,11 @@ import java.util.Set;
public class DeletionVulnerabilityEvidenceTracker extends VulnerabilityEvidenceTracker { public class DeletionVulnerabilityEvidenceTracker extends VulnerabilityEvidenceTracker {
public DeletionVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public DeletionVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
}
public DeletionVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
} }
@Override @Override

View File

@ -12,9 +12,12 @@ import java.util.Set;
public class EnhancedDeletionVulnerabilityEvidenceTracker extends DeletionVulnerabilityEvidenceTracker{ public class EnhancedDeletionVulnerabilityEvidenceTracker extends DeletionVulnerabilityEvidenceTracker{
public EnhancedDeletionVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public EnhancedDeletionVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
} }
public EnhancedDeletionVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
}
@Override @Override
protected Set<VulnerabilityEvidence> getInitialVulnerabilityEvidence(Changes changes) throws Exception { protected Set<VulnerabilityEvidence> getInitialVulnerabilityEvidence(Changes changes) throws Exception {

View File

@ -15,7 +15,11 @@ public class FixStatisticsVulnerabilityEvidenceTracker extends VulnerabilityEvid
private int touchedMethods = 0; private int touchedMethods = 0;
public FixStatisticsVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public FixStatisticsVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
}
public FixStatisticsVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
} }
@Override @Override

View File

@ -12,7 +12,11 @@ import java.util.Set;
public class PatchedMethodBodyTracker extends VulnerabilityEvidenceTracker { public class PatchedMethodBodyTracker extends VulnerabilityEvidenceTracker {
public PatchedMethodBodyTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public PatchedMethodBodyTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
}
public PatchedMethodBodyTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
} }
@Override @Override

View File

@ -11,7 +11,11 @@ import java.util.Set;
public class SliceDecayVulnerabilityEvidenceTracker extends SliceVulnerabilityEvidenceTracker { public class SliceDecayVulnerabilityEvidenceTracker extends SliceVulnerabilityEvidenceTracker {
public SliceDecayVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public SliceDecayVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
}
public SliceDecayVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
} }
@Override @Override

View File

@ -14,7 +14,11 @@ import java.util.TreeMap;
public class SliceVulnerabilityEvidenceTracker extends VulnerabilityEvidenceTracker { public class SliceVulnerabilityEvidenceTracker extends VulnerabilityEvidenceTracker {
public SliceVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public SliceVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
}
public SliceVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
} }
@Override @Override

View File

@ -13,7 +13,11 @@ public abstract class VulnerabilityEvidenceTracker extends AbstractEvidenceTrack
protected Map<String, Set<VulnerabilityEvidence>> evidences = new LinkedHashMap<String, Set<VulnerabilityEvidence>>(); protected Map<String, Set<VulnerabilityEvidence>> evidences = new LinkedHashMap<String, Set<VulnerabilityEvidence>>();
public VulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { public VulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception {
super(wrapper, fixedRev); super(wrapper, fixedRev, true);
}
public VulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev, boolean ignoreChangesToTests) throws Exception {
super(wrapper, fixedRev, ignoreChangesToTests);
} }
@Override @Override

View File

@ -43,7 +43,8 @@ public class VulnerabilityEvidenceTrackerFactory {
break; break;
case "fixstatisticsvulnerabilityevidencetracker": case "fixstatisticsvulnerabilityevidencetracker":
vulnerabilityEvidenceTracker = new FixStatisticsVulnerabilityEvidenceTracker(wrapper, fixedRev); // include also commits where only tests have been changed
vulnerabilityEvidenceTracker = new FixStatisticsVulnerabilityEvidenceTracker(wrapper, fixedRev, false);
break; break;
default: default: