Author: lcorneliussen Date: Fri Apr 27 19:06:52 2012 New Revision: 1331545 URL: http://svn.apache.org/viewvc?rev=1331545&view=rev Log: [NPANDAY-556] Importer for Nuget Packages o now only installs or deploys once to a repo o after clean, it'll install everything again
Modified: incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/AbstractDeployMojo.java incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/DeployLibraries.java incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/InstallLibraries.java incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java Modified: incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/AbstractDeployMojo.java URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/AbstractDeployMojo.java?rev=1331545&r1=1331544&r2=1331545&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/AbstractDeployMojo.java (original) +++ incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/AbstractDeployMojo.java Fri Apr 27 19:06:52 2012 @@ -115,10 +115,11 @@ public abstract class AbstractDeployMojo * * @param source the file to deploy * @param artifact the artifact definition + * @param deploymentRepo * @throws ArtifactDeploymentException if an error occurred deploying the artifact */ protected void deploy( - File source, Artifact artifact ) throws MojoExecutionException, MojoFailureException + File source, Artifact artifact, ArtifactRepository deploymentRepo ) throws MojoExecutionException, MojoFailureException { int retryFailedDeploymentCount = Math.max( 1, Math.min( 10, this.retryFailedDeploymentCount ) ); ArtifactDeploymentException exception = null; @@ -133,7 +134,8 @@ public abstract class AbstractDeployMojo + retryFailedDeploymentCount ); } - deployer.deploy( source, artifact, getDeploymentRepository(), getLocalArtifactRepository() ); + deployer.deploy( source, artifact, deploymentRepo, getLocalArtifactRepository() ); + exception = null; break; } Modified: incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/DeployLibraries.java URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/DeployLibraries.java?rev=1331545&r1=1331544&r2=1331545&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/DeployLibraries.java (original) +++ incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/deploy/DeployLibraries.java Fri Apr 27 19:06:52 2012 @@ -19,20 +19,11 @@ package npanday.plugin.libraryimporter.deploy; -import com.google.common.base.Strings; -import npanday.plugin.libraryimporter.model.NugetPackage; import npanday.plugin.libraryimporter.model.NugetPackageLibrary; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.installer.ArtifactInstallationException; -import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; -import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.project.artifact.ProjectArtifactMetadata; - -import java.io.File; /** * Mojo for deploying the resolved libraries to the local repository. @@ -46,7 +37,27 @@ public class DeployLibraries @Override protected void handleGeneratedArtifacts( NugetPackageLibrary lib, Artifact artifact ) throws MojoExecutionException, MojoFailureException { - deploy( artifact.getFile(), artifact ); + ArtifactRepository repo = getDeploymentRepository(); + if (lib.getMarkerFileFor( artifact, repo ).exists()){ + if ( getLog().isDebugEnabled() ) + { + getLog().debug( + "NPANDAY-152-002: artifact " + artifact.getId() + " has yet been deployed to " + repo.getUrl() + ); + } + } + + if ( getLog().isDebugEnabled() ) + { + getLog().debug( + "NPANDAY-152-001: deploying artifact " + artifact.getId() + " to " + repo.getUrl() + ); + } + + + deploy( artifact.getFile(), artifact, repo ); + + markDeployed( lib, artifact, repo ); } } Modified: incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java?rev=1331545&r1=1331544&r2=1331545&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java (original) +++ incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java Fri Apr 27 19:06:52 2012 @@ -24,6 +24,7 @@ import npanday.plugin.libraryimporter.mo import npanday.plugin.libraryimporter.skeletons.AbstractHandleEachLibraryMojo; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.installer.ArtifactInstallationException; import org.apache.maven.artifact.installer.ArtifactInstaller; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; @@ -125,7 +126,9 @@ public abstract class AbstractInstallMoj */ protected File getLocalRepoFile( ArtifactMetadata metadata ) { - String path = getLocalArtifactRepository().pathOfLocalRepositoryMetadata( metadata, getLocalArtifactRepository() ); + String path = getLocalArtifactRepository().pathOfLocalRepositoryMetadata( + metadata, getLocalArtifactRepository() + ); return new File( getLocalArtifactRepository().getBasedir(), path ); } @@ -140,8 +143,7 @@ public abstract class AbstractInstallMoj * @param artifact The artifact for which to create checksums, must not be <code>null</code>. * @throws MojoExecutionException If the checksums could not be installed. */ - protected void installChecksums( Artifact artifact ) - throws MojoExecutionException + protected void installChecksums( Artifact artifact ) throws MojoExecutionException { if ( !createChecksums ) { @@ -167,11 +169,10 @@ public abstract class AbstractInstallMoj * 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>. + * must not be <code>null</code>. * @throws MojoExecutionException If the checksums could not be installed. */ - private void installChecksums( File installedFile ) - throws MojoExecutionException + private void installChecksums( File installedFile ) throws MojoExecutionException { boolean signatureFile = installedFile.getName().endsWith( ".asc" ); if ( installedFile.isFile() && !signatureFile ) @@ -184,16 +185,16 @@ public abstract class AbstractInstallMoj /** * Installs a checksum for the specified file. * - * @param originalFile The path to the file from which the checksum is generated, must not be <code>null</code>. + * @param originalFile The path to the file from which the checksum is generated, must not be <code>null</code>. * @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 digester The checksum algorithm to use, 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>. + * file extension, must not be <code>null</code>. + * @param digester The checksum algorithm to use, 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>. * @throws MojoExecutionException If the checksum could not be installed. */ - private void installChecksum( File originalFile, File installedFile, Digester digester, String ext ) - throws MojoExecutionException + private void installChecksum( File originalFile, File installedFile, Digester digester, String ext ) throws + MojoExecutionException { String checksum; getLog().debug( "Calculating " + digester.getAlgorithm() + " checksum for " + originalFile ); @@ -203,8 +204,9 @@ public abstract class AbstractInstallMoj } catch ( DigesterException e ) { - throw new MojoExecutionException( "Failed to calculate " + digester.getAlgorithm() + " checksum for " - + originalFile, e ); + throw new MojoExecutionException( + "Failed to calculate " + digester.getAlgorithm() + " checksum for " + originalFile, e + ); } File checksumFile = new File( installedFile.getAbsolutePath() + ext ); @@ -223,12 +225,15 @@ public abstract class AbstractInstallMoj protected ArtifactRepository getLocalArtifactRepository() { ArtifactRepositoryLayout layout = new DefaultRepositoryLayout(); - if (!Strings.isNullOrEmpty( localRepository )) { + if ( !Strings.isNullOrEmpty( localRepository ) ) + { String localRepoUrl = new File( localRepository ).toURI().toString(); getLog().info( "NPANDAY-146-002: Using alternate local repository " + localRepository ); - localArtifactRepository = artifactRepositoryFactory.createArtifactRepository( "library-importer-local", localRepoUrl, layout, null, null ); + localArtifactRepository = artifactRepositoryFactory.createArtifactRepository( + "library-importer-local", localRepoUrl, layout, null, null + ); } return localArtifactRepository; } @@ -247,6 +252,32 @@ public abstract class AbstractInstallMoj handleGeneratedArtifacts( lib, artifact ); } - protected abstract void handleGeneratedArtifacts( NugetPackageLibrary lib, Artifact artifact ) throws MojoExecutionException, + protected void install( NugetPackageLibrary lib, Artifact artifact, ArtifactRepository localRepository ) throws + ArtifactInstallationException, + MojoExecutionException + { + + installer.install( lib.getMavenArtifactFile(), artifact, localRepository ); + } + + protected void markDeployed( NugetPackageLibrary lib, Artifact artifact, ArtifactRepository repo ) throws + MojoExecutionException + { + File markerFile = lib.getMarkerFileFor( artifact, repo ); + + try + { + markerFile.createNewFile(); + } + catch ( IOException e ) + { + throw new MojoExecutionException( + "NPANDAY-146-003: Error creating marker file for " + repo.getUrl() + ": " + markerFile.toPath() + ); + } + } + + protected abstract void handleGeneratedArtifacts( NugetPackageLibrary lib, Artifact artifact ) throws + MojoExecutionException, MojoFailureException; } Modified: incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/InstallLibraries.java URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/InstallLibraries.java?rev=1331545&r1=1331544&r2=1331545&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/InstallLibraries.java (original) +++ incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/InstallLibraries.java Fri Apr 27 19:06:52 2012 @@ -22,6 +22,7 @@ package npanday.plugin.libraryimporter.i import npanday.plugin.libraryimporter.model.NugetPackageLibrary; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.installer.ArtifactInstallationException; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.plugin.MojoExecutionException; /** @@ -36,6 +37,18 @@ public class InstallLibraries @Override protected void handleGeneratedArtifacts( NugetPackageLibrary lib, Artifact artifact ) throws MojoExecutionException { + ArtifactRepository repo = getLocalArtifactRepository(); + + if (lib.getMarkerFileFor( artifact, repo ).exists()){ + if ( getLog().isDebugEnabled() ) + { + getLog().debug( + "NPANDAY-146-002: artifact has yet been installed to local repository: " + artifact.getId() + ); + } + return; + } + if ( getLog().isDebugEnabled() ) { getLog().debug( @@ -45,7 +58,9 @@ public class InstallLibraries try { - installer.install( lib.getMavenArtifactFile(), artifact, getLocalArtifactRepository() ); + install( lib, artifact, repo ); + + markDeployed( lib, artifact, repo); } catch ( ArtifactInstallationException e ) { Modified: incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java?rev=1331545&r1=1331544&r2=1331545&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java (original) +++ incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java Fri Apr 27 19:06:52 2012 @@ -27,10 +27,15 @@ import npanday.plugin.libraryimporter.As import npanday.plugin.libraryimporter.LibImporterPathUtils; import npanday.plugin.libraryimporter.ManifestInfoParser; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.model.Model; import org.apache.maven.plugin.MojoExecutionException; import java.io.File; +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.Collection; import java.util.List; @@ -262,4 +267,30 @@ public class NugetPackageLibrary String folderName = getMavenGroupId() + "_" + getMavenArtifactId() + "_" + getMavenPackaging() + "_" + getMavenVersion(); return new File( mavenProjectsCacheDirectory, folderName); } + + public File getMarkerFileFor( Artifact artifact, ArtifactRepository repo ) + throws MojoExecutionException + { + try + { + byte[] bytesOfMessage = (artifact.getId() + repo.getUrl()).getBytes("UTF-8"); + MessageDigest md = MessageDigest.getInstance( "MD5" ); + byte[] digest = md.digest(bytesOfMessage); + BigInteger bigInt = new BigInteger(1,digest); + String hashtext = bigInt.toString(16); + while(hashtext.length() < 32 ){ + hashtext = "0"+hashtext; + } + return new File( getMavenProjectFolder(), hashtext + ".deploy-marker"); + } + catch ( UnsupportedEncodingException e ) + { + throw new MojoExecutionException("NPANDAY-145-005: Couldn't get the UTF-8 bytes", e); + + } + catch ( NoSuchAlgorithmException e ) + { + throw new MojoExecutionException("NPANDAY-145-006: Couldn't find MD5 algorithm", e); + } + } }