You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/02/22 08:21:39 UTC

[maven-resolver] branch MRESOLVER-241 created (now 9f964c4)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a change to branch MRESOLVER-241
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git.


      at 9f964c4  [MRESOLVER-241] Resolver checksum calculation should be driven by layout

This branch includes the following new commits:

     new 9f964c4  [MRESOLVER-241] Resolver checksum calculation should be driven by layout

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven-resolver] 01/01: [MRESOLVER-241] Resolver checksum calculation should be driven by layout

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch MRESOLVER-241
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit 9f964c4787398d31a673d802589e2e9dc88cbeb7
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue Feb 22 09:20:08 2022 +0100

    [MRESOLVER-241] Resolver checksum calculation should be driven by layout
    
    Refactor checksum calculator and validator to rely on layout
    provided checksums (layout always had these), and not by the presence
    (or absence) or checksum locations.
    
    Checksum locations should drive only the checksum provision from
    remote, and nothing else.
---
 .../connector/basic/BasicRepositoryConnector.java    | 10 ++++++----
 .../aether/connector/basic/ChecksumCalculator.java   | 15 +++++++--------
 .../aether/connector/basic/ChecksumValidator.java    | 19 +++++++++++--------
 .../connector/basic/ChecksumCalculatorTest.java      |  7 +++----
 .../connector/basic/ChecksumValidatorTest.java       | 20 ++++++++++++++++----
 5 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
index c761941..e292de3 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
@@ -227,6 +227,7 @@ final class BasicRepositoryConnector
 
         Executor executor = getExecutor( artifactDownloads, metadataDownloads );
         RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
+        List<ChecksumAlgorithmFactory> checksumAlgorithmFactories = layout.getChecksumAlgorithmFactories();
 
         for ( MetadataDownload transfer : safe( metadataDownloads ) )
         {
@@ -244,7 +245,7 @@ final class BasicRepositoryConnector
             }
 
             Runnable task = new GetTaskRunner( location, transfer.getFile(), checksumPolicy,
-                    checksumLocations, null, listener );
+                    checksumAlgorithmFactories, checksumLocations, null, listener );
             executor.execute( errorForwarder.wrap( task ) );
         }
 
@@ -254,7 +255,7 @@ final class BasicRepositoryConnector
             for ( ProvidedChecksumsSource providedChecksumsSource : providedChecksumsSources.values() )
             {
                 Map<String, String> provided = providedChecksumsSource.getProvidedArtifactChecksums(
-                    session, transfer, layout.getChecksumAlgorithmFactories() );
+                    session, transfer, checksumAlgorithmFactories );
 
                 if ( provided != null )
                 {
@@ -284,7 +285,7 @@ final class BasicRepositoryConnector
                 }
 
                 task = new GetTaskRunner( location, transfer.getFile(), checksumPolicy,
-                    checksumLocations, providedChecksums, listener );
+                        checksumAlgorithmFactories, checksumLocations, providedChecksums, listener );
             }
             executor.execute( errorForwarder.wrap( task ) );
         }
@@ -434,13 +435,14 @@ final class BasicRepositoryConnector
         private final ChecksumValidator checksumValidator;
 
         GetTaskRunner( URI path, File file, ChecksumPolicy checksumPolicy,
+                       List<ChecksumAlgorithmFactory> checksumAlgorithmFactories,
                        List<RepositoryLayout.ChecksumLocation> checksumLocations,
                        Map<String, String> providedChecksums,
                        TransferTransportListener<?> listener )
         {
             super( path, listener );
             this.file = requireNonNull( file, "destination file cannot be null" );
-            checksumValidator = new ChecksumValidator( file, fileProcessor, this,
+            checksumValidator = new ChecksumValidator( file, checksumAlgorithmFactories, fileProcessor, this,
                     checksumPolicy, providedChecksums, safe( checksumLocations ) );
         }
 
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
index 87eeb78..ccf0431 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
@@ -36,7 +36,6 @@ import java.util.Set;
 
 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithm;
 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
-import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
 
 import static java.util.Objects.requireNonNull;
 
@@ -92,25 +91,25 @@ final class ChecksumCalculator
     private final File targetFile;
 
     public static ChecksumCalculator newInstance( File targetFile,
-                                                  Collection<RepositoryLayout.ChecksumLocation> checksumLocations )
+                                                  Collection<ChecksumAlgorithmFactory> checksumAlgorithmFactories )
     {
-        if ( checksumLocations == null || checksumLocations.isEmpty() )
+        if ( checksumAlgorithmFactories == null || checksumAlgorithmFactories.isEmpty() )
         {
             return null;
         }
-        return new ChecksumCalculator( targetFile, checksumLocations );
+        return new ChecksumCalculator( targetFile, checksumAlgorithmFactories );
     }
 
     private ChecksumCalculator( File targetFile,
-                                Collection<RepositoryLayout.ChecksumLocation> checksumLocations )
+                                Collection<ChecksumAlgorithmFactory> checksumAlgorithmFactories )
     {
         this.checksums = new ArrayList<>();
         Set<String> algos = new HashSet<>();
-        for ( RepositoryLayout.ChecksumLocation checksumLocation : checksumLocations )
+        for ( ChecksumAlgorithmFactory checksumAlgorithmFactory : checksumAlgorithmFactories )
         {
-            if ( algos.add( checksumLocation.getChecksumAlgorithmFactory().getName() ) )
+            if ( algos.add( checksumAlgorithmFactory.getName() ) )
             {
-                this.checksums.add( new Checksum( checksumLocation.getChecksumAlgorithmFactory() ) );
+                this.checksums.add( new Checksum( checksumAlgorithmFactory ) );
             }
         }
         this.targetFile = targetFile;
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java
index f6b0fef..87b6b3c 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java
@@ -59,6 +59,8 @@ final class ChecksumValidator
 
     private final File dataFile;
 
+    private final Collection<ChecksumAlgorithmFactory> checksumAlgorithmFactories;
+
     private final Collection<File> tempFiles;
 
     private final FileProcessor fileProcessor;
@@ -74,6 +76,7 @@ final class ChecksumValidator
     private final Map<File, Object> checksumFiles;
 
     ChecksumValidator( File dataFile,
+                       Collection<ChecksumAlgorithmFactory> checksumAlgorithmFactories,
                        FileProcessor fileProcessor,
                        ChecksumFetcher checksumFetcher,
                        ChecksumPolicy checksumPolicy,
@@ -81,6 +84,7 @@ final class ChecksumValidator
                        Collection<ChecksumLocation> checksumLocations )
     {
         this.dataFile = dataFile;
+        this.checksumAlgorithmFactories = checksumAlgorithmFactories;
         this.tempFiles = new HashSet<>();
         this.fileProcessor = fileProcessor;
         this.checksumFetcher = checksumFetcher;
@@ -94,7 +98,7 @@ final class ChecksumValidator
     {
         if ( checksumPolicy != null )
         {
-            return ChecksumCalculator.newInstance( targetFile, checksumLocations );
+            return ChecksumCalculator.newInstance( targetFile, checksumAlgorithmFactories );
         }
         return null;
     }
@@ -134,27 +138,26 @@ final class ChecksumValidator
             {
                 continue;
             }
-            ChecksumLocation checksumLocation = checksumLocations.stream()
-                    .filter( a -> a.getChecksumAlgorithmFactory().getName().equals( algo ) )
+            ChecksumAlgorithmFactory checksumAlgorithmFactory = checksumAlgorithmFactories.stream()
+                    .filter( a -> a.getName().equals( algo ) )
                     .findFirst()
                     .orElse( null );
-            if ( checksumLocation == null )
+            if ( checksumAlgorithmFactory == null )
             {
                 continue;
             }
 
             String actual = String.valueOf( calculated );
             String expected = entry.getValue().toString();
-            ChecksumAlgorithmFactory factory = checksumLocation.getChecksumAlgorithmFactory();
-            checksumFiles.put( getChecksumFile( factory ), expected );
+            checksumFiles.put( getChecksumFile( checksumAlgorithmFactory ), expected );
 
             if ( !isEqualChecksum( expected, actual ) )
             {
-                checksumPolicy.onChecksumMismatch( factory.getName(), kind,
+                checksumPolicy.onChecksumMismatch( checksumAlgorithmFactory.getName(), kind,
                     new ChecksumFailureException( expected, kind.name(), actual )
                 );
             }
-            else if ( checksumPolicy.onChecksumMatch( factory.getName(), kind ) )
+            else if ( checksumPolicy.onChecksumMatch( checksumAlgorithmFactory.getName(), kind ) )
             {
                 return true;
             }
diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java
index 818de7c..ed56549 100644
--- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java
+++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java
@@ -27,7 +27,6 @@ import static org.junit.Assert.*;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.URI;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -35,7 +34,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
+import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -48,10 +47,10 @@ public class ChecksumCalculatorTest
 
     private ChecksumCalculator newCalculator( String... algos )
     {
-        List<RepositoryLayout.ChecksumLocation> checksumLocations = new ArrayList<>();
+        List<ChecksumAlgorithmFactory> checksumLocations = new ArrayList<>();
         for ( String algo : algos )
         {
-            checksumLocations.add( new RepositoryLayout.ChecksumLocation( URI.create( "irrelevant" ), selector.select( algo ) ) );
+            checksumLocations.add( selector.select( algo ) );
         }
         return ChecksumCalculator.newInstance( file, checksumLocations );
     }
diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
index cd171b0..530e5e7 100644
--- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
+++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
@@ -35,6 +35,7 @@ import java.util.Map;
 
 import org.eclipse.aether.internal.test.util.TestFileProcessor;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
+import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy.ChecksumKind;
 import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
@@ -185,17 +186,27 @@ public class ChecksumValidatorTest
 
     private static final TestChecksumAlgorithmSelector selector = new TestChecksumAlgorithmSelector();
 
+    private List<ChecksumAlgorithmFactory> newChecksumAlgorithmFactories( String... factories )
+    {
+        List<ChecksumAlgorithmFactory> checksums = new ArrayList<>();
+        for ( String factory : factories )
+        {
+            checksums.add( selector.select( factory ) );
+        }
+        return checksums;
+    }
+
     private static RepositoryLayout.ChecksumLocation newChecksum( String factory )
     {
         return RepositoryLayout.ChecksumLocation.forLocation( URI.create( "file" ), selector.select( factory ) );
     }
 
-    private List<RepositoryLayout.ChecksumLocation> newChecksums( String... factories )
+    private List<RepositoryLayout.ChecksumLocation> newChecksums( List<ChecksumAlgorithmFactory> checksumAlgorithmFactories )
     {
         List<RepositoryLayout.ChecksumLocation> checksums = new ArrayList<>();
-        for ( String factory : factories )
+        for ( ChecksumAlgorithmFactory factory : checksumAlgorithmFactories )
         {
-            checksums.add( newChecksum( factory ) );
+            checksums.add( RepositoryLayout.ChecksumLocation.forLocation( URI.create( "file" ), factory ) );
         }
         return checksums;
     }
@@ -207,7 +218,8 @@ public class ChecksumValidatorTest
 
     private ChecksumValidator newValidator( Map<String, String> providedChecksums, String... factories )
     {
-        return new ChecksumValidator( dataFile, new TestFileProcessor(), fetcher, policy, providedChecksums, newChecksums( factories ) );
+        List<ChecksumAlgorithmFactory> checksumAlgorithmFactories = newChecksumAlgorithmFactories( factories );
+        return new ChecksumValidator( dataFile, checksumAlgorithmFactories, new TestFileProcessor(), fetcher, policy, providedChecksums, newChecksums( checksumAlgorithmFactories ) );
     }
 
     private Map<String, ?> checksums( String... algoDigestPairs )