[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