You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ev...@apache.org on 2005/05/16 18:27:53 UTC

svn commit: r170406 - /maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver /maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin /maven/components/trunk/maven-plugins/maven-release-plugin /maven/components/trunk/maven-plugins/maven-release-plugin/src /maven/components/trunk/maven-plugins/maven-release-plugin/src/main /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release /maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm /maven/components/trunk/maven-project/src/main/java/org/apache/maven/project

Author: evenisse
Date: Mon May 16 09:27:51 2005
New Revision: 170406

URL: http://svn.apache.org/viewcvs?rev=170406&view=rev
Log:
Start of release plugin

Added:
    maven/components/trunk/maven-plugins/maven-release-plugin/
    maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml
    maven/components/trunk/maven-plugins/maven-release-plugin/src/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/ReleaseMojo.java
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/
    maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java
Modified:
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=170406&r1=170405&r2=170406&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Mon May 16 09:27:51 2005
@@ -67,6 +67,11 @@
     public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactResolutionException
     {
+        if ( artifact == null )
+        {
+            return;
+        }
+
         // ----------------------------------------------------------------------
         // Check for the existence of the artifact in the specified local
         // ArtifactRepository. If it is present then simply return as the

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=170406&r1=170405&r2=170406&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Mon May 16 09:27:51 2005
@@ -832,6 +832,19 @@
             // TODO: should I get the modified artifacts back into the project?
             artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
         }
+
+        Set pluginArtifacts = new HashSet();
+        for ( Iterator it = context.getProject().getPluginArtifacts().iterator(); it.hasNext(); )
+        {
+            Artifact artifact = (Artifact) it.next();
+
+            artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
+getLogger().info( "=======>" + artifact.getArtifactId() + "/" + artifact.getVersion() + "/" + artifact.getBaseVersion() );
+            pluginArtifacts.add( artifact );
+        }
+        context.getProject().setPluginArtifacts( pluginArtifacts );
+
+        artifactResolver.resolve( context.getProject().getParentArtifact(), context.getRemoteRepositories(), context.getLocalRepository() );
     }
 
 }

Added: maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml?rev=170406&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml (added)
+++ maven/components/trunk/maven-plugins/maven-release-plugin/pom.xml Mon May 16 09:27:51 2005
@@ -0,0 +1,45 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>maven-plugin-parent</artifactId>
+    <groupId>org.apache.maven.plugins</groupId>
+    <version>2.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>maven-release-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>maven-plugin</packaging>
+  <name>Maven Release plugin</name>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-api</artifactId>
+      <version>1.0-alpha-1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-cvs</artifactId>
+      <version>1.0-alpha-1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-svn</artifactId>
+      <version>1.0-alpha-1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-provider-api</artifactId>
+      <version>1.0-alpha-3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-file</artifactId>
+      <version>1.0-alpha-3</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/ReleaseMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/ReleaseMojo.java?rev=170406&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/ReleaseMojo.java (added)
+++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/ReleaseMojo.java Mon May 16 09:27:51 2005
@@ -0,0 +1,411 @@
+package org.apache.maven.plugin.release;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ * 
+ * Licensed 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 org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.transform.ReleaseArtifactTransformation;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.scm.ScmBean;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.manager.ScmManager;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @goal release
+ * @description Release plugin
+ * @requiresDependencyResolution test
+ *
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $
+ */
+public class ReleaseMojo
+    extends AbstractMojo
+    implements Contextualizable
+{
+    /**
+     * @parameter expression="${basedir}"
+     * @required
+     * @readonly
+     */
+    private String basedir;
+
+    /**
+     * @parameter expression="${project.build.directory}/checkout"
+     * @required
+     */
+    private String workingDirectory;
+
+    /**
+     * @parameter expression="${project.scm.developerConnection}"
+     * @required
+     */
+    private String urlScm;
+
+    /**
+     * @parameter expression="${username}"
+     */
+    private String username;
+
+    /**
+     * @parameter expression="${password}"
+     */
+    private String password;
+
+    /**
+     * @parameter expression="${tagBase}"
+     */
+    private String tagBase = "../tags";
+
+    /**
+     * @parameter expression="${tag}"
+     */
+    private String tag;
+
+    /**
+     * @parameter expression="${project.artifacts}"
+     * @readonly
+     */
+    private Set dependencies;
+
+    /**
+     * @parameter expression="${project.pluginArtifacts}"
+     * @readonly
+     */
+    private Set plugins;
+
+    /**
+     * @parameter expression="${localRepository}"
+     * @required
+     * @readonly
+     */
+    private ArtifactRepository localRepository;
+
+    /**
+     * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
+     * @required
+     * @readonly
+     */
+    private ArtifactFactory artifactFactory;
+
+    /**
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    private PlexusContainer container;
+
+    private ScmManager scmManager;
+
+    private static final String SNAPSHOT = "-SNAPSHOT";
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        try
+        {
+            initScmManager();
+        }
+        catch ( Exception e )
+        {
+            throw new MojoExecutionException( "Can't initialize ReleaseMojo.", e );
+        }
+
+        try
+        {
+            prepareRelease();
+
+            performRelease();
+        }
+        finally
+        {
+            releaseScmManager();
+        }
+    }
+
+    private void prepareRelease()
+        throws MojoExecutionException
+    {
+        //checkStatus();
+
+        checkDependencies();
+
+        transformPom();
+
+        //commit();
+
+        //tag();
+    }
+
+    private void performRelease()
+        throws MojoExecutionException
+    {
+        //checkout();
+    }
+
+    private boolean isSnapshot( String version )
+    {
+        return version.endsWith( SNAPSHOT );
+    }
+
+    private ScmBean getScm()
+    {
+        ScmBean scm = new ScmBean();
+        scm.setScmManager( scmManager );
+        scm.setUrl( urlScm );
+        scm.setTag( tag );
+        scm.setTagBase( tagBase );
+        scm.setUsername( username );
+        scm.setPassword( password );
+        scm.setWorkingDirectory( workingDirectory );
+        return scm;
+    }
+
+    private void checkDependencies()
+        throws MojoExecutionException
+    {
+        MavenProject currentProject = project;
+        while ( currentProject.hasParent() )
+        {
+            Artifact parentArtifact = currentProject.getParentArtifact();
+
+            if ( isSnapshot( parentArtifact.getVersion() ) )
+            {
+//                throw new MojoExecutionException( "Can't release project due to non released parent." );
+            }
+
+            currentProject = project.getParent();
+        }
+
+        List snapshotDependencies = new ArrayList();
+
+        for ( Iterator i = dependencies.iterator(); i.hasNext(); )
+        {
+            Artifact artifact = (Artifact) i.next();
+            if ( isSnapshot( artifact.getVersion() ) )
+            {
+                snapshotDependencies.add( artifact );
+            }
+        }
+        for ( Iterator i = plugins.iterator(); i.hasNext(); )
+        {
+            Artifact artifact = (Artifact) i.next();
+            if ( isSnapshot( artifact.getVersion() ) )
+            {
+                snapshotDependencies.add( artifact );
+            }
+        }
+        if ( !snapshotDependencies.isEmpty() )
+        {
+            Collections.sort( snapshotDependencies );
+            StringBuffer message = new StringBuffer();
+            for ( Iterator i = snapshotDependencies.iterator(); i.hasNext(); )
+            {
+                Artifact artifact = (Artifact) i.next();
+                message.append( "    " );
+                message.append( artifact.getGroupId() );
+                message.append( ":" );
+                message.append( artifact.getArtifactId() );
+                message.append( ":" );
+                message.append( artifact.getVersion() );
+                message.append( "\n" );
+            }
+//            throw new MojoExecutionException( "Can't release project due to non released dependencies :\n" +
+//                                              message.toString() );
+        }
+    }
+
+    private void checkStatus()
+        throws MojoExecutionException
+    {
+        List changedFiles;
+        try
+        {
+            ScmBean scm = getScm();
+            scm.setWorkingDirectory( basedir );
+            changedFiles = scm.getStatus();
+        }
+        catch ( ScmException e )
+        {
+            throw new MojoExecutionException( "An error is occurred in the status process.", e );
+        }
+        finally
+        {
+            releaseScmManager();
+        }
+
+        if ( !changedFiles.isEmpty() )
+        {
+            StringBuffer message = new StringBuffer();
+            for ( Iterator i = changedFiles.iterator(); i.hasNext(); )
+            {
+                ScmFile file = (ScmFile) i.next();
+                message.append( file.toString() );
+                message.append( "\n" );
+            }
+            throw new MojoExecutionException( "You have some uncommitted files : \n" + message.toString() );
+        }
+    }
+
+    private void transformPom()
+        throws MojoExecutionException
+    {
+        Model model = project.getModel();
+        if ( !isSnapshot( model.getVersion() ) )
+        {
+            throw new MojoExecutionException( "This project isn't a snapshot (" + model.getVersion() + ")." );
+        }
+
+        //Rewrite project version
+        model.setVersion( model.getVersion().substring( 0, model.getVersion().length() - SNAPSHOT.length() ) );
+
+        //Rewrite parent version
+        if ( project.hasParent() )
+        {
+            if ( isSnapshot( project.getParentArtifact().getBaseVersion() ) )
+            {
+                model.getParent().setVersion( project.getParentArtifact().getVersion() );
+            }
+        }
+
+        //Rewrite dependencies version
+        for ( Iterator i = dependencies.iterator(); i.hasNext(); )
+        {
+            Artifact artifact = (Artifact) i.next();
+            if ( isSnapshot( artifact.getBaseVersion() ) )
+            {
+                for ( Iterator j = model.getDependencies().iterator(); j.hasNext(); )
+                {
+                    Dependency dependency = (Dependency) j.next();
+                    if ( artifact.getGroupId().equals( dependency.getGroupId() ) &&
+                         artifact.getArtifactId().equals( dependency.getArtifactId() ) &&
+                         artifact.getBaseVersion().equals( dependency.getVersion() ) &&
+                         artifact.getType().equals( dependency.getType() ) )
+                    {
+                        dependency.setVersion( artifact.getVersion() );
+                    }
+                }
+            }
+        }
+
+        //Rewrite plugins version
+        //TODO Resolve version
+        for ( Iterator i = plugins.iterator(); i.hasNext(); )
+        {
+            Artifact artifact = (Artifact) i.next();
+            if ( isSnapshot( artifact.getBaseVersion() ) )
+            {
+                for ( Iterator j = model.getBuild().getPlugins().iterator(); j.hasNext(); )
+                {
+                    Plugin plugin = (Plugin) j.next();
+                    if ( artifact.getGroupId().equals( plugin.getGroupId() ) &&
+                         artifact.getArtifactId().equals( plugin.getArtifactId() ) )
+                    {
+						plugin.setGroupId( artifact.getGroupId() );
+                        plugin.setVersion( artifact.getVersion() );
+                    }
+                }
+            }
+        }
+
+        MavenXpp3Writer modelWriter = new MavenXpp3Writer();
+        try
+        {
+			//TODO: Write in pom file
+            java.io.StringWriter writer = new java.io.StringWriter();
+            modelWriter.write( writer, model );
+            getLog().info( writer.toString() );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Can't update pom.", e );
+        }
+    }
+
+    private void tag()
+        throws MojoExecutionException
+    {
+        try
+        {
+            getScm().tag();
+        }
+        catch ( Exception e )
+        {
+            throw new MojoExecutionException( "An error is occurred in the tag process.", e );
+        }
+    }
+
+    private void checkout()
+        throws MojoExecutionException
+    {
+        try
+        {
+            getScm().checkout();
+        }
+        catch ( Exception e )
+        {
+            throw new MojoExecutionException( "An error is occurred in the checkout process.", e );
+        }
+    }
+
+    private void initScmManager()
+        throws Exception
+    {
+        scmManager = (ScmManager) container.lookup( ScmManager.ROLE );
+    }
+
+    private void releaseScmManager()
+    {
+        try
+        {
+            container.release( scmManager );
+        }
+        catch ( Exception e )
+        {
+            getLog().warn( "Error releasing component - ignoring", e );
+        }
+    }
+
+    public void contextualize( Context context )
+        throws ContextException
+    {
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+    }
+}

Added: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java?rev=170406&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java (added)
+++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/scm/ScmBean.java Mon May 16 09:27:51 2005
@@ -0,0 +1,255 @@
+package org.apache.maven.plugin.scm;
+
+/* ====================================================================
+ *   Copyright 2001-2005 The Apache Software Foundation.
+ *
+ *   Licensed 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 org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+import org.codehaus.plexus.embed.Embedder;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * A bean for using the Maven SCM API.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $
+ */
+public class ScmBean
+{
+    private String username;
+
+    private String password;
+
+    private String url;
+
+    private String tag;
+
+    private String workingDirectory;
+
+    // note - this should not have a setter
+    private File checkoutDirectory;
+
+    private String tagBase;
+
+    private ScmManager scmManager;
+
+    private ScmManager getScmManager()
+        throws ScmException
+    {
+        if ( scmManager == null )
+        {
+            throw new ScmException( "scmManager isn't define." );
+        }
+
+        return scmManager;
+    }
+
+    private ScmRepository getScmRepository()
+        throws ScmException
+    {
+        ScmRepository repository;
+
+        try
+        {
+            repository = getScmManager().makeScmRepository( url );
+
+            if ( repository.getProvider().equals( "svn" ) )
+            {
+                SvnScmProviderRepository svnRepo = (SvnScmProviderRepository) repository.getProviderRepository();
+
+                if ( username != null && username.length() > 0 )
+                {
+                    svnRepo.setUser( username );
+                }
+                if ( password != null && password.length() > 0 )
+                {
+                    svnRepo.setPassword( password );
+                }
+                if ( tagBase != null && tagBase.length() > 0 )
+                {
+                    svnRepo.setTagBase( tagBase );
+                }
+            }
+        }
+        catch( Exception e )
+        {
+            throw new ScmException( "Can't load the scm provider.", e );
+        }
+
+        return repository;
+    }
+
+    private void checkResult( ScmResult result )
+        throws ScmException
+    {
+        if ( !result.isSuccess() )
+        {
+            // TODO: improve error handling
+            System.err.println( "Provider message:" );
+            System.err.println( result.getProviderMessage() );
+            System.err.println( "Command output:" );
+            System.err.println( result.getCommandOutput() );
+            throw new ScmException( "Error!" );
+        }
+    }
+
+    public void checkout()
+        throws ScmException, IOException
+    {
+        ScmRepository repository = getScmRepository();
+
+        checkoutDirectory = new File( workingDirectory );
+        if ( checkoutDirectory.exists() )
+        {
+            // TODO: sanity check that it is not . or .. or lower
+            FileUtils.deleteDirectory( checkoutDirectory );
+        }
+        checkoutDirectory.mkdirs();
+
+        CheckOutScmResult result = getScmManager().checkOut( repository, new ScmFileSet( checkoutDirectory ), tag );
+
+        checkResult( result );
+    }
+
+    public void update()
+        throws ScmException
+    {
+        ScmRepository repository = getScmRepository();
+
+        checkoutDirectory = new File( workingDirectory );
+
+        // TODO: want includes/excludes?
+        UpdateScmResult result = getScmManager().update( repository, new ScmFileSet( new File( workingDirectory ) ), tag );
+
+        checkResult( result );
+    }
+
+    public List getStatus()
+        throws ScmException
+    {
+        List changedFiles;
+
+        ScmRepository repository = getScmRepository();
+
+        // TODO: want includes/excludes?
+        StatusScmResult result = getScmManager().status( repository, new ScmFileSet( new File( workingDirectory ) ) );
+
+        checkResult( result );
+
+        changedFiles = result.getChangedFiles();
+
+        return changedFiles;
+    }
+
+    public void tag()
+        throws ScmException
+    {
+        ScmRepository repository = getScmRepository();
+
+        // TODO: want includes/excludes?
+        TagScmResult result = getScmManager().tag( repository, new ScmFileSet( new File( workingDirectory ) ), tag );
+
+        checkResult( result );
+    }
+
+    public void setScmManager( ScmManager scmManager )
+    {
+        this.scmManager = scmManager;
+    }
+
+    public void setUrl( String url )
+    {
+        this.url = url;
+    }
+
+    public String getUrl()
+    {
+        return url;
+    }
+
+    public void setTag( String tag )
+    {
+        this.tag = tag;
+    }
+
+    public String getTag()
+    {
+        return tag;
+    }
+
+    public void setWorkingDirectory( String workingDirectory )
+    {
+        this.workingDirectory = workingDirectory;
+    }
+
+    public String getWorkingDirectory()
+    {
+        return workingDirectory;
+    }
+
+    public File getCheckoutDirectory()
+    {
+        return checkoutDirectory;
+    }
+
+    public String getTagBase()
+    {
+        return tagBase;
+    }
+
+    public void setTagBase( String tagBase )
+    {
+        this.tagBase = tagBase;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername( String username )
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+}
+

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=170406&r1=170405&r2=170406&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon May 16 09:27:51 2005
@@ -25,11 +25,13 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.transform.ReleaseArtifactTransformation;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
@@ -279,8 +281,20 @@
         }
 
         project.setParent( parentProject );
+
+        if ( parentProject != null )
+        {
+            Artifact parentArtifact = artifactFactory.createArtifact( parentProject.getGroupId(),
+                                                                      parentProject.getArtifactId(),
+                                                                      parentProject.getVersion(),
+                                                                      null,
+                                                                      "pom", null );
+            project.setParentArtifact( parentArtifact );
+        }
+
         project.setRemoteArtifactRepositories( remoteRepositories );
         project.setArtifacts( createArtifacts( project.getDependencies() ) );
+        project.setPluginArtifacts( createPluginArtifacts( project.getBuildPlugins() ) );
 
         ModelValidationResult validationResult = validator.validate( model );
 
@@ -336,6 +350,8 @@
             MavenProject parent = assembleLineage( model, lineage, aggregatedRemoteWagonRepositories, localRepository );
 
             project.setParent( parent );
+
+            project.setParentArtifact( artifact );
         }
 
         return project;
@@ -477,6 +493,35 @@
         }
 
         return projectArtifacts;
+    }
+
+    protected Set createPluginArtifacts( List plugins )
+    {
+        Set pluginArtifacts = new HashSet();
+
+        for ( Iterator i = plugins.iterator(); i.hasNext(); )
+        {
+            Plugin p = (Plugin) i.next();
+
+            String version;
+            if ( StringUtils.isEmpty( p.getVersion() ) )
+            {
+                version = ReleaseArtifactTransformation.RELEASE_VERSION;
+            }
+            else
+            {
+                version = p.getVersion();
+            }
+
+            Artifact artifact = artifactFactory.createArtifact( p.getGroupId(), p.getArtifactId(), version,
+                                                                null, "maven-plugin", null );
+            if ( artifact != null )
+            {
+                pluginArtifacts.add( artifact );
+            }
+        }
+
+        return pluginArtifacts;
     }
 
     public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=170406&r1=170405&r2=170406&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Mon May 16 09:27:51 2005
@@ -73,6 +73,10 @@
 
     private Set artifacts;
 
+    private Artifact parentArtifact;
+
+    private Set pluginArtifacts;
+
     private List remoteArtifactRepositories;
 
     private List collectedProjects = Collections.EMPTY_LIST;
@@ -666,6 +670,26 @@
     public Set getArtifacts()
     {
         return artifacts;
+    }
+
+    public void setPluginArtifacts( Set pluginArtifacts )
+    {
+        this.pluginArtifacts = pluginArtifacts;
+    }
+
+    public Set getPluginArtifacts()
+    {
+        return pluginArtifacts;
+    }
+
+    public void setParentArtifact( Artifact parentArtifact )
+    {
+        this.parentArtifact = parentArtifact;
+    }
+
+    public Artifact getParentArtifact()
+    {
+        return parentArtifact;
     }
 
     public List getRepositories()



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org