[java-mvn-enforcer] 04/04: JMVN-42 Enforcer needs to learn about classifiers for the distribution signature check

Rod Widdowson rdw at steadingsoftware.com
Tue Oct 11 08:34:13 UTC 2022


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch main
in repository java-mvn-enforcer.

View the commit online:
http://git.shibboleth.net/view/?p=java-mvn-enforcer.git;a=commit;h=4e451e179080313bb295082e7710c710bd72d5e0

commit 4e451e179080313bb295082e7710c710bd72d5e0
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Oct 11 09:33:12 2022 +0100

    JMVN-42 Enforcer needs to learn about classifiers for the distribution signature check
    
    https://shibboleth.atlassian.net/browse/JMVN-42
---
 .../mvn/enforcer/impl/DependencyChecker.java       | 24 +++----
 .../shibboleth/mvn/enforcer/impl/JarEnforcer.java  |  6 +-
 .../mvn/enforcer/impl/ProjectPomContext.java       | 81 +++++++++++++---------
 .../shibboleth/mvn/enforcer/impl/SigChecker.java   |  6 +-
 4 files changed, 68 insertions(+), 49 deletions(-)

diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java
index b19c754..b8fdb43 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java
@@ -302,14 +302,14 @@ public class DependencyChecker {
         if (!jarPath.endsWith(".jar")) {
             return;
         }
-        final Pair<String, String> nm = projectContext.splitFileName(jarPath);
-        final String oldName = nameToVersion.put(nm.getFirst(), nm.getSecond());
+        final PomArtifact artifact = projectContext.splitFileName(jarPath);
+        final String oldName = nameToVersion.put(artifact.getArtifactId(), artifact.getVersion());
         if (oldName == null) {
             return;
-        } else if (oldName.equals(nm.getSecond())) {
+        } else if (oldName.equals(artifact.getVersion())) {
             report.format("File %s present in multiple locations\n", jarPath);
         } else {
-            report.format("File %s present with versions %s and %s\n", nm.getFirst(), oldName, nm.getSecond());
+            report.format("File %s present with versions %s and %s\n", artifact.getArtifactId(), oldName, artifact.getVersion());
         }
         duplicateJars++;
     }
@@ -402,29 +402,29 @@ public class DependencyChecker {
 
     /** Add the artifact as a source of this file.
      * @param dependencySources where to accumulate the answers 
-     * @param dep the file name of the dependency which was down-loaded
+     * @param fileName the file name of the dependency which was down-loaded
      * @param artifact the artifact which provoked the download
      */
     private void addDep(final Map<String, Map<String, Set<String>>> dependencySources,
-                        final String dep,
+                        final String fileName,
                         final DependencyPomArtifact artifact) {
-        final Pair<String,String> depId = projectContext.splitFileName(dep);
+        final PomArtifact nameAsArtifact = projectContext.splitFileName(fileName);
         
-        if (artifact.getArtifactId().equals(depId.getFirst()) && artifact.getVersion().equals(depId.getSecond())) {
+        if (nameAsArtifact.equals(artifact)) {
             // it's us.  Not interesting
             return;
         }
         
         // for each version, what contributed this dependency
-        Map<String, Set<String>> depEntry = dependencySources.get(depId.getFirst());
+        Map<String, Set<String>> depEntry = dependencySources.get(nameAsArtifact.getArtifactId());
         if (depEntry == null) {
             depEntry = new HashMap<>();
-            dependencySources.put(depId.getFirst(), depEntry);
+            dependencySources.put(nameAsArtifact.getArtifactId(), depEntry);
         }
-        Set<String> provider = depEntry.get(depId.getSecond());
+        Set<String> provider = depEntry.get(nameAsArtifact.getVersion());
         if (provider == null) {
             provider = new HashSet<>();
-            depEntry.put(depId.getSecond(), provider);
+            depEntry.put(nameAsArtifact.getVersion(), provider);
         }
         provider.add(artifact.getArtifactId()+"-"+artifact.getVersion());
     }
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java
index 9f31474..b03cb37 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java
@@ -107,6 +107,9 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
     /** The list of things which get added to real versions. */
     private String versionExtensions = "-SNAPSHOT -GA -jre -empty-to-avoid-conflict-with-guava";
 
+    /** The list of classifiers we know about*/
+    private String classifiers = "";
+
     /** Our artifact resolver. */
     private ArtifactResolver artifactResolver;
 
@@ -208,7 +211,8 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
                                           EnforcerLogger.getLogger(ProjectPomContext.class),
                                           pool,
                                           getGPGDataClassLoader(),
-                                          StringSupport.stringToList(versionExtensions, XMLConstants.LIST_DELIMITERS))) {
+                                          StringSupport.stringToList(versionExtensions, XMLConstants.LIST_DELIMITERS),
+                                          StringSupport.stringToList(classifiers, XMLConstants.LIST_DELIMITERS))) {
 
                 pomContext.initialize(pom);
 
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java
index 0fcd85c..14947f0 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java
@@ -37,7 +37,6 @@ import javax.annotation.Nonnull;
 import org.slf4j.Logger;
 
 import net.shibboleth.mvn.enforcer.impl.ParsedPom.DependencyPomArtifact;
-import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.xml.ParserPool;
 
@@ -79,25 +78,31 @@ public final class ProjectPomContext implements AutoCloseable {
     /** The string which can be appended to a version.*/
     @Nonnull private final List<String> extensionGarnish;
 
+    /** The potential Classifiers for an artifact .*/
+    @Nonnull private final List<String> classifiers;
+
     /** Constructor.
      * @param loader how to get artifacts
      * @param logger where to log or null if we are using out own.
      * @param pool a parser pool
      * @param classLoader source for extra info (like keyrings)
-     * @param extensions the known additions to the project extensions
+     * @param extensions the known additions to the versions
+     * @param classifiers the classifiers we know about
      * @throws IOException if we cannit create the temp dir
      */
     public ProjectPomContext(final MavenLoader loader,
             @Nonnull final Logger logger,
             @Nonnull final ParserPool pool,
             @Nonnull final ClassLoader classLoader,
-            @Nonnull final List<String> extensions) throws IOException {
+            @Nonnull final List<String> extensions,
+            @Nonnull final List<String> clsfrs) throws IOException {
         mavenLoader = Constraint.isNotNull(loader, "Loader must not be null");
         log = Constraint.isNotNull(logger, "Logger must not be null");
         workingDir = Files.createTempDirectory("EnforcerCLI");
         enforcerLoader = Constraint.isNotNull(classLoader, "Class Loader must not be null");;
         parserPool = Constraint.isNotNull(pool, "Parse Pool must not be null");
         extensionGarnish = Constraint.isNotNull(extensions, "Extensions must not be null");
+        classifiers = Constraint.isNotNull(clsfrs, "Classifiers must not be null");
     }
     
     /** Returns the parserPool.
@@ -167,7 +172,7 @@ public final class ProjectPomContext implements AutoCloseable {
             return false;
         }
         if (parentPom.getParent() == null) {
-            log.error("Provided pom {{} had no parent", pomPath);
+            log.error("Provided pom {} had no parent", pomPath);
             return false;
         }
         final Path parentPath;
@@ -182,7 +187,7 @@ public final class ProjectPomContext implements AutoCloseable {
                                           parentPath, "parent pom.", log,
                                           new Properties(), Collections.emptyMap());
         } catch (final Exception e) {
-            log.error("Could not parse {}:", parentPom.getParent(), e);
+            log.error("Could not parse {}", parentPom.getParent(), e);
             return false;
         }
         try {
@@ -287,35 +292,49 @@ public final class ProjectPomContext implements AutoCloseable {
         return true;
     }
 
-    /** Split the file name into the artifact (first) and version (second).
+    /** Split the file name into name, version and classifier infer the groupId
+     * and then summon up a @{link {@link PomArtifact}
      * @param inName the file name
-     * @return a pair.
+     * @return a pom artifact
      */
-     protected Pair<String, String> splitFileName(final String inName) {
-        final String name;
-        if (inName.endsWith(".jar")) {
-            name = inName.substring(0, inName.length()-4);
-        } else {
-            name = inName;
-        }
-        int last = name.lastIndexOf("-");
-        for (final String otherGarnish : extensionGarnish) {
-            if (name.endsWith(otherGarnish)) {
-                last = name.substring(0, name.length()-otherGarnish.length()).lastIndexOf("-");
-                break;
-            }
-        }
-        String base = name.substring(0, last);
-        while (base.contains("-") && !artifactToGroup.containsKey(base)) {
-            log.debug("Splitting {}: {}:{} didn't work", inName, base, name.substring(last+1));
-            last = base.lastIndexOf("-");
-            base = name.substring(0, last);
-        }
-        final String versionExtension = name.substring(last+1);
-        log.debug("Splitting {}: found {}:{}", inName, base, versionExtension);
-        return new Pair<>(base, versionExtension);
-    }
+     protected PomArtifact splitFileName(final String inName) {
+         String name;
+         if (inName.endsWith(".jar")) {
+             name = inName.substring(0, inName.length()-4);
+         } else {
+             name = inName;
+         }
+         String classifier = "";
+         for (final String it: classifiers) {
+             if (name.endsWith(it)) {
+                 classifier = it.substring(1);
+                 name = name.substring(0, name.length() - it.length());
+                 break;
+             }
+         }
 
+         int last = name.lastIndexOf("-");
+         last = name.lastIndexOf("-");
+         for (final String otherGarnish : extensionGarnish) {
+             if (name.endsWith(otherGarnish)) {
+                 last = name.substring(0, name.length()-otherGarnish.length()).lastIndexOf("-");
+                 break;
+             }
+         }
+         String base = name.substring(0, last);
+         while (base.contains("-") && !artifactToGroup.containsKey(base)) {
+             log.debug("Splitting {}: {}:{} didn't work", inName, base, name.substring(last+1));
+             last = base.lastIndexOf("-");
+             base = name.substring(0, last);
+         }
+         final String group = artifactToGroup.get(base);
+         if (group == null) {
+             log.error("Could not determine group for {} consider amending artifactMap.properties", inName);
+         }
+         final String versionExtension = name.substring(last+1);
+         log.debug("Splitting {}: found {}:{}", inName, base, versionExtension);
+         return new PomArtifact(group, base, versionExtension, classifier);
+     }
     @Override
     public void close() throws Exception {
         if (workingDir != null && Files.exists(workingDir)) {
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/SigChecker.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/SigChecker.java
index e66a564..a85102f 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/SigChecker.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/SigChecker.java
@@ -28,8 +28,6 @@ import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 import org.slf4j.Logger;
 
-import net.shibboleth.utilities.java.support.collection.Pair;
-
 /**
  * A class to iterate over the provided directories for jar files and test
  * their signatures.
@@ -82,9 +80,7 @@ public class SigChecker extends BaseSigChecker {
      */
     private int checkSignature(final String jarPath, final InputStream input) {
         final String jarName = Path.of(jarPath).getFileName().toString();
-        final Pair<String,String> name = getProjectContext().splitFileName(jarName);
-        final String group = getProjectContext().getGroup(name.getFirst());
-        final PomArtifact jarAsArtifact = new PomArtifact(group, name.getFirst(), name.getSecond());
+        final PomArtifact jarAsArtifact = getProjectContext().splitFileName(jarName);
         if (checkSignature(input, jarAsArtifact)) {
             return 0;
         }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list