You are viewing a plain text version of this content. The canonical link for it is here.
Posted to m2-dev@maven.apache.org by br...@apache.org on 2005/03/24 09:45:37 UTC

cvs commit: maven-components/maven-artifact/src/test/java/org/apache/maven/artifact/deployer ArtifactDeployerTest.java

brett       2005/03/24 00:45:37

  Modified:    maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy
                        DeployMojo.java
               maven-plugins/maven-deploy-plugin pom.xml
               maven-core/src/main/java/org/apache/maven/cli
                        ConsoleDownloadMonitor.java
               maven-artifact/src/main/java/org/apache/maven/artifact/construction
                        ArtifactConstructionSupport.java
               maven-artifact/src/main/java/org/apache/maven/artifact/deployer
                        ArtifactDeployer.java DefaultArtifactDeployer.java
               maven-artifact/src/main/java/org/apache/maven/artifact/installer
                        ArtifactInstaller.java
                        DefaultArtifactInstaller.java
               maven-artifact/src/main/java/org/apache/maven/artifact/manager
                        DefaultWagonManager.java WagonManager.java
               maven-artifact/src/main/java/org/apache/maven/artifact/metadata
                        ArtifactMetadata.java SnapshotArtifactMetadata.java
               maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout
                        LegacyRepositoryLayout.java
               maven-artifact/src/main/java/org/apache/maven/artifact/resolver
                        DefaultArtifactResolver.java
               maven-artifact/src/main/java/org/apache/maven/artifact/transform
                        ArtifactTransformation.java
                        SnapshotTransformation.java
               maven-artifact/src/main/resources/META-INF/plexus
                        components.xml
               maven-artifact/src/test/java/org/apache/maven/artifact/deployer
                        ArtifactDeployerTest.java
  Log:
  transform deployment of SNAPSHOT.
  Currently, the POM and artifact are deployed separately, causing an inconsistent version to be written out.
  
  Revision  Changes    Path
  1.6       +34 -35    maven-components/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java
  
  Index: DeployMojo.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DeployMojo.java	22 Mar 2005 12:36:36 -0000	1.5
  +++ DeployMojo.java	24 Mar 2005 08:45:36 -0000	1.6
  @@ -28,36 +28,34 @@
   import java.io.File;
   
   /**
  - * @goal deploy
  - *
  - * @description deploys an artifact to remote repository
  - *
  - * @parameter
  - *  name="project"
  - *  type="org.apache.maven.project.MavenProject"
  - *  required="true"
  - *  validator=""
  - *  expression="#project"
  - *  description=""
  - *
  - * @parameter
  - *  name="deployer"
  - *  type="org.apache.maven.artifact.deployer.ArtifactDeployer"
  - *  required="true"
  - *  validator=""
  - *  expression="#component.org.apache.maven.artifact.deployer.ArtifactDeployer"
  - *  description=""
  - *
  - * @parameter
  - *  name="deploymentRepository"
  - *  type="org.apache.maven.artifact.repository.ArtifactRepository"
  - *  required="true"
  - *  validator=""
  - *  expression="#project.distributionManagementArtifactRepository"
  - *  description=""
  - *
    * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
    * @version $Id$
  + * @goal deploy
  + * @description deploys an artifact to remote repository
  + * @parameter name="project"
  + * type="org.apache.maven.project.MavenProject"
  + * required="true"
  + * validator=""
  + * expression="#project"
  + * description=""
  + * @parameter name="deployer"
  + * type="org.apache.maven.artifact.deployer.ArtifactDeployer"
  + * required="true"
  + * validator=""
  + * expression="#component.org.apache.maven.artifact.deployer.ArtifactDeployer"
  + * description=""
  + * @parameter name="deploymentRepository"
  + * type="org.apache.maven.artifact.repository.ArtifactRepository"
  + * required="true"
  + * validator=""
  + * expression="#project.distributionManagementArtifactRepository"
  + * description=""
  + * @parameter name="localRepository"
  + * type="org.apache.maven.artifact.repository.ArtifactRepository"
  + * required="true"
  + * validator=""
  + * expression="#localRepository"
  + * description=""
    */
   public class DeployMojo
       extends AbstractPlugin
  @@ -68,21 +66,22 @@
   
       private ArtifactRepository deploymentRepository;
   
  +    private ArtifactRepository localRepository;
  +
       public void execute()
           throws PluginExecutionException
       {
           if ( deploymentRepository == null )
           {
  -            String msg = "Deployment failed: repository element was not specified in the pom inside"
  -                + " distributionManagement element";
  +            String msg = "Deployment failed: repository element was not specified in the pom inside" +
  +                " distributionManagement element";
               throw new PluginExecutionException( msg );
           }
   
           if ( deploymentRepository.getAuthenticationInfo() == null )
           {
  -            getLog().warn(
  -                           "Deployment repository {id: \'" + deploymentRepository.getId()
  -                               + "\'} has no associated authentication info!" );
  +            getLog().warn( "Deployment repository {id: \'" + deploymentRepository.getId() +
  +                           "\'} has no associated authentication info!" );
           }
   
           // Deploy the POM
  @@ -93,7 +92,7 @@
   
           try
           {
  -            deployer.deploy( pom, pomArtifact, deploymentRepository );
  +            deployer.deploy( pom, pomArtifact, deploymentRepository, localRepository );
   
               //Deploy artifact
               if ( !"pom".equals( project.getPackaging() ) )
  @@ -101,7 +100,7 @@
                   Artifact artifact = new DefaultArtifact( project.getGroupId(), project.getArtifactId(),
                                                            project.getVersion(), project.getPackaging() );
   
  -                deployer.deploy( project.getBuild().getDirectory(), artifact, deploymentRepository );
  +                deployer.deploy( project.getBuild().getDirectory(), artifact, deploymentRepository, localRepository );
               }
           }
           catch ( ArtifactDeploymentException e )
  
  
  
  1.9       +7 -0      maven-components/maven-plugins/maven-deploy-plugin/pom.xml
  
  Index: pom.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/maven-deploy-plugin/pom.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- pom.xml	23 Mar 2005 06:52:54 -0000	1.8
  +++ pom.xml	24 Mar 2005 08:45:36 -0000	1.9
  @@ -48,6 +48,13 @@
       </dependency>
       <dependency>
         <groupId>maven</groupId>
  +      <artifactId>wagon-file</artifactId>
  +      <version>1.0-alpha-2-SNAPSHOT</version>
  +      <type>jar</type>
  +      <scope>runtime</scope>
  +    </dependency>
  +    <dependency>
  +      <groupId>maven</groupId>
         <artifactId>wagon-ssh</artifactId>
         <version>1.0-alpha-2-SNAPSHOT</version>
         <type>jar</type>
  
  
  
  1.3       +10 -4     maven-components/maven-core/src/main/java/org/apache/maven/cli/ConsoleDownloadMonitor.java
  
  Index: ConsoleDownloadMonitor.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/cli/ConsoleDownloadMonitor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ConsoleDownloadMonitor.java	19 Mar 2005 03:00:06 -0000	1.2
  +++ ConsoleDownloadMonitor.java	24 Mar 2005 08:45:36 -0000	1.3
  @@ -35,7 +35,11 @@
   
       public void transferInitiated( TransferEvent transferEvent )
       {
  -        System.out.println( "Downloading: " + transferEvent.getResource().getName() );
  +        String message = transferEvent.getRequestType() == TransferEvent.REQUEST_PUT ? "Uploading" : "Downloading";
  +
  +        // TODO: can't use getLogger() because this isn't currently instantiated as a component
  +        System.out.println( message + ": " + transferEvent.getResource().getName() );
  +
           complete = 0;
       }
   
  @@ -60,12 +64,14 @@
   
       public void transferError( TransferEvent transferEvent )
       {
  -        getLogger().error( transferEvent.getException().getMessage() );
  +        // TODO: can't use getLogger() because this isn't currently instantiated as a component
  +        transferEvent.getException().printStackTrace();
       }
   
       public void debug( String message )
       {
  -        getLogger().debug( message );
  +        // TODO: can't use getLogger() because this isn't currently instantiated as a component
  +//        getLogger().debug( message );
       }
   }
   
  
  
  
  1.4       +0 -1      maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/construction/ArtifactConstructionSupport.java
  
  Index: ArtifactConstructionSupport.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/construction/ArtifactConstructionSupport.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ArtifactConstructionSupport.java	23 Mar 2005 03:40:12 -0000	1.3
  +++ ArtifactConstructionSupport.java	24 Mar 2005 08:45:36 -0000	1.4
  @@ -41,7 +41,6 @@
               return null;
           }
   
  -        // TODO: localRepository not used (should be used here to resolve path?
           String desiredScope = Artifact.SCOPE_RUNTIME;
           if ( Artifact.SCOPE_COMPILE.equals( scope ) && inheritedScope == null )
           {
  
  
  
  1.4       +4 -2      maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java
  
  Index: ArtifactDeployer.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ArtifactDeployer.java	23 Mar 2005 03:40:12 -0000	1.3
  +++ ArtifactDeployer.java	24 Mar 2005 08:45:36 -0000	1.4
  @@ -25,9 +25,11 @@
   {
       String ROLE = ArtifactDeployer.class.getName();
   
  -    void deploy( String basedir, Artifact artifact, ArtifactRepository deploymentRepository )
  +    void deploy( String basedir, Artifact artifact, ArtifactRepository deploymentRepository,
  +                 ArtifactRepository localRepository )
           throws ArtifactDeploymentException;
   
  -    void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository )
  +    void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository,
  +                 ArtifactRepository localRepository )
           throws ArtifactDeploymentException;
   }
  
  
  
  1.6       +37 -6     maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
  
  Index: DefaultArtifactDeployer.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultArtifactDeployer.java	24 Mar 2005 05:18:40 -0000	1.5
  +++ DefaultArtifactDeployer.java	24 Mar 2005 08:45:36 -0000	1.6
  @@ -20,9 +20,15 @@
   import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
   import org.apache.maven.artifact.handler.manager.ArtifactHandlerNotFoundException;
   import org.apache.maven.artifact.manager.WagonManager;
  +import org.apache.maven.artifact.metadata.ArtifactMetadata;
  +import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
   import org.apache.maven.artifact.repository.ArtifactRepository;
  +import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
  +import org.apache.maven.artifact.transform.ArtifactTransformation;
  +import org.apache.maven.wagon.TransferFailedException;
   
   import java.io.File;
  +import java.util.Iterator;
   import java.util.List;
   
   public class DefaultArtifactDeployer
  @@ -34,7 +40,8 @@
   
       private List artifactTransformations;
   
  -    public void deploy( String basedir, Artifact artifact, ArtifactRepository deploymentRepository )
  +    public void deploy( String basedir, Artifact artifact, ArtifactRepository deploymentRepository,
  +                        ArtifactRepository localRepository )
           throws ArtifactDeploymentException
       {
           File source = null;
  @@ -48,19 +55,43 @@
               throw new ArtifactDeploymentException( "Error deploying artifact: ", e );
           }
   
  -        deploy( source, artifact, deploymentRepository );
  +        deploy( source, artifact, deploymentRepository, localRepository );
       }
   
  -    public void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository )
  +    public void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository,
  +                        ArtifactRepository localRepository )
           throws ArtifactDeploymentException
       {
  -        // TODO: perform transformations
  -
           try
           {
  +            // TODO: better to have a transform manager, or reuse the handler manager again so we don't have these requirements duplicated all over?
  +            for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
  +            {
  +                ArtifactTransformation transform = (ArtifactTransformation) i.next();
  +                artifact = transform.transformForDeployment( artifact, deploymentRepository );
  +            }
  +
               wagonManager.putArtifact( source, artifact, deploymentRepository );
  +
  +            // must be after the artifact is installed
  +            for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
  +            {
  +                ArtifactMetadata metadata = (ArtifactMetadata) i.next();
  +                metadata.storeInLocalRepository( localRepository );
  +                // TODO: shouldn't need to calculate this
  +                File f = new File( localRepository.getBasedir(), localRepository.pathOfMetadata( metadata ) );
  +                wagonManager.putArtifactMetadata( f, metadata, deploymentRepository );
  +            }
  +        }
  +        catch ( TransferFailedException e )
  +        {
  +            throw new ArtifactDeploymentException( "Error deploying artifact: ", e );
  +        }
  +        catch ( ArtifactMetadataRetrievalException e )
  +        {
  +            throw new ArtifactDeploymentException( "Error deploying artifact: ", e );
           }
  -        catch ( Exception e )
  +        catch ( ArtifactPathFormatException e )
           {
               throw new ArtifactDeploymentException( "Error deploying artifact: ", e );
           }
  
  
  
  1.4       +1 -1      maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java
  
  
  
  
  1.12      +6 -1      maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
  
  Index: DefaultArtifactInstaller.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DefaultArtifactInstaller.java	24 Mar 2005 05:18:40 -0000	1.11
  +++ DefaultArtifactInstaller.java	24 Mar 2005 08:45:36 -0000	1.12
  @@ -20,6 +20,7 @@
   import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
   import org.apache.maven.artifact.handler.manager.ArtifactHandlerNotFoundException;
   import org.apache.maven.artifact.metadata.ArtifactMetadata;
  +import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
   import org.apache.maven.artifact.repository.ArtifactRepository;
   import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
   import org.apache.maven.artifact.transform.ArtifactTransformation;
  @@ -65,7 +66,7 @@
               for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
               {
                   ArtifactTransformation transform = (ArtifactTransformation) i.next();
  -                artifact = transform.transformLocalArtifact( artifact, localRepository );
  +                artifact = transform.transformForInstall( artifact, localRepository );
               }
   
               String localPath = localRepository.pathOf( artifact );
  @@ -96,5 +97,9 @@
           {
               throw new ArtifactInstallationException( "Error installing artifact: ", e );
           }
  +        catch ( ArtifactMetadataRetrievalException e )
  +        {
  +            throw new ArtifactInstallationException( "Error installing artifact: ", e );
  +        }
       }
   }
  \ No newline at end of file
  
  
  
  1.22      +85 -14    maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
  
  Index: DefaultWagonManager.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DefaultWagonManager.java	24 Mar 2005 05:18:40 -0000	1.21
  +++ DefaultWagonManager.java	24 Mar 2005 08:45:37 -0000	1.22
  @@ -77,25 +77,94 @@
       }
   
       // TODO: don't throw exception
  -    public void releaseWagon( Wagon wagon )
  +    private void releaseWagon( Wagon wagon )
           throws Exception
       {
           container.release( wagon );
       }
   
  -    // TODO: don't throw exception
       public void putArtifact( File source, Artifact artifact, ArtifactRepository repository )
  -        throws Exception
  +        throws TransferFailedException
  +    {
  +        try
  +        {
  +            putRemoteFile( repository, source, repository.pathOf( artifact ) );
  +        }
  +        catch ( ArtifactPathFormatException e )
  +        {
  +            throw new TransferFailedException( "Path of artifact could not be determined: ", e );
  +        }
  +    }
  +
  +    public void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository )
  +        throws TransferFailedException
       {
  -        Wagon wagon = getWagon( repository.getProtocol() );
  +        try
  +        {
  +            putRemoteFile( repository, source, repository.pathOfMetadata( artifactMetadata ) );
  +        }
  +        catch ( ArtifactPathFormatException e )
  +        {
  +            throw new TransferFailedException( "Path of artifact could not be determined: ", e );
  +        }
  +    }
   
  -        wagon.connect( repository, getProxy( repository.getProtocol() ) );
  +    private void putRemoteFile( ArtifactRepository repository, File source, String remotePath )
  +        throws TransferFailedException
  +    {
  +        Wagon wagon = null;
  +        try
  +        {
  +            wagon = getWagon( repository.getProtocol() );
  +        }
  +        catch ( UnsupportedProtocolException e )
  +        {
  +            throw new TransferFailedException( "Unsupported Protocol: ", e );
  +        }
   
  -        wagon.put( source, repository.pathOf( artifact ) );
  +        // TODO: probably don't want this on metadata...
  +        // TODO: not working well on upload, commented out for now
  +//        if ( downloadMonitor != null )
  +//        {
  +//            wagon.addTransferListener( downloadMonitor );
  +//        }
   
  -        wagon.disconnect();
  +        try
  +        {
  +            wagon.connect( repository, getProxy( repository.getProtocol() ) );
   
  -        releaseWagon( wagon );
  +            wagon.put( source, remotePath );
  +
  +            // TODO [BP]: put all disconnects in finally
  +            wagon.disconnect();
  +        }
  +        catch ( ConnectionException e )
  +        {
  +            throw new TransferFailedException( "Connection failed: ", e );
  +        }
  +        catch ( AuthenticationException e )
  +        {
  +            throw new TransferFailedException( "Authentication failed: ", e );
  +        }
  +        catch ( AuthorizationException e )
  +        {
  +            throw new TransferFailedException( "Authorization failed: ", e );
  +        }
  +        catch ( ResourceDoesNotExistException e )
  +        {
  +            throw new TransferFailedException( "Resource to deploy not found: ", e );
  +        }
  +        finally
  +        {
  +            try
  +            {
  +                releaseWagon( wagon );
  +            }
  +            catch ( Exception e )
  +            {
  +                throw new TransferFailedException( "Unable to release wagon", e );
  +            }
  +        }
       }
   
       public void getArtifact( Artifact artifact, List remoteRepositories, File destination )
  @@ -139,16 +208,13 @@
           }
       }
   
  -    public void getMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
  -                             ArtifactRepository localRepository )
  +    public void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination )
           throws TransferFailedException, ResourceDoesNotExistException
       {
           String remotePath;
  -        String localPath;
           try
           {
               remotePath = remoteRepository.pathOfMetadata( metadata );
  -            localPath = localRepository.pathOfMetadata( metadata );
           }
           catch ( ArtifactPathFormatException e )
           {
  @@ -156,8 +222,7 @@
               throw new TransferFailedException( "Failed to determine path for artifact", e );
           }
   
  -        File metadataFile = new File( localRepository.getBasedir(), localPath );
  -        getRemoteFile( remoteRepository, metadataFile, remotePath );
  +        getRemoteFile( remoteRepository, destination, remotePath );
       }
   
       private void getRemoteFile( ArtifactRepository repository, File destination, String remotePath )
  @@ -184,6 +249,7 @@
   
           //wagon.addTransferListener( md5SumObserver );
   
  +        // TODO: probably don't want this on metadata...
           if ( downloadMonitor != null )
           {
               wagon.addTransferListener( downloadMonitor );
  @@ -231,6 +297,11 @@
               }
           }
   
  +        if ( !temp.exists() )
  +        {
  +            throw new TransferFailedException( "Downloaded file does not exist: " + temp );
  +        }
  +
           // The temporary file is named destination + ".tmp" and is done this
           // way to ensure
           // that the temporary file is in the same file system as the
  
  
  
  1.10      +6 -9      maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
  
  Index: WagonManager.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/manager/WagonManager.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- WagonManager.java	24 Mar 2005 05:01:05 -0000	1.9
  +++ WagonManager.java	24 Mar 2005 08:45:37 -0000	1.10
  @@ -39,19 +39,16 @@
       Wagon getWagon( String protocol )
           throws UnsupportedProtocolException;
   
  -    // TODO: don't throw exception
  -    void releaseWagon( Wagon wagon )
  -        throws Exception;
  -
       void getArtifact( Artifact artifact, List remoteRepositories, File destination )
           throws TransferFailedException;
   
  -    // TODO: don't throw exception
       void putArtifact( File source, Artifact artifact, ArtifactRepository deploymentRepository )
  -        throws Exception;
  +        throws TransferFailedException;
  +
  +    public void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository )
  +        throws TransferFailedException;
   
  -    void getMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
  -                      ArtifactRepository localRepository )
  +    public void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination )
           throws TransferFailedException, ResourceDoesNotExistException;
   
       void setProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts );
  
  
  
  1.3       +9 -11     maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
  
  Index: ArtifactMetadata.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ArtifactMetadata.java	24 Mar 2005 05:01:05 -0000	1.2
  +++ ArtifactMetadata.java	24 Mar 2005 08:45:37 -0000	1.3
  @@ -17,19 +17,17 @@
    */
   
   import org.apache.maven.artifact.Artifact;
  +import org.apache.maven.artifact.manager.WagonManager;
   import org.apache.maven.artifact.repository.ArtifactRepository;
  -import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
  -import org.apache.maven.artifact.resolver.ArtifactResolutionException;
  -
  -import java.io.IOException;
   
   /**
    * Contains metadata about an artifact, and methods to retrieve/store it from an artifact repository.
    *
    * @author <a href="mailto:brett@apache.org">Brett Porter</a>
    * @version $Id$
  - * @todo naming is too close to ArtifactMetadataSource which refers to a POM. A POM is sometimes an artifact itself,
  - * so that naming may no longer be appropriate.
  + * @todo merge with artifactmetadatasource
  + * @todo retrieval exception not appropriate for store
  + * @todo not happy about the store/retrieve methods - they use "this"
    */
   public interface ArtifactMetadata
   {
  @@ -39,16 +37,16 @@
        * @param localRepository the local repository
        */
       void storeInLocalRepository( ArtifactRepository localRepository )
  -        throws IOException, ArtifactPathFormatException;
  +        throws ArtifactMetadataRetrievalException;
   
       /**
        * Retrieve the metadata from the remote repository into the local repository.
        *
        * @param remoteRepository the remote repository
  -     * @param localRepository  the local repository
  +     * @param wagonManager     the wagon manager to use to retrieve the metadata
        */
  -    void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, ArtifactRepository localRepository )
  -        throws IOException, ArtifactResolutionException;
  +    public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, WagonManager wagonManager )
  +        throws ArtifactMetadataRetrievalException;
   
       /**
        * Get the associated artifact.
  
  
  
  1.3       +81 -22    maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
  
  Index: SnapshotArtifactMetadata.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SnapshotArtifactMetadata.java	24 Mar 2005 05:01:05 -0000	1.2
  +++ SnapshotArtifactMetadata.java	24 Mar 2005 08:45:37 -0000	1.3
  @@ -17,11 +17,15 @@
    */
   
   import org.apache.maven.artifact.Artifact;
  +import org.apache.maven.artifact.manager.WagonManager;
   import org.apache.maven.artifact.repository.ArtifactRepository;
   import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
  -import org.apache.maven.artifact.resolver.ArtifactResolutionException;
  +import org.apache.maven.wagon.ResourceDoesNotExistException;
  +import org.apache.maven.wagon.TransferFailedException;
   import org.codehaus.plexus.util.FileUtils;
  +import org.codehaus.plexus.util.StringUtils;
   
  +import java.io.File;
   import java.io.IOException;
   import java.text.DateFormat;
   import java.text.SimpleDateFormat;
  @@ -39,7 +43,7 @@
   {
       private String timestamp = null;
   
  -    private int buildNumber = 1;
  +    private int buildNumber = 0;
   
       private static final String SNAPSHOT_VERSION_LOCAL_FILE = "version-local.txt";
   
  @@ -59,40 +63,89 @@
           return new SnapshotArtifactMetadata( artifact, SNAPSHOT_VERSION_LOCAL_FILE );
       }
   
  -    public static ArtifactMetadata createRemoteSnapshotMetadata( Artifact artifact )
  +    public static SnapshotArtifactMetadata createRemoteSnapshotMetadata( Artifact artifact )
       {
           return new SnapshotArtifactMetadata( artifact, SNAPSHOT_VERSION_FILE );
       }
   
       public void storeInLocalRepository( ArtifactRepository localRepository )
  -        throws IOException, ArtifactPathFormatException
  +        throws ArtifactMetadataRetrievalException
       {
  -        FileUtils.fileWrite( localRepository.getBasedir() + "/" + localRepository.pathOfMetadata( this ),
  -                             getTimestamp() + "-" + buildNumber );
  +        try
  +        {
  +            if ( timestamp == null )
  +            {
  +                timestamp = getUtcDateFormatter().format( new Date() );
  +            }
  +            String path = new File( localRepository.getBasedir(), localRepository.pathOfMetadata( this ) ).getPath();
  +            FileUtils.fileWrite( path, getVersion() );
  +        }
  +        catch ( IOException e )
  +        {
  +            throw new ArtifactMetadataRetrievalException( "Unable to retrieve metadata", e );
  +        }
  +        catch ( ArtifactPathFormatException e )
  +        {
  +            throw new ArtifactMetadataRetrievalException( "Unable to retrieve metadata", e );
  +        }
       }
   
  -    public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, ArtifactRepository localRepository )
  -        throws IOException, ArtifactResolutionException
  +    public String getVersion()
       {
  -/*
  -// TODO: this is getting the artifact - needs to get the version.txt
  -        resolver.resolve( artifact, Collections.singletonList( remoteRepository ), localRepository );
  -
  -        String version = FileUtils.fileRead( artifact.getPath() );
  +        String version = artifact.getVersion();
  +        if ( version != null )
  +        {
  +            version = StringUtils.replace( version, "SNAPSHOT", timestamp );
  +        }
  +        else
  +        {
  +            version = timestamp;
  +        }
  +        return version + "-" + buildNumber;
  +    }
   
  -        int index = UTC_TIMESTAMP_PATTERN.length();
  -        timestamp = version.substring( 0, index );
  +    public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, WagonManager wagonManager )
  +        throws ArtifactMetadataRetrievalException
  +    {
  +        try
  +        {
  +            File destination = File.createTempFile( "maven-artifact", null );
  +            destination.deleteOnExit();
   
  -        buildNumber = Integer.valueOf( version.substring( index + 1 ) ).intValue();
  -*/
  +            try
  +            {
  +                wagonManager.getArtifactMetadata( this, remoteRepository, destination );
  +            }
  +            catch ( ResourceDoesNotExistException e )
  +            {
  +                // this just means that there is no snapshot version file, so we keep timestamp = null, build = 0
  +                return;
  +            }
  +
  +            String version = FileUtils.fileRead( destination );
  +
  +            int index = version.lastIndexOf( "-" );
  +            timestamp = version.substring( 0, index );
  +            buildNumber = Integer.valueOf( version.substring( index + 1 ) ).intValue();
  +            index = version.indexOf( "-" );
  +            if ( index >= 0 )
  +            {
  +                // ignore starting version part, will be prepended later
  +                timestamp = timestamp.substring( index + 1 );
  +            }
  +        }
  +        catch ( TransferFailedException e )
  +        {
  +            throw new ArtifactMetadataRetrievalException( "Unable to retrieve metadata", e );
  +        }
  +        catch ( IOException e )
  +        {
  +            throw new ArtifactMetadataRetrievalException( "Unable to retrieve metadata", e );
  +        }
       }
   
       public String getTimestamp()
       {
  -        if ( timestamp == null )
  -        {
  -            timestamp = getUtcDateFormatter().format( new Date() );
  -        }
           return timestamp;
       }
   
  @@ -102,4 +155,10 @@
           utcDateFormatter.setTimeZone( UTC_TIME_ZONE );
           return utcDateFormatter;
       }
  +
  +    public void update()
  +    {
  +        this.buildNumber++;
  +        timestamp = getUtcDateFormatter().format( new Date() );
  +    }
   }
  
  
  
  1.4       +1 -1      maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java
  
  Index: LegacyRepositoryLayout.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LegacyRepositoryLayout.java	23 Mar 2005 14:55:15 -0000	1.3
  +++ LegacyRepositoryLayout.java	24 Mar 2005 08:45:37 -0000	1.4
  @@ -30,7 +30,7 @@
   
       protected String metadataLayoutPattern()
       {
  -        return "${groupPath}/${directory}/${artifactId}-${version}-${metadataFilename}";
  +        return "${groupPath}/poms/${artifactId}-${version}-${metadataFilename}";
       }
   
       protected String groupIdAsPath( String groupId )
  
  
  
  1.29      +5 -12     maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
  
  Index: DefaultArtifactResolver.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- DefaultArtifactResolver.java	24 Mar 2005 05:18:41 -0000	1.28
  +++ DefaultArtifactResolver.java	24 Mar 2005 08:45:37 -0000	1.29
  @@ -81,7 +81,7 @@
           for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
           {
               ArtifactTransformation transform = (ArtifactTransformation) i.next();
  -            artifact = transform.transformLocalArtifact( artifact, localRepository );
  +            artifact = transform.transformForResolve( artifact );
           }
   
           String localPath;
  @@ -182,19 +182,12 @@
               throw new ArtifactResolutionException( "Error transitively resolving artifacts: ", e );
           }
   
  -        // TODO: this is unclean, but necessary as long as resolve may return a different artifact
  -        Map collectedArtifacts = artifactResolutionResult.getArtifacts();
  -        Map resolvedArtifacts = new HashMap( collectedArtifacts.size() );
  -        for ( Iterator i = collectedArtifacts.keySet().iterator(); i.hasNext(); )
  -        {
  -            Object key = i.next();
  -            resolvedArtifacts.put( key, resolve( (Artifact) collectedArtifacts.get( key ), remoteRepositories,
  -                                                 localRepository ) );
  +        for ( Iterator i = artifactResolutionResult.getArtifacts().values().iterator(); i.hasNext(); )
  +        {
  +            // TODO: resolve may modify artifacts, do we need to get the new list?
  +            resolve( (Artifact) i.next(), remoteRepositories, localRepository );
           }
   
  -        collectedArtifacts.clear();
  -        collectedArtifacts.putAll( resolvedArtifacts );
  -
           return artifactResolutionResult;
       }
   
  
  
  
  1.5       +16 -5     maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
  
  Index: ArtifactTransformation.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ArtifactTransformation.java	24 Mar 2005 05:01:06 -0000	1.4
  +++ ArtifactTransformation.java	24 Mar 2005 08:45:37 -0000	1.5
  @@ -17,6 +17,7 @@
    */
   
   import org.apache.maven.artifact.Artifact;
  +import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
   import org.apache.maven.artifact.repository.ArtifactRepository;
   
   /**
  @@ -29,6 +30,15 @@
       static String ROLE = ArtifactTransformation.class.getName();
   
       /**
  +     * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
  +     * transformation has occured the original artifact is returned.
  +     *
  +     * @param artifact Artifact to be transformed.
  +     * @return The transformed Artifact
  +     */
  +    Artifact transformForResolve( Artifact artifact );
  +
  +    /**
        * Take in a artifact and return the transformed artifact for locating in the local repository. If no
        * transformation has occured the original artifact is returned.
        *
  @@ -36,15 +46,16 @@
        * @param localRepository the local repository it will be stored in
        * @return The transformed Artifact
        */
  -    Artifact transformLocalArtifact( Artifact artifact, ArtifactRepository localRepository );
  +    Artifact transformForInstall( Artifact artifact, ArtifactRepository localRepository );
   
       /**
  -     * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
  +     * Take in a artifact and return the transformed artifact for distributing toa remote repository. If no
        * transformation has occured the original artifact is returned.
        *
  -     * @param artifact Artifact to be transformed.
  +     * @param artifact         Artifact to be transformed.
  +     * @param remoteRepository the repository to deploy to
        * @return The transformed Artifact
  -     * @todo finish doco
        */
  -    Artifact transformRemoteArtifact( Artifact artifact, ArtifactRepository remoteRepository );
  +    Artifact transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository )
  +        throws ArtifactMetadataRetrievalException;
   }
  \ No newline at end of file
  
  
  
  1.6       +25 -13    maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
  
  Index: SnapshotTransformation.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SnapshotTransformation.java	24 Mar 2005 05:01:06 -0000	1.5
  +++ SnapshotTransformation.java	24 Mar 2005 08:45:37 -0000	1.6
  @@ -17,7 +17,10 @@
    */
   
   import org.apache.maven.artifact.Artifact;
  +import org.apache.maven.artifact.DefaultArtifact;
  +import org.apache.maven.artifact.manager.WagonManager;
   import org.apache.maven.artifact.metadata.ArtifactMetadata;
  +import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
   import org.apache.maven.artifact.metadata.SnapshotArtifactMetadata;
   import org.apache.maven.artifact.repository.ArtifactRepository;
   
  @@ -30,6 +33,8 @@
   public class SnapshotTransformation
       implements ArtifactTransformation
   {
  +    private WagonManager wagonManager;
  +
   /* TODO: use and remove
       public Artifact transform( Artifact artifact, ArtifactRepository localRepository, List repositories,
                                  Map parameters )
  @@ -185,9 +190,15 @@
           return retValue;
       }
       */
  -    public Artifact transformLocalArtifact( Artifact artifact, ArtifactRepository localRepository )
  +    public Artifact transformForResolve( Artifact artifact )
  +    {
  +        // TODO: implement
  +        return artifact;
  +    }
  +
  +    public Artifact transformForInstall( Artifact artifact, ArtifactRepository localRepository )
       {
  -        if ( shouldProcessArtifact( artifact ) )
  +        if ( isSnapshot( artifact ) )
           {
               // only store the version-local.txt file for POMs as every file has an associated POM
               ArtifactMetadata metadata = SnapshotArtifactMetadata.createLocalSnapshotMetadata( artifact );
  @@ -196,23 +207,24 @@
           return artifact;
       }
   
  -    public Artifact transformRemoteArtifact( Artifact artifact, ArtifactRepository remoteRepository )
  +    public Artifact transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository )
  +        throws ArtifactMetadataRetrievalException
       {
  -        if ( shouldProcessArtifact( artifact ) )
  +        if ( isSnapshot( artifact ) )
           {
  -            ArtifactMetadata metadata = SnapshotArtifactMetadata.createRemoteSnapshotMetadata( artifact );
  -//            wagonManager.getMetadata( metadata, remoteRepository, localRepository );
  -
  -            // TODO: implement
  +            SnapshotArtifactMetadata metadata = SnapshotArtifactMetadata.createRemoteSnapshotMetadata( artifact );
  +            metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager );
  +            metadata.update();
  +
  +            // TODO: note, we could currently transform this in place, as it is only used through the deploy mojo,
  +            //   which creates the artifact and then disposes of it
  +            artifact = new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), metadata.getVersion(),
  +                                            artifact.getScope(), artifact.getType(), artifact.getClassifier() );
  +            artifact.addMetadata( metadata );
           }
           return artifact;
       }
   
  -    private static boolean shouldProcessArtifact( Artifact artifact )
  -    {
  -        return isSnapshot( artifact ) && "pom".equals( artifact.getType() );
  -    }
  -
       private static boolean isSnapshot( Artifact artifact )
       {
           return artifact.getVersion().endsWith( "SNAPSHOT" );
  
  
  
  1.16      +20 -15    maven-components/maven-artifact/src/main/resources/META-INF/plexus/components.xml
  
  Index: components.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/main/resources/META-INF/plexus/components.xml,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- components.xml	24 Mar 2005 05:18:41 -0000	1.15
  +++ components.xml	24 Mar 2005 08:45:37 -0000	1.16
  @@ -2,12 +2,32 @@
     <components>
       <!--
        |
  +     | WagonManager
  +     |
  +     -->
  +    <component>
  +      <role>org.apache.maven.artifact.manager.WagonManager</role>
  +      <implementation>org.apache.maven.artifact.manager.DefaultWagonManager</implementation>
  +      <requirements>
  +        <requirement>
  +          <role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
  +        </requirement>
  +      </requirements>
  +    </component>
  +
  +    <!--
  +     |
        | Transformations
        |
        -->
       <component>
         <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
         <implementation>org.apache.maven.artifact.transform.SnapshotTransformation</implementation>
  +      <requirements>
  +        <requirement>
  +          <role>org.apache.maven.artifact.manager.WagonManager</role>
  +        </requirement>
  +      </requirements>
       </component>
   
       <!--
  @@ -34,21 +54,6 @@
   
       <!--
        |
  -     | WagonManager
  -     |
  -     -->
  -    <component>
  -      <role>org.apache.maven.artifact.manager.WagonManager</role>
  -      <implementation>org.apache.maven.artifact.manager.DefaultWagonManager</implementation>
  -      <requirements>
  -        <requirement>
  -          <role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
  -        </requirement>
  -      </requirements>
  -    </component>
  -    
  -    <!--
  -     |
        | ArtifactInstaller
        |
        -->
  
  
  
  1.3       +2 -2      maven-components/maven-artifact/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java
  
  Index: ArtifactDeployerTest.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-artifact/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ArtifactDeployerTest.java	23 Oct 2004 13:33:59 -0000	1.2
  +++ ArtifactDeployerTest.java	24 Mar 2005 08:45:37 -0000	1.3
  @@ -50,7 +50,7 @@
   
           Artifact artifact = createArtifact( "artifact", "1.0" );
   
  -        artifactDeployer.deploy( artifactBasedir, artifact, remoteRepository() );
  +        artifactDeployer.deploy( artifactBasedir, artifact, remoteRepository(), localRepository() );
   
           assertRemoteArtifactPresent( artifact );
       }