Skip to content

Commit

Permalink
Remove patch ranking code
Browse files Browse the repository at this point in the history
Signed-off-by: André Silva <[email protected]>
  • Loading branch information
andre15silva committed Apr 13, 2021
1 parent 957a163 commit 5f32d22
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 174 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,6 @@ public static void registerCommonArgs(JSAP jsap) throws JSAPException {
// --sequencerRepair
jsap.registerParameter(LauncherUtils.defineArgSequencerRepairMode());

// --patchRanking
jsap.registerParameter(LauncherUtils.defineArgPatchRanking());
// --patchRankingMode
jsap.registerParameter(LauncherUtils.defineArgPatchRankingMode());

// --patchClassification
jsap.registerParameter(LauncherUtils.defineArgPatchClassification());
// --patchClassificationMode
Expand Down Expand Up @@ -245,8 +240,6 @@ public static void initCommonConfig(RepairnatorConfig config, JSAPResult argumen
config.setNPEScope(LauncherUtils.getArgNPEScope(arguments));
config.setNPERepairStrategy(LauncherUtils.getArgNPERepairStrategy(arguments));

config.setPatchRankingMode(LauncherUtils.getArgPatchRankingMode(arguments));
config.setPatchRanking(LauncherUtils.getArgPatchRanking(arguments));
config.setPatchClassificationMode(LauncherUtils.getArgPatchClassificationMode(arguments));
config.setPatchClassification(LauncherUtils.getArgPatchClassification(arguments));
config.setPatchFiltering(LauncherUtils.getArgPatchFiltering(arguments));
Expand Down Expand Up @@ -1037,31 +1030,6 @@ public static RepairnatorConfig.PATCH_FILTERING_MODE getArgPatchFilteringMode(JS
return RepairnatorConfig.PATCH_FILTERING_MODE.valueOf(arguments.getString("patchFilteringMode"));
}

public static Switch defineArgPatchRanking() {
Switch sw = new Switch("patchRanking");
sw.setLongFlag("patchRanking");
sw.setDefault("false");
sw.setHelp("Rank repair patches using the defined mode.");
return sw;
}

public static boolean getArgPatchRanking(JSAPResult arguments) {
return arguments.getBoolean("patchRanking");
}

public static FlaggedOption defineArgPatchRankingMode() {
FlaggedOption opt = new FlaggedOption("patchRankingMode");
opt.setLongFlag("patchRankingMode");
opt.setStringParser(JSAP.STRING_PARSER);
opt.setDefault(RepairnatorConfig.PATCH_RANKING_MODE.NONE.name());
opt.setHelp("Possible string values NONE, OVERFITTING.");
return opt;
}

public static RepairnatorConfig.PATCH_RANKING_MODE getArgPatchRankingMode(JSAPResult arguments) {
return RepairnatorConfig.PATCH_RANKING_MODE.valueOf(arguments.getString("patchRankingMode"));
}

public static void checkPushUrlArg(JSAP jsap, JSAPResult arguments, LauncherType launcherType) {
if (getArgPushUrl(arguments) != null) {
if (!Utils.matchesGithubRepoUrl(getArgPushUrl(arguments))) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,6 @@ public String getKlass() {
}
}

public enum PATCH_RANKING_MODE {
NONE,
OVERFITTING
}

public enum PATCH_CLASSIFICATION_MODE {
NONE,
ODS
Expand Down Expand Up @@ -140,12 +135,10 @@ public enum SORALD_REPAIR_MODE {
private String npeScope;
private String npeRepairStrategy;

private PATCH_RANKING_MODE patchRankingMode;
private PATCH_CLASSIFICATION_MODE patchClassificationMode;
private PATCH_FILTERING_MODE patchFilteringMode;
private boolean patchClassification;
private boolean patchFiltering;
private boolean patchRanking;

// Dockerpool
private String dockerImageName;
Expand Down Expand Up @@ -886,7 +879,6 @@ public String toString() {
", mavenHome=" + mavenHome +
", localMavenRepository=" + localMavenRepository +
", noTravisRepair=" + noTravisRepair +
", rankPatches=" + patchRankingMode +
", jTravisEndpoint=" + jTravisEndpoint +
", travisToken=" + travisToken +
'}';
Expand Down Expand Up @@ -994,22 +986,6 @@ public void setODSPath(String ODSPath) {
this.ODSPath = ODSPath;
}

public PATCH_RANKING_MODE getPatchRankingMode() {
return patchRankingMode;
}

public void setPatchRankingMode(PATCH_RANKING_MODE patchRankingMode) {
this.patchRankingMode = patchRankingMode;
}

public boolean isPatchRanking() {
return patchRanking;
}

public void setPatchRanking(boolean patchRanking) {
this.patchRanking = patchRanking;
}

public PATCH_CLASSIFICATION_MODE getPatchClassificationMode() {
return patchClassificationMode;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package fr.inria.spirals.repairnator.process.inspectors;

import com.google.gson.JsonElement;
import fr.inria.spirals.repairnator.config.RepairnatorConfig;
import fr.inria.spirals.repairnator.config.RepairnatorConfig.PATCH_RANKING_MODE;
import fr.inria.spirals.repairnator.process.inspectors.properties.Properties;
import fr.inria.spirals.repairnator.process.inspectors.properties.features.Features;
import fr.inria.spirals.repairnator.process.inspectors.properties.tests.FailureDetail;
import fr.inria.spirals.repairnator.process.step.StepStatus;
import fr.inria.spirals.repairnator.process.testinformation.FailureLocation;
import fr.inria.spirals.repairnator.states.PushState;
import org.apache.maven.model.Plugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.apache.maven.model.Plugin;

import java.io.File;
import java.net.URL;
import java.util.*;
Expand Down Expand Up @@ -276,23 +273,6 @@ public List<RepairPatch> getAllPatches() {
return allPatches;
}

public List<RepairPatch> getRankedPatches() {
return getRankedPatches(Features.P4J);
}

protected List<RepairPatch> getRankedPatches(Features features) {
List<RepairPatch> allPatches = getAllPatches();
PATCH_RANKING_MODE patchRankingMode = RepairnatorConfig.getInstance().getPatchRankingMode();

switch (patchRankingMode){
case OVERFITTING:
allPatches.sort(RepairPatch.rankByOverfittingWithFeatures(features));
break;
}
return allPatches;
}


protected List<RepairPatch> getCorrectnessLabeledPatches(Features features, String buildId) {
List<RepairPatch> allPatches = getAllPatches();
return RepairPatch.classifyByODSWithFeatures(allPatches, buildId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

public class RepairPatch {

static final String ODSPath = RepairnatorConfig.getInstance().getODSPath();
protected static Logger log = Logger.getLogger(Thread.currentThread().getName());

/**
Expand Down Expand Up @@ -146,11 +145,6 @@ public int hashCode() {
return Objects.hash(toolname, filePath, diff);
}

// ranking algorithms
public static Comparator<RepairPatch> rankByOverfittingWithFeatures(Features features) {
return (x, y) -> overfittingSort(x, y, features);
}

private static int overfittingSort(RepairPatch patch1, RepairPatch patch2, Features features) { // ascending
double score1 = patch1.getOverfittingScore(features);
double score2 = patch2.getOverfittingScore(features);
Expand All @@ -165,9 +159,11 @@ private static int overfittingSort(RepairPatch patch1, RepairPatch patch2, Featu

// ODS classification
public static List<RepairPatch> classifyByODSWithFeatures(List<RepairPatch> allPatches, String buildId) {
String ODSPath = RepairnatorConfig.getInstance().getODSPath();

File f = new File(ODSPath);
f.mkdir();
f.mkdirs();


int len = allPatches.size();

Expand All @@ -193,8 +189,9 @@ public static List<RepairPatch> classifyByODSWithFeatures(List<RepairPatch> allP
}

private ODSLabel computeODSLabel(int patchId, String buildId) {

ODSLabel label = ODSLabel.UNKNOWN;
String ODSPath = RepairnatorConfig.getInstance().getODSPath();

ODSLabel label = ODSLabel.UNKNOWN;

try {
File buggyFile = new File(filePath);
Expand All @@ -219,7 +216,7 @@ private ODSLabel computeODSLabel(int patchId, String buildId) {

// create a directory to store the patch: "patches/"+buildId+patchId
String buggyClassName = buggyFile.getName().replace(".java", "");
String odsFilesPath = this.ODSPath;
String odsFilesPath = ODSPath;

String patchPath = odsFilesPath + "/" + buildId + "-" + patchId;
Path path = Paths.get(patchPath + '/' + buggyClassName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,15 @@

import com.google.gson.JsonElement;
import fr.inria.coming.codefeatures.RepairnatorFeatures;
import fr.inria.coming.core.engine.git.GITRepositoryInspector;
import fr.inria.spirals.repairnator.config.RepairnatorConfig;
import fr.inria.spirals.repairnator.notifier.PatchNotifier;
import fr.inria.spirals.repairnator.process.git.GitHelper;
import fr.inria.spirals.repairnator.process.inspectors.GitRepositoryProjectInspector;
import fr.inria.spirals.repairnator.process.inspectors.ProjectInspector;
import fr.inria.spirals.repairnator.process.inspectors.JenkinsProjectInspector;
import fr.inria.spirals.repairnator.process.inspectors.RepairPatch;
import fr.inria.spirals.repairnator.process.step.AbstractStep;
import fr.inria.spirals.repairnator.process.step.StepStatus;
import fr.inria.spirals.repairnator.utils.DateUtils;
import fr.inria.spirals.repairnator.utils.Utils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.text.StrSubstitutor;
import org.eclipse.jgit.api.Git;
Expand Down Expand Up @@ -122,7 +119,7 @@ private List<RepairPatch> classifyPatches(List<RepairPatch> patches) {
(gitInspector.getRepoSlug() + "-" + gitInspector.getGitRepositoryIdCommit()).replace("/", "-")
);
} else {
patches = RepairPatch.classifyByODSWithFeatures(patches, this.getInspector().getBuildToBeInspected().getRunId());
patches = RepairPatch.classifyByODSWithFeatures(patches, String.format("%d", this.getInspector().getBuggyBuild().getId()));
}
} else if (mode.equals(RepairnatorConfig.PATCH_CLASSIFICATION_MODE.NONE)) {
this.getLogger().info("Classification mode is NONE so no patch will be classified");
Expand All @@ -132,21 +129,6 @@ private List<RepairPatch> classifyPatches(List<RepairPatch> patches) {
return patches;
}

private List<RepairPatch> rankPatches(List<RepairPatch> patches) {
RepairnatorConfig.PATCH_RANKING_MODE mode = RepairnatorConfig.getInstance().getPatchRankingMode();
this.getLogger().info("Ranking patches with mode " + mode.name());

if (patches.isEmpty()) {
return patches;
} else if (mode.equals(RepairnatorConfig.PATCH_RANKING_MODE.OVERFITTING)) {
this.getLogger().info("Ranking by overfitting score is not supported yet");
} else if (mode.equals(RepairnatorConfig.PATCH_RANKING_MODE.NONE)) {
this.getLogger().info("Ranking mode is NONE so no patch will be ranked");
}

return patches;
}

private List<RepairPatch> filterPatches(List<RepairPatch> patches) {
RepairnatorConfig.PATCH_FILTERING_MODE mode = RepairnatorConfig.getInstance().getPatchFilteringMode();
this.getLogger().info("Filtering " + patches.size() + " patches with mode " + mode.name());
Expand All @@ -172,9 +154,6 @@ protected List<RepairPatch> performPatchAnalysis(List<RepairPatch> patchList) {
if (RepairnatorConfig.getInstance().isPatchClassification()) {
patchList = this.classifyPatches(patchList);
}
if (RepairnatorConfig.getInstance().isPatchRanking()) {
patchList = this.rankPatches(patchList);
}
if (RepairnatorConfig.getInstance().isPatchFiltering()) {
patchList = this.filterPatches(patchList);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,14 +179,6 @@ public void testDefaultArgsLauncher() throws Exception {
assertEquals(defaultNPERepairStrategy, LauncherUtils.getArgNPERepairStrategy(arguments));
assertEquals(defaultNPERepairStrategy, config.getNPERepairStrategy());

// default patch ranking parameters
RepairnatorConfig.PATCH_RANKING_MODE defaultPatchRankingMode = RepairnatorConfig.PATCH_RANKING_MODE.NONE;
assertEquals(defaultPatchRankingMode, LauncherUtils.getArgPatchRankingMode(arguments));
assertEquals(defaultPatchRankingMode, config.getPatchRankingMode());
boolean defaultPatchRanking = false;
assertEquals(defaultPatchRanking, LauncherUtils.getArgPatchRanking(arguments));
assertEquals(defaultPatchRanking, config.isPatchRanking());

// default patch classification parameters
RepairnatorConfig.PATCH_CLASSIFICATION_MODE defaultPatchClassificationMode = RepairnatorConfig.PATCH_CLASSIFICATION_MODE.NONE;
assertEquals(defaultPatchClassificationMode, LauncherUtils.getArgPatchClassificationMode(arguments));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
package fr.inria.spirals.repairnator.process.inspectors;

import fr.inria.coming.changeminer.entity.FinalResult;
import fr.inria.coming.codefeatures.RepairnatorFeatures;
import fr.inria.coming.main.ComingMain;
import fr.inria.coming.utils.CommandSummary;
import fr.inria.coming.codefeatures.RepairnatorFeatures.ODSLabel;
import fr.inria.jtravis.entities.Build;
import fr.inria.spirals.repairnator.BuildToBeInspected;
import fr.inria.spirals.repairnator.process.inspectors.properties.features.Features;
import fr.inria.spirals.repairnator.process.step.repair.NPERepair;
import fr.inria.spirals.repairnator.process.step.repair.nopol.NopolSingleTestRepair;
import fr.inria.spirals.repairnator.process.step.repair.sequencer.SequencerRepair;
import fr.inria.spirals.repairnator.config.RepairnatorConfig;
import fr.inria.spirals.repairnator.process.files.FileHelper;
import fr.inria.spirals.repairnator.process.step.StepStatus;
import fr.inria.spirals.repairnator.process.step.CloneRepository;
import fr.inria.spirals.repairnator.process.step.StepStatus;
import fr.inria.spirals.repairnator.process.step.TestProject;
import fr.inria.spirals.repairnator.process.step.checkoutrepository.CheckoutBuggyBuild;
import fr.inria.spirals.repairnator.process.step.gatherinfo.BuildShouldFail;
import fr.inria.spirals.repairnator.process.step.gatherinfo.GatherTestInformation;
import fr.inria.spirals.repairnator.process.step.paths.ComputeClasspath;
import fr.inria.spirals.repairnator.process.step.paths.ComputeSourceDir;
import fr.inria.spirals.repairnator.process.step.repair.NPERepair;
import fr.inria.spirals.repairnator.process.step.repair.nopol.NopolSingleTestRepair;
import fr.inria.spirals.repairnator.process.utils4tests.Utils4Tests;
import fr.inria.spirals.repairnator.serializer.AbstractDataSerializer;
import fr.inria.spirals.repairnator.states.ScannedBuildStatus;
Expand All @@ -29,14 +24,17 @@
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import fr.inria.coming.codefeatures.RepairnatorFeatures.ODSLabel;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

Expand Down Expand Up @@ -117,50 +115,6 @@ public void testGatheringPatches() throws IOException {
assertThat(inspector.getJobStatus().getToolDiagnostic().get(nopolRepair.getRepairToolName()), notNullValue());
}

@Test
@Ignore
public void testRankingPatches() throws IOException {
long buildId = 564711868; // surli/failingProject build 564711868
Build build = this.checkBuildAndReturn(buildId, false);

tmpDir = Files.createTempDirectory("test_ranking").toFile();
BuildToBeInspected toBeInspected = new BuildToBeInspected(build, null, ScannedBuildStatus.ONLY_FAIL, "");
ProjectInspector inspector = new ProjectInspector(toBeInspected, tmpDir.getAbsolutePath(), null, null);

CloneRepository cloneStep = new CloneRepository(inspector);
NopolSingleTestRepair nopolRepair = new NopolSingleTestRepair();
nopolRepair.setProjectInspector(inspector);
NPERepair npeRepair = new NPERepair();
npeRepair.setProjectInspector(inspector);

RepairnatorConfig.getInstance().setRepairTools(
new HashSet<>(Arrays.asList(nopolRepair.getRepairToolName(), npeRepair.getRepairToolName())));
RepairnatorConfig.getInstance().setPatchRankingMode(RepairnatorConfig.PATCH_RANKING_MODE.OVERFITTING);

cloneStep.addNextStep(new CheckoutBuggyBuild(inspector, true)).addNextStep(new TestProject(inspector))
.addNextStep(new GatherTestInformation(inspector, true, new BuildShouldFail(), false))
.addNextStep(new ComputeClasspath(inspector, true))
.addNextStep(new ComputeSourceDir(inspector, true, false)).addNextStep(nopolRepair)
.addNextStep(npeRepair);
cloneStep.execute();

List<RepairPatch> rankedPatchesP4J = inspector.getJobStatus().getRankedPatches(Features.P4J);
List<RepairPatch> rankedPatchesS4R = inspector.getJobStatus().getRankedPatches(Features.S4R);

// test ranking by P4J overfitting-scores
assertThat(rankedPatchesP4J.get(0).getToolname(), is("NopolSingleTest"));
assertEquals(rankedPatchesP4J.get(0).getOverfittingScore(Features.P4J), -2590, 1);
assertThat(rankedPatchesP4J.get(4).getToolname(), is("NopolSingleTest"));
assertEquals(rankedPatchesP4J.get(4).getOverfittingScore(Features.P4J), -410, 1);

// test ranking by S4R overfitting-scores
assertThat(rankedPatchesS4R.get(0).getToolname(), is("NopolSingleTest"));
assertEquals(rankedPatchesS4R.get(0).getOverfittingScore(Features.S4R), -0.06, 0.001);
assertThat(rankedPatchesS4R.get(1).getToolname(), is("NopolSingleTest"));
assertEquals(rankedPatchesS4R.get(1).getOverfittingScore(Features.S4R), -0.05, 0.001);
}


@Test
public void testODSPatchClassification() throws IOException {
RepairnatorConfig.getInstance().setPatchClassification(true);
Expand Down

0 comments on commit 5f32d22

Please sign in to comment.