From 93cd70821efbd5c8a48e2ab8d28b8c89156b3905 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Mon, 14 Nov 2022 07:54:05 +0100 Subject: Make command to write spec agnostic to current directory --- .../enforcer/EnforceDependenciesAllProjects.java | 36 ++++++++++++++-------- .../EnforceDependenciesAllProjectsTest.java | 18 ++++++----- 2 files changed, 34 insertions(+), 20 deletions(-) (limited to 'vespa-enforcer-extensions') diff --git a/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java b/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java index 22a15052272..275db10344b 100644 --- a/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java +++ b/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java @@ -51,7 +51,7 @@ public class EnforceDependenciesAllProjects implements EnforcerRule { writeDependencySpec(specFile, dependencies); log.info("Updated spec file '%s'".formatted(specFile.toString())); } else { - validateDependencies(dependencies, specFile, projectName(helper)); + validateDependencies(dependencies, specFile, aggregatorPomRoot(helper), projectName(helper)); } log.info("The dependency enforcer completed successfully"); } @@ -88,7 +88,8 @@ public class EnforceDependenciesAllProjects implements EnforcerRule { @Override public int compareTo(Dependency o) { return COMPARATOR.compare(this, o); } } - static void validateDependencies(SortedSet dependencies, Path specFile, String moduleName) + static void validateDependencies(SortedSet dependencies, Path specFile, Path aggregatorPomRoot, + String moduleName) throws EnforcerRuleException { SortedSet allowedDependencies = loadDependencySpec(specFile); SortedSet forbiddenDependencies = new TreeSet<>(dependencies); @@ -107,9 +108,9 @@ public class EnforceDependenciesAllProjects implements EnforcerRule { } throw new EnforcerRuleException( errorMsg.append("Maven dependency validation failed. ") - .append("To update dependency spec execute following the command from root of aggregator pom:\n") - .append("$ mvn enforcer:enforce -D").append(WRITE_SPEC_PROP).append(" -pl ") - .append(moduleName).append("\n").toString()); + .append("To update dependency spec run:\n") + .append("$ mvn validate -D").append(WRITE_SPEC_PROP).append(" -pl ").append(moduleName) + .append(" -f ").append(aggregatorPomRoot).append("\n").toString()); } } @@ -121,7 +122,7 @@ public class EnforceDependenciesAllProjects implements EnforcerRule { .map(s -> s.replace(".", "\\.").replace("*", ".*").replace(":", "\\:").replace('?', '.')) .collect(Collectors.joining(")|(", "^(", ")$"))); SortedSet dependencies = new TreeSet<>(); - MavenSession session = (MavenSession) helper.evaluate("${session}"); + MavenSession session = mavenSession(helper); var graphBuilder = helper.getComponent(DependencyGraphBuilder.class); List projects = session.getAllProjects(); if (projects.size() == 1) { @@ -135,7 +136,7 @@ public class EnforceDependenciesAllProjects implements EnforcerRule { addDependenciesRecursive(root, dependencies, ignorePattern); } return dependencies; - } catch (ExpressionEvaluationException | DependencyGraphBuilderException | ComponentLookupException e) { + } catch (DependencyGraphBuilderException | ComponentLookupException e) { throw new RuntimeException(e.getMessage(), e); } } @@ -153,18 +154,29 @@ public class EnforceDependenciesAllProjects implements EnforcerRule { } private static Path resolveSpecFile(EnforcerRuleHelper helper, String specFile) { + return Paths.get(mavenProject(helper).getBasedir() + File.separator + specFile).normalize(); + } + + private static String projectName(EnforcerRuleHelper helper) { + MavenProject p = mavenProject(helper); + return p.getModules().isEmpty() ? p.getName() : "."; + } + + private static Path aggregatorPomRoot(EnforcerRuleHelper helper) { + return mavenSession(helper).getRequest().getPom().toPath(); + } + + private static MavenProject mavenProject(EnforcerRuleHelper helper) { try { - MavenProject project = (MavenProject) helper.evaluate("${project}"); - return Paths.get(project.getBasedir() + File.separator + specFile).normalize(); + return (MavenProject) helper.evaluate("${project}"); } catch (ExpressionEvaluationException e) { throw new RuntimeException(e.getMessage(), e); } } - private static String projectName(EnforcerRuleHelper helper) { + private static MavenSession mavenSession(EnforcerRuleHelper helper) { try { - MavenProject p = (MavenProject) helper.evaluate("${project}"); - return p.getModules().isEmpty() ? p.getName() : "."; + return (MavenSession) helper.evaluate("${session}"); } catch (ExpressionEvaluationException e) { throw new RuntimeException(e.getMessage(), e); } diff --git a/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java b/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java index 81e22d81f44..5bfd1150ba7 100644 --- a/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java +++ b/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java @@ -25,13 +25,15 @@ import static org.junit.jupiter.api.Assertions.assertThrows; */ class EnforceDependenciesAllProjectsTest { + private static final Path POM_FILE = Paths.get("/vespa-src/pom.xml"); + @Test void succeeds_dependencies_matches_spec() { SortedSet dependencies = new TreeSet<>(Set.of( Dependency.fromString("com.example:foo:1.2.3"), Dependency.fromString("com.example:bar:2.3.4"))); Path specFile = Paths.get("src/test/resources/allowed-dependencies.txt"); - assertDoesNotThrow(() -> validateDependencies(dependencies, specFile, "my-dep-enforcer")); + assertDoesNotThrow(() -> validateDependencies(dependencies, specFile, POM_FILE, "my-dep-enforcer")); } @Test @@ -42,14 +44,14 @@ class EnforceDependenciesAllProjectsTest { Dependency.fromString("com.example:foobar:3.4.5"))); Path specFile = Paths.get("src/test/resources/allowed-dependencies.txt"); var exception = assertThrows(EnforcerRuleException.class, - () -> validateDependencies(dependencies, specFile, "my-dep-enforcer")); + () -> validateDependencies(dependencies, specFile, POM_FILE, "my-dep-enforcer")); String expectedErrorMessage = """ The dependency enforcer failed: Forbidden dependencies: - com.example:foobar:3.4.5 - Maven dependency validation failed. To update dependency spec execute following the command from root of aggregator pom: - $ mvn enforcer:enforce -DdependencyEnforcer.writeSpec -pl my-dep-enforcer + Maven dependency validation failed. To update dependency spec run: + $ mvn validate -DdependencyEnforcer.writeSpec -pl my-dep-enforcer -f /vespa-src/pom.xml """; assertEquals(expectedErrorMessage, exception.getMessage()); } @@ -60,20 +62,20 @@ class EnforceDependenciesAllProjectsTest { Dependency.fromString("com.example:foo:1.2.3"))); Path specFile = Paths.get("src/test/resources/allowed-dependencies.txt"); var exception = assertThrows(EnforcerRuleException.class, - () -> validateDependencies(dependencies, specFile, "my-dep-enforcer")); + () -> validateDependencies(dependencies, specFile, POM_FILE, "my-dep-enforcer")); String expectedErrorMessage = """ The dependency enforcer failed: Removed dependencies: - com.example:bar:2.3.4 - Maven dependency validation failed. To update dependency spec execute following the command from root of aggregator pom: - $ mvn enforcer:enforce -DdependencyEnforcer.writeSpec -pl my-dep-enforcer + Maven dependency validation failed. To update dependency spec run: + $ mvn validate -DdependencyEnforcer.writeSpec -pl my-dep-enforcer -f /vespa-src/pom.xml """; assertEquals(expectedErrorMessage, exception.getMessage()); } @Test - void writes_valid_spec_file(@TempDir Path tempDir) throws EnforcerRuleException, IOException { + void writes_valid_spec_file(@TempDir Path tempDir) throws IOException { SortedSet dependencies = new TreeSet<>(Set.of( Dependency.fromString("com.example:foo:1.2.3"), Dependency.fromString("com.example:bar:2.3.4"))); -- cgit v1.2.3