From 26567393e3a0614ca33b4748a5d7cea78c0edcfe Mon Sep 17 00:00:00 2001 From: Peter Palaga Date: Thu, 7 Jan 2021 11:01:57 +0100 Subject: [PATCH] Remove mvnd.builder.rule* and mvnd.builder.rules.provider.* features #264 --- daemon/pom.xml | 4 - .../mvnd/builder/DependencyGraph.java | 149 +----------------- .../mvndaemon/mvnd/builder/SmartBuilder.java | 6 - .../mvnd/builder/DependencyGraphTest.java | 36 ----- .../mvnd/builder/ProjectComparatorTest.java | 4 +- .../builder/ProjectExecutorServiceTest.java | 2 +- .../mvnd/builder/ReactorBuildQueueTest.java | 6 +- .../mvnd/builder/SmartBuilderTest.java | 29 ---- pom.xml | 1 - 9 files changed, 8 insertions(+), 229 deletions(-) delete mode 100644 daemon/src/test/java/org/mvndaemon/mvnd/builder/DependencyGraphTest.java delete mode 100644 daemon/src/test/java/org/mvndaemon/mvnd/builder/SmartBuilderTest.java diff --git a/daemon/pom.xml b/daemon/pom.xml index bbc20113f..4e18c3291 100644 --- a/daemon/pom.xml +++ b/daemon/pom.xml @@ -77,10 +77,6 @@ org.jline jline-terminal - - org.codehaus.groovy - groovy - org.junit.jupiter diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/builder/DependencyGraph.java b/daemon/src/main/java/org/mvndaemon/mvnd/builder/DependencyGraph.java index d185c4f11..82ed2d740 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/builder/DependencyGraph.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/builder/DependencyGraph.java @@ -15,19 +15,11 @@ */ package org.mvndaemon.mvnd.builder; -import groovy.lang.Binding; -import groovy.lang.GroovyShell; -import java.io.BufferedReader; -import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; import java.io.Writer; -import java.net.MalformedURLException; -import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -37,14 +29,11 @@ import java.util.Objects; import java.util.Set; import java.util.function.Function; -import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.ProjectDependencyGraph; import org.apache.maven.project.MavenProject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * File origin: @@ -52,9 +41,6 @@ */ public class DependencyGraph { - private static final Logger logger = LoggerFactory.getLogger(DependencyGraph.class); - static final Pattern mvndRuleSanitizerPattern = Pattern.compile("[,\\s]+"); - private final List projects; private final Map> upstreams; private final Map> transitiveUpstreams; @@ -63,147 +49,16 @@ public class DependencyGraph { public static DependencyGraph fromMaven(MavenSession session) { final ProjectDependencyGraph graph = session.getProjectDependencyGraph(); - final List projects = graph.getSortedProjects(); - return fromMaven(graph, getRules(projects, session)); - } - - static String getRules(List projects, MavenSession session) { - List list = new ArrayList<>(); - - String providerScript = null; - final MavenProject topLevelProject = projects.get(0); - String providerUrl = topLevelProject.getProperties() - .getProperty(SmartBuilder.MVND_BUILDER_RULES_PROVIDER_URL); - if (providerUrl != null) { - logger.warn(SmartBuilder.MVND_BUILDER_RULES_PROVIDER_URL - + " property is deprecated and the support for it will be removed in mvnd 0.3. See https://github.com/mvndaemon/mvnd/issues/264"); - - URL url; - try { - url = new URL(providerUrl); - } catch (MalformedURLException e) { - try { - url = new File(providerUrl).toURI().toURL(); - } catch (MalformedURLException ex) { - url = null; - } - } - if (url == null) { - throw new RuntimeException("Bad syntax for " + SmartBuilder.MVND_BUILDER_RULES_PROVIDER_URL, null); - } - try (BufferedReader r = new BufferedReader(new InputStreamReader(url.openStream()))) { - StringBuilder sb = new StringBuilder(); - char[] buf = new char[8192]; - int l; - while ((l = r.read(buf)) >= 0) { - sb.append(buf, 0, l); - } - providerScript = sb.toString(); - } catch (IOException e) { - throw new RuntimeException("Unable to read provider url " + SmartBuilder.MVND_BUILDER_RULES_PROVIDER_URL, - e); - } - } - if (providerScript == null) { - providerScript = topLevelProject.getProperties() - .getProperty(SmartBuilder.MVND_BUILDER_RULES_PROVIDER_SCRIPT); - } - if (providerScript != null) { - logger.warn(SmartBuilder.MVND_BUILDER_RULES_PROVIDER_SCRIPT - + " property is deprecated and the support for it will be removed in mvnd 0.3. See https://github.com/mvndaemon/mvnd/issues/264"); - - Binding binding = new Binding(); - GroovyShell shell = new GroovyShell(binding); - binding.setProperty("session", session); - Object result = shell.evaluate(providerScript); - if (result instanceof Iterable) { - for (Object r : (Iterable) result) { - list.add(r.toString()); - } - } else if (result != null) { - list.add(result.toString()); - } else { - throw new RuntimeException("The provider script did not return a valid string or string collection", null); - } - list.add(result.toString()); - } - - String topRule = topLevelProject.getProperties().getProperty(SmartBuilder.MVND_BUILDER_RULES); - if (topRule != null) { - logger.warn(SmartBuilder.MVND_BUILDER_RULES - + " property is deprecated and the support for it will be removed in mvnd 0.3. See https://github.com/mvndaemon/mvnd/issues/264"); - list.add(topRule); - } - - projects.forEach(p -> { - String rule = p.getProperties().getProperty(SmartBuilder.MVND_BUILDER_RULE); - if (rule != null) { - logger.warn(SmartBuilder.MVND_BUILDER_RULE - + " property is deprecated and the support for it will be removed in mvnd 0.3. See https://github.com/mvndaemon/mvnd/issues/264"); - rule = rule.trim(); - if (!rule.isEmpty()) { - rule = mvndRuleSanitizerPattern.matcher(rule).replaceAll(","); - list.add(rule + " before " + p.getGroupId() + ":" + p.getArtifactId()); - } - } - }); - String rules = null; - if (!list.isEmpty()) { - rules = String.join("\n", list); - } - return rules; + return fromMaven(graph); } - static DependencyGraph fromMaven(ProjectDependencyGraph graph, String rules) { + static DependencyGraph fromMaven(ProjectDependencyGraph graph) { final List projects = graph.getSortedProjects(); Map> upstreams = projects.stream() .collect(Collectors.toMap(p -> p, p -> graph.getUpstreamProjects(p, false))); Map> downstreams = projects.stream() .collect( Collectors.toMap(p -> p, p -> graph.getDownstreamProjects(p, false))); - - if (rules != null) { - for (String rule : rules.split("\\s*;\\s*|\n")) { - if (rule.trim().isEmpty()) { - continue; - } - String[] parts = rule.split("\\s*->\\s*|\\s+before\\s+"); - if (parts.length != 2) { - throw new IllegalArgumentException("Invalid rule: " + rule); - } - List> deps = Stream.of(parts).map(s -> Pattern.compile( - Arrays.stream(s.split("\\s*,\\s*|\\s+and\\s+")) - .map(String::trim) - .map(r -> r.contains(":") ? r : "*:" + r) - .map(r -> r.replaceAll("\\.", "\\.") - .replaceAll("\\*", ".*")) - .collect(Collectors.joining("|")))) - .map(t -> projects.stream() - .filter(p -> t.matcher(p.getGroupId() + ":" + p.getArtifactId()).matches()) - .collect(Collectors.toSet())) - .collect(Collectors.toList()); - - Set common = deps.get(0).stream().filter(deps.get(1)::contains).collect(Collectors.toSet()); - if (!common.isEmpty()) { - boolean leftWildcard = parts[0].contains("*"); - boolean rightWildcard = parts[1].contains("*"); - if (leftWildcard && rightWildcard) { - throw new IllegalArgumentException("Invalid rule: " + rule - + ". Both left and right parts have wildcards and match the same project."); - } else if (leftWildcard) { - deps.get(0).removeAll(common); - } else if (rightWildcard) { - deps.get(1).removeAll(common); - } else { - throw new IllegalArgumentException( - "Invalid rule: " + rule + ". Both left and right parts match the same project."); - } - } - - deps.get(1).forEach(p -> upstreams.get(p).addAll(deps.get(0))); - deps.get(0).forEach(p -> downstreams.get(p).addAll(deps.get(1))); - } - } return new DependencyGraph(Collections.unmodifiableList(projects), upstreams, downstreams); } diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/builder/SmartBuilder.java b/daemon/src/main/java/org/mvndaemon/mvnd/builder/SmartBuilder.java index 33224635a..a25c25cc1 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/builder/SmartBuilder.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/builder/SmartBuilder.java @@ -22,7 +22,6 @@ import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; -import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.enterprise.inject.Default; import javax.inject.Inject; @@ -52,13 +51,8 @@ public class SmartBuilder implements Builder { public static final String PROP_PROFILING = "smartbuilder.profiling"; - public static final String MVND_BUILDER_RULES = "mvnd.builder.rules"; - public static final String MVND_BUILDER_RULE = "mvnd.builder.rule"; - public static final String MVND_BUILDER_RULES_PROVIDER_URL = "mvnd.builder.rules.provider.url"; - public static final String MVND_BUILDER_RULES_PROVIDER_SCRIPT = "mvnd.builder.rules.provider.script"; private final Logger logger = LoggerFactory.getLogger(getClass()); - static final Pattern mvndRuleSanitizerPattern = Pattern.compile("[,\\s]+"); private final LifecycleModuleBuilder moduleBuilder; diff --git a/daemon/src/test/java/org/mvndaemon/mvnd/builder/DependencyGraphTest.java b/daemon/src/test/java/org/mvndaemon/mvnd/builder/DependencyGraphTest.java deleted file mode 100644 index 72f726837..000000000 --- a/daemon/src/test/java/org/mvndaemon/mvnd/builder/DependencyGraphTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.mvndaemon.mvnd.builder; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.stream.Collectors; -import org.apache.maven.project.MavenProject; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class DependencyGraphTest extends AbstractSmartBuilderTest { - - @Test - public void testRules() { - MavenProject a = newProject("a"), b = newProject("b"), c = newProject("c"); - TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); - graph.addDependency(b, a); - DependencyGraph dp = DependencyGraph.fromMaven(graph, "a before c"); - Assertions.assertEquals(new HashSet<>(Arrays.asList(b, c)), - dp.getDownstreamProjects(a).collect(Collectors.toSet())); - } -} diff --git a/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectComparatorTest.java b/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectComparatorTest.java index d619fb1f4..c94730931 100644 --- a/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectComparatorTest.java +++ b/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectComparatorTest.java @@ -33,7 +33,7 @@ public void testPriorityQueueOrder() { MavenProject a = newProject("a"), b = newProject("b"), c = newProject("c"); TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); graph.addDependency(b, a); - DependencyGraph dp = DependencyGraph.fromMaven(graph, null); + DependencyGraph dp = DependencyGraph.fromMaven(graph); Comparator cmp = ProjectComparator.create0(dp, new HashMap<>(), ProjectComparator::id); @@ -52,7 +52,7 @@ public void testPriorityQueueOrder_historicalServiceTimes() { MavenProject a = newProject("a"), b = newProject("b"), c = newProject("c"); TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); graph.addDependency(b, a); - DependencyGraph dp = DependencyGraph.fromMaven(graph, null); + DependencyGraph dp = DependencyGraph.fromMaven(graph); HashMap serviceTimes = new HashMap<>(); serviceTimes.put(id(a), new AtomicLong(1L)); diff --git a/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectExecutorServiceTest.java b/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectExecutorServiceTest.java index 31fc953ea..9a2c60eec 100644 --- a/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectExecutorServiceTest.java +++ b/daemon/src/test/java/org/mvndaemon/mvnd/builder/ProjectExecutorServiceTest.java @@ -39,7 +39,7 @@ public void testBuildOrder() throws Exception { final MavenProject c = newProject("c"); TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); graph.addDependency(b, a); - DependencyGraph dp = DependencyGraph.fromMaven(graph, null); + DependencyGraph dp = DependencyGraph.fromMaven(graph); HashMap serviceTimes = new HashMap<>(); serviceTimes.put(id(a), new AtomicLong(1L)); diff --git a/daemon/src/test/java/org/mvndaemon/mvnd/builder/ReactorBuildQueueTest.java b/daemon/src/test/java/org/mvndaemon/mvnd/builder/ReactorBuildQueueTest.java index e513627ea..95c766a47 100644 --- a/daemon/src/test/java/org/mvndaemon/mvnd/builder/ReactorBuildQueueTest.java +++ b/daemon/src/test/java/org/mvndaemon/mvnd/builder/ReactorBuildQueueTest.java @@ -26,7 +26,7 @@ public void testBasic() { MavenProject a = newProject("a"), b = newProject("b"), c = newProject("c"); TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); graph.addDependency(b, a); - DependencyGraph dp = DependencyGraph.fromMaven(graph, null); + DependencyGraph dp = DependencyGraph.fromMaven(graph); ReactorBuildQueue schl = new ReactorBuildQueue(graph.getSortedProjects(), dp); @@ -41,7 +41,7 @@ public void testBasic() { public void testNoDependencies() { MavenProject a = newProject("a"), b = newProject("b"), c = newProject("c"); TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); - DependencyGraph dp = DependencyGraph.fromMaven(graph, null); + DependencyGraph dp = DependencyGraph.fromMaven(graph); ReactorBuildQueue schl = new ReactorBuildQueue(graph.getSortedProjects(), dp); @@ -55,7 +55,7 @@ public void testMultipleUpstreamDependencies() { TestProjectDependencyGraph graph = new TestProjectDependencyGraph(a, b, c); graph.addDependency(b, a); graph.addDependency(b, c); - DependencyGraph dp = DependencyGraph.fromMaven(graph, null); + DependencyGraph dp = DependencyGraph.fromMaven(graph); ReactorBuildQueue schl = new ReactorBuildQueue(graph.getSortedProjects(), dp); diff --git a/daemon/src/test/java/org/mvndaemon/mvnd/builder/SmartBuilderTest.java b/daemon/src/test/java/org/mvndaemon/mvnd/builder/SmartBuilderTest.java deleted file mode 100644 index f84f388b5..000000000 --- a/daemon/src/test/java/org/mvndaemon/mvnd/builder/SmartBuilderTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.mvndaemon.mvnd.builder; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class SmartBuilderTest { - - @Test - void mvndRuleSanitizerPattern() { - String actual = SmartBuilder.mvndRuleSanitizerPattern.matcher("foo bar,baz,\n foo \n\n bar\n ".trim()) - .replaceAll(","); - Assertions.assertEquals("foo,bar,baz,foo,bar", actual); - } -} diff --git a/pom.xml b/pom.xml index 533d206fc..01a2baa99 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,6 @@ 3.8.1 2.12.1 2.1.1 - 3.0.4 1.4.1 3.0 3.2.0