This is an automated email from the ASF dual-hosted git repository. khmarbaise pushed a commit to branch MSHARED-695 in repository https://gitbox.apache.org/repos/asf/maven-artifact-transfer.git
commit 30e1bad9e1c5d516ff77884a99cdb9689f16600e Author: Karl Heinz Marbaise <khmarba...@apache.org> AuthorDate: Sun Apr 8 21:08:12 2018 +0200 [MSHARED-695] - WIP - Move checksum generation from install to deploy o Moved checksum generation into deploy part. Removed checksume from install --- .../project/install/ProjectInstallerTest.java | 12 +- .../install/internal/DefaultProjectInstaller.java | 122 +-------------------- .../project/install/internal/DualDigester.java | 115 ------------------- .../internal/DualDigesterTest.java | 2 +- 4 files changed, 11 insertions(+), 240 deletions(-) diff --git a/src/it/maven-project-installer-plugin/src/test/java/org/apache/maven/plugin/project/install/ProjectInstallerTest.java b/src/it/maven-project-installer-plugin/src/test/java/org/apache/maven/plugin/project/install/ProjectInstallerTest.java index c6b8e2e..e13f99e 100644 --- a/src/it/maven-project-installer-plugin/src/test/java/org/apache/maven/plugin/project/install/ProjectInstallerTest.java +++ b/src/it/maven-project-installer-plugin/src/test/java/org/apache/maven/plugin/project/install/ProjectInstallerTest.java @@ -106,8 +106,8 @@ public class ProjectInstallerTest { File jarClassifierFile = new File( baseDirectoy, "maven-project-installer-plugin-it-1.0.0-A-classifier.jar" ); assertTrue( "jarClassifierFile '" + jarClassifierFile.getAbsolutePath() + "'", jarClassifierFile.exists() ); - assertTrue( "jarClassifier md5 not found.", new File( jarClassifierFile.getAbsolutePath() + ".md5" ).exists() ); - assertTrue( "jarClassifier sha1 not found.", + assertFalse( "jarClassifier md5 not found.", new File( jarClassifierFile.getAbsolutePath() + ".md5" ).exists() ); + assertFalse( "jarClassifier sha1 not found.", new File( jarClassifierFile.getAbsolutePath() + ".sha1" ).exists() ); } @@ -115,15 +115,15 @@ public class ProjectInstallerTest { File jarFile = new File( baseDirectoy, "maven-project-installer-plugin-it-1.0.0-A.jar" ); assertTrue( "jarFile '" + jarFile.getAbsolutePath() + "'", jarFile.exists() ); - assertTrue( "jar md5 not found.", new File( jarFile.getAbsolutePath() + ".md5" ).exists() ); - assertTrue( "jar sha1 not found.", new File( jarFile.getAbsolutePath() + ".sha1" ).exists() ); + assertFalse( "jar md5 not found.", new File( jarFile.getAbsolutePath() + ".md5" ).exists() ); + assertFalse( "jar sha1 not found.", new File( jarFile.getAbsolutePath() + ".sha1" ).exists() ); } private void checkForPomFile( File baseDirectoy ) { File pomFile = new File( baseDirectoy, "maven-project-installer-plugin-it-1.0.0-A.pom" ); assertTrue( "pomFile '" + pomFile.getAbsolutePath() + "'", pomFile.exists() ); - assertTrue( "pom md5 not found.", new File( pomFile.getAbsolutePath() + ".md5" ).exists() ); - assertTrue( "pom sha1 not found.", new File( pomFile.getAbsolutePath() + ".sha1" ).exists() ); + assertFalse( "pom md5 not found.", new File( pomFile.getAbsolutePath() + ".md5" ).exists() ); + assertFalse( "pom sha1 not found.", new File( pomFile.getAbsolutePath() + ".sha1" ).exists() ); } } \ No newline at end of file diff --git a/src/main/java/org/apache/maven/shared/project/install/internal/DefaultProjectInstaller.java b/src/main/java/org/apache/maven/shared/project/install/internal/DefaultProjectInstaller.java index c6dd828..4e001db 100644 --- a/src/main/java/org/apache/maven/shared/project/install/internal/DefaultProjectInstaller.java +++ b/src/main/java/org/apache/maven/shared/project/install/internal/DefaultProjectInstaller.java @@ -40,7 +40,6 @@ import org.apache.maven.shared.project.install.ProjectInstallerRequest; import org.apache.maven.shared.repository.RepositoryManager; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; -import org.codehaus.plexus.util.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,8 +61,6 @@ class DefaultProjectInstaller @Requirement private RepositoryManager repositoryManager; - private final DualDigester digester = new DualDigester(); - /** * {@inheritDoc} */ @@ -75,8 +72,6 @@ class DefaultProjectInstaller validateParameters( buildingRequest, installerRequest ); MavenProject project = installerRequest.getProject(); - boolean createChecksum = true; - Artifact artifact = project.getArtifact(); String packaging = project.getPackaging(); File pomFile = project.getFile(); @@ -96,8 +91,7 @@ class DefaultProjectInstaller { installer.install( buildingRequest, Collections.<Artifact>singletonList( new ProjectArtifact( project ) ) ); - installChecksums( buildingRequest, artifact, createChecksum ); - addMetaDataFilesForArtifact( buildingRequest, artifact, metadataFiles, createChecksum ); + addMetaDataFilesForArtifact( buildingRequest, artifact, metadataFiles ); } } else @@ -115,8 +109,7 @@ class DefaultProjectInstaller if ( file != null && file.isFile() ) { installer.install( buildingRequest, Collections.<Artifact>singletonList( artifact ) ); - installChecksums( buildingRequest, artifact, createChecksum ); - addMetaDataFilesForArtifact( buildingRequest, artifact, metadataFiles, createChecksum ); + addMetaDataFilesForArtifact( buildingRequest, artifact, metadataFiles ); } else if ( !attachedArtifacts.isEmpty() ) { @@ -134,11 +127,9 @@ class DefaultProjectInstaller for ( Artifact attached : attachedArtifacts ) { installer.install( buildingRequest, Collections.singletonList( attached ) ); - installChecksums( buildingRequest, attached, createChecksum ); - addMetaDataFilesForArtifact( buildingRequest, attached, metadataFiles, createChecksum ); + addMetaDataFilesForArtifact( buildingRequest, attached, metadataFiles ); } - installChecksums( metadataFiles ); } private void validateParameters( ProjectBuildingRequest buildingRequest, ProjectInstallerRequest installerRequest ) @@ -153,40 +144,11 @@ class DefaultProjectInstaller } } - /** - * Installs the checksums for the specified artifact if this has been enabled in the plugin configuration. This - * method creates checksums for files that have already been installed to the local repo to account for on-the-fly - * generated/updated files. For example, in Maven 2.0.4- the <code>ProjectArtifactMetadata</code> did not install - * the original POM file (cf. MNG-2820). While the plugin currently requires Maven 2.0.6, we continue to hash the - * installed POM for robustness with regard to future changes like re-introducing some kind of POM filtering. - * - * @param buildingRequest The project building request, must not be <code>null</code>. - * @param artifact The artifact for which to create checksums, must not be <code>null</code>. - * @param createChecksum {@code true} if checksum should be created, otherwise {@code false}. - * @throws IOException If the checksums could not be installed. - */ - private void installChecksums( ProjectBuildingRequest buildingRequest, Artifact artifact, boolean createChecksum ) - throws IOException - { - if ( !createChecksum ) - { - return; - } - - File artifactFile = getLocalRepoFile( buildingRequest, artifact ); - installChecksums( artifactFile ); - } - // CHECKSTYLE_OFF: LineLength private void addMetaDataFilesForArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact, - Collection<File> targetMetadataFiles, boolean createChecksum ) + Collection<File> targetMetadataFiles ) // CHECKSTYLE_ON: LineLength { - if ( !createChecksum ) - { - return; - } - Collection<ArtifactMetadata> metadatas = artifact.getMetadataList(); if ( metadatas != null ) { @@ -199,82 +161,6 @@ class DefaultProjectInstaller } /** - * Installs the checksums for the specified metadata files. - * - * @param metadataFiles The collection of metadata files to install checksums for, must not be <code>null</code>. - * @throws IOException If the checksums could not be installed. - */ - private void installChecksums( Collection<File> metadataFiles ) - throws IOException - { - for ( File metadataFile : metadataFiles ) - { - installChecksums( metadataFile ); - } - } - - /** - * Installs the checksums for the specified file (if it exists). - * - * @param installedFile The path to the already installed file in the local repo for which to generate checksums, - * must not be <code>null</code>. - * @throws IOException In case of errors. Could not install checksums. - */ - private void installChecksums( File installedFile ) - throws IOException - { - boolean signatureFile = installedFile.getName().endsWith( ".asc" ); - if ( installedFile.isFile() && !signatureFile ) - { - LOGGER.debug( "Calculating checksums for " + installedFile ); - digester.calculate( installedFile ); - installChecksum( installedFile, ".md5", digester.getMd5() ); - installChecksum( installedFile, ".sha1", digester.getSha1() ); - } - } - - /** - * Installs a checksum for the specified file. - * - * @param installedFile The base path from which the path to the checksum files is derived by appending the given - * file extension, must not be <code>null</code>. - * @param ext The file extension (including the leading dot) to use for the checksum file, must not be - * <code>null</code>. - * @param checksum the checksum to write - * @throws IOException If the checksum could not be installed. - */ - private void installChecksum( File installedFile, String ext, String checksum ) - throws IOException - { - File checksumFile = new File( installedFile.getAbsolutePath() + ext ); - LOGGER.debug( "Installing checksum to " + checksumFile ); - try - { - // noinspection ResultOfMethodCallIgnored - checksumFile.getParentFile().mkdirs(); - FileUtils.fileWrite( checksumFile.getAbsolutePath(), "UTF-8", checksum ); - } - catch ( IOException e ) - { - throw new IOException( "Failed to install checksum to " + checksumFile, e ); - } - } - - /** - * Gets the path of the specified artifact within the local repository. Note that the returned path need not exist - * (yet). - * - * @param buildingRequest The project building request, must not be <code>null</code>. - * @param artifact The artifact whose local repo path should be determined, must not be <code>null</code>. - * @return The absolute path to the artifact when installed, never <code>null</code>. - */ - private File getLocalRepoFile( ProjectBuildingRequest buildingRequest, Artifact artifact ) - { - String path = repositoryManager.getPathForLocalArtifact( buildingRequest, artifact ); - return new File( repositoryManager.getLocalRepositoryBasedir( buildingRequest ), path ); - } - - /** * Gets the path of the specified artifact metadata within the local repository. Note that the returned path need * not exist (yet). * diff --git a/src/main/java/org/apache/maven/shared/project/install/internal/DualDigester.java b/src/main/java/org/apache/maven/shared/project/install/internal/DualDigester.java deleted file mode 100644 index 000bf65..0000000 --- a/src/main/java/org/apache/maven/shared/project/install/internal/DualDigester.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.apache.maven.shared.project.install.internal; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -import org.apache.commons.codec.binary.Hex; -import org.codehaus.plexus.util.IOUtil; - - -/** - * Calculates md5 and sha1 digest. - * <p/> - * Todo: Consider using a thread to calculate one of the digests when the files are large; it's fairly slow ! - * - * @author Kristian Rosenvold - */ -//TODO: Think about this class if we could use the ChecksumUtils class of -// aether-util ? I think we need to go via reflection. -// -class DualDigester -{ - private final MessageDigest md5 = getDigester( "MD5" ); - - private final MessageDigest sh1 = getDigester( "SHA-1" ); - - private static final int BUFSIZE = 65536 * 2; - - private final byte[] buffer = new byte[BUFSIZE]; - - static MessageDigest getDigester( String algorithm ) - { - try - { - return MessageDigest.getInstance( algorithm ); - } - catch ( NoSuchAlgorithmException e ) - { - throw new RuntimeException( "Unable to initialize digest " + algorithm + " : " + e.getMessage() ); - } - } - - public void calculate( File file ) throws IOException - { - FileInputStream fis = null; - - try - { - fis = new FileInputStream( file ); - calculate( fis ); - fis.close(); - fis = null; - } - catch ( IOException e ) - { - throw new IOException( "Failed to calculate digest checksum for " + file, e ); - } - finally - { - IOUtil.close( fis ); - } - } - - void calculate( InputStream stream ) - throws IOException - { - md5.reset(); - sh1.reset(); - update( stream ); - } - - public String getMd5() - { - return Hex.encodeHexString( md5.digest() ); - } - - public String getSha1() - { - return Hex.encodeHexString( sh1.digest() ); - } - - private void update( InputStream is ) - throws IOException - { - int size = is.read( buffer, 0, BUFSIZE ); - while ( size >= 0 ) - { - md5.update( buffer, 0, size ); - sh1.update( buffer, 0, size ); - size = is.read( buffer, 0, BUFSIZE ); - } - } -} diff --git a/src/test/java/org/apache/maven/shared/project/install/internal/DualDigesterTest.java b/src/test/java/org/apache/maven/shared/project/deploy/internal/DualDigesterTest.java similarity index 95% rename from src/test/java/org/apache/maven/shared/project/install/internal/DualDigesterTest.java rename to src/test/java/org/apache/maven/shared/project/deploy/internal/DualDigesterTest.java index 7f8fbe8..49b7698 100644 --- a/src/test/java/org/apache/maven/shared/project/install/internal/DualDigesterTest.java +++ b/src/test/java/org/apache/maven/shared/project/deploy/internal/DualDigesterTest.java @@ -1,4 +1,4 @@ -package org.apache.maven.shared.project.install.internal; +package org.apache.maven.shared.project.deploy.internal; /* * Licensed to the Apache Software Foundation (ASF) under one -- To stop receiving notification emails like this one, please contact khmarba...@apache.org.