Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c23a7ad

Browse files
committedFeb 8, 2021
BuildMutators handle filtering
- remove the key filtering from the ScenarioLoader outside of the BuildMutators - update existing BuildMutators to return NOOP when key doesn't exist in config, allowing the BuildMutators to be responsible for enabling/disabling functionality. This will allow BuildMutators to work with specific Build types (ie Bazel) or all of them depending on the configuration. Signed-off-by: Alex Beggs <[email protected]>
1 parent c68b1ee commit c23a7ad

7 files changed

+64
-25
lines changed
 

‎src/main/java/org/gradle/profiler/ScenarioLoader.java

-1
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ static List<ScenarioDefinition> loadScenarios(File scenarioFile, InvocationSetti
212212
String title = scenario.hasPath(TITLE) ? scenario.getString(TITLE) : null;
213213

214214
List<BuildMutator> mutators = BUILD_MUTATOR_CONFIGURATORS.entrySet().stream()
215-
.filter(entry -> scenario.hasPath(entry.getKey()))
216215
.map(entry -> entry.getValue().configure(scenario, scenarioName, settings, entry.getKey()))
217216
.filter(mutator -> mutator != BuildMutator.NOOP)
218217
.collect(Collectors.toList());

‎src/main/java/org/gradle/profiler/mutations/AbstractBuildMutatorWithoutOptionsConfigurator.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ public abstract class AbstractBuildMutatorWithoutOptionsConfigurator implements
1010

1111
@Override
1212
public BuildMutator configure(Config scenario, String scenarioName, InvocationSettings settings, String key) {
13-
boolean enabled = scenario.getBoolean(key);
14-
return enabled ? createBuildMutator(settings) : BuildMutator.NOOP;
13+
return new HasPathBuildMutatorConfigurator(() -> {
14+
boolean enabled = scenario.getBoolean(key);
15+
return enabled ? createBuildMutator(settings) : BuildMutator.NOOP;
16+
}).configure(scenario,scenarioName,settings,key);
1517
}
1618
}

‎src/main/java/org/gradle/profiler/mutations/AbstractCleanupMutator.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,14 @@ protected static void delete(File f) {
6666
protected static abstract class Configurator implements BuildMutatorConfigurator {
6767
@Override
6868
public BuildMutator configure(Config scenario, String scenarioName, InvocationSettings settings, String key) {
69-
CleanupSchedule schedule = ConfigUtil.enumValue(scenario, key, CleanupSchedule.class, null);
70-
if (schedule == null) {
71-
throw new IllegalArgumentException("Schedule for cleanup is not specified");
72-
}
73-
return newInstance(scenario, scenarioName, settings, key, schedule);
69+
return new HasPathBuildMutatorConfigurator(() -> {
70+
CleanupSchedule schedule = ConfigUtil
71+
.enumValue(scenario, key, CleanupSchedule.class, null);
72+
if (schedule == null) {
73+
throw new IllegalArgumentException("Schedule for cleanup is not specified");
74+
}
75+
return newInstance(scenario, scenarioName, settings, key, schedule);
76+
}).configure(scenario, scenarioName, settings, key);
7477
}
7578

7679
protected abstract BuildMutator newInstance(Config scenario, String scenarioName, InvocationSettings settings, String key, CleanupSchedule schedule);

‎src/main/java/org/gradle/profiler/mutations/FileChangeMutatorConfigurator.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ public FileChangeMutatorConfigurator(Class<? extends AbstractFileChangeMutator>
2222

2323
@Override
2424
public BuildMutator configure(Config scenario, String scenarioName, InvocationSettings settings, String key) {
25-
List<BuildMutator> mutatorsForKey = new ArrayList<>();
26-
for (File sourceFileToChange : sourceFiles(scenario, scenarioName, settings.getProjectDir(), key)) {
27-
mutatorsForKey.add(getBuildMutatorForFile(sourceFileToChange));
28-
}
25+
return new HasPathBuildMutatorConfigurator(() -> {
26+
List<BuildMutator> mutatorsForKey = new ArrayList<>();
27+
for (File sourceFileToChange : sourceFiles(scenario, scenarioName,
28+
settings.getProjectDir(), key)) {
29+
mutatorsForKey.add(getBuildMutatorForFile(sourceFileToChange));
30+
}
2931

30-
return new CompositeBuildMutator(mutatorsForKey);
32+
return new CompositeBuildMutator(mutatorsForKey);
33+
}).configure(scenario, scenarioName, settings, key);
3134
}
3235

3336
private BuildMutator getBuildMutatorForFile(File sourceFileToChange) {

‎src/main/java/org/gradle/profiler/mutations/GitCheckoutMutator.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,16 @@ private void checkout(String target) {
6363
public static class Configurator implements BuildMutatorConfigurator {
6464
@Override
6565
public BuildMutator configure(Config scenario, String scenarioName, InvocationSettings settings, String key) {
66-
Config config = scenario.getConfig(key);
67-
String cleanup = ConfigUtil.string(config, "cleanup", null);
68-
String build = ConfigUtil.string(config, "build", null);
69-
if (build == null) {
70-
throw new IllegalArgumentException("No git-checkout target specified for build");
71-
}
72-
return new GitCheckoutMutator(settings.getProjectDir(), cleanup, build);
66+
return new HasPathBuildMutatorConfigurator(() -> {
67+
Config config = scenario.getConfig(key);
68+
String cleanup = ConfigUtil.string(config, "cleanup", null);
69+
String build = ConfigUtil.string(config, "build", null);
70+
if (build == null) {
71+
throw new IllegalArgumentException(
72+
"No git-checkout target specified for build");
73+
}
74+
return new GitCheckoutMutator(settings.getProjectDir(), cleanup, build);
75+
}).configure(scenario, scenarioName, settings, key);
7376
}
7477
}
7578

‎src/main/java/org/gradle/profiler/mutations/GitRevertMutator.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@ private void abortRevert() {
6060
public static class Configurator implements BuildMutatorConfigurator {
6161
@Override
6262
public BuildMutator configure(Config scenario, String scenarioName, InvocationSettings settings, String key) {
63-
List<String> commits = ConfigUtil.strings(scenario, key);
64-
if (commits.isEmpty()) {
65-
throw new IllegalArgumentException("No commits specified for git-revert");
66-
}
67-
return new GitRevertMutator(settings.getProjectDir(), commits);
63+
return new HasPathBuildMutatorConfigurator(() -> {
64+
List<String> commits = ConfigUtil.strings(scenario, key);
65+
if (commits.isEmpty()) {
66+
throw new IllegalArgumentException("No commits specified for git-revert");
67+
}
68+
return new GitRevertMutator(settings.getProjectDir(), commits);
69+
}).configure(scenario, scenarioName, settings, key);
6870
}
6971
}
7072

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.gradle.profiler.mutations;
2+
3+
import com.typesafe.config.Config;
4+
import java.util.function.Supplier;
5+
import org.gradle.profiler.BuildMutator;
6+
import org.gradle.profiler.InvocationSettings;
7+
8+
class HasPathBuildMutatorConfigurator implements BuildMutatorConfigurator {
9+
10+
private Supplier<BuildMutator> configurator;
11+
12+
HasPathBuildMutatorConfigurator(Supplier<BuildMutator> configurator) {
13+
this.configurator = configurator;
14+
}
15+
16+
@Override
17+
public BuildMutator configure(Config scenario, String scenarioName,
18+
InvocationSettings settings, String key) {
19+
BuildMutator buildMutator;
20+
if (scenario.hasPath(key)) {
21+
buildMutator = configurator.get();
22+
} else {
23+
buildMutator = BuildMutator.NOOP;
24+
}
25+
return buildMutator;
26+
}
27+
}

0 commit comments

Comments
 (0)
Please sign in to comment.