Author: bentmann
Date: Sat Sep 12 20:01:59 2009
New Revision: 814226

URL: http://svn.apache.org/viewvc?rev=814226&view=rev
Log:
o Fixed handling of metadata for dependencies outside of reactor

Added:
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar
   (with props)
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar
   (with props)
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
   (with props)
    
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
   (with props)
Modified:
    maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml
    
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh
    
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java

Modified: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml?rev=814226&r1=814225&r2=814226&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml 
(original)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml 
Sat Sep 12 20:01:59 2009
@@ -50,6 +50,18 @@
       <version>0.3-SNAPSHOT</version>
       <type>pom</type>
     </dependency>
+    <!-- two dependencies from the same g:a but with different versions -->
+    <dependency>
+      <groupId>org.apache.maven.its</groupId>
+      <artifactId>dep</artifactId>
+      <version>1.0</version>
+      <classifier>tests</classifier>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.its</groupId>
+      <artifactId>dep</artifactId>
+      <version>2.0</version>
+    </dependency>
   </dependencies>
 
   <repositories>

Added: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar?rev=814226&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom?rev=814226&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
 (added)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
 Sat Sep 12 20:01:59 2009
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>dep</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+</project>

Added: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar?rev=814226&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom?rev=814226&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
 (added)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
 Sat Sep 12 20:01:59 2009
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>dep</artifactId>
+  <packaging>jar</packaging>
+  <version>2.0</version>
+</project>

Added: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml?rev=814226&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
 (added)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
 Sat Sep 12 20:01:59 2009
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>dep</artifactId>
+  <versioning>
+    <latest>2.0</latest>
+    <release>2.0</release>
+    <versions>
+      <version>1.0</version>
+      <version>2.0</version>
+    </versions>
+    <lastUpdated>20081020164906</lastUpdated>
+  </versioning>
+</metadata>

Propchange: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh?rev=814226&r1=814225&r2=814226&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh 
(original)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh 
Sat Sep 12 20:01:59 2009
@@ -2,6 +2,9 @@
 import java.util.*;
 import java.util.regex.*;
 
+import org.codehaus.plexus.util.*;
+import org.codehaus.plexus.util.xml.*;
+
 try
 {
     File itRepoDir = new File( basedir, "target/it-repo" );
@@ -15,11 +18,25 @@
     String[] files = {
             "junit/junit/3.8.2/junit-3.8.2.pom",
             "junit/junit/3.8.2/junit-3.8.2.jar",
+            "junit/junit/maven-metadata-local.xml",
             
"org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-SNAPSHOT.pom",
             
"org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-SNAPSHOT.jar",
+            
"org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/maven-metadata-local.xml",
+            "org/apache/maven/its/minvoker-70/maven-metadata-local.xml",
             
"org/apache/maven/its/parent-b/0.1-SNAPSHOT/parent-b-0.1-SNAPSHOT.pom",
+            
"org/apache/maven/its/parent-b/0.1-SNAPSHOT/maven-metadata-local.xml",
+            "org/apache/maven/its/parent-b/maven-metadata-local.xml",
             
"org/apache/maven/its/parent-a/0.1-SNAPSHOT/parent-a-0.1-SNAPSHOT.pom",
+            
"org/apache/maven/its/parent-a/0.1-SNAPSHOT/maven-metadata-local.xml",
+            "org/apache/maven/its/parent-a/maven-metadata-local.xml",
             "org/apache/maven/its/pom/0.3-SNAPSHOT/pom-0.3-SNAPSHOT.pom",
+            "org/apache/maven/its/pom/0.3-SNAPSHOT/maven-metadata-local.xml",
+            "org/apache/maven/its/pom/maven-metadata-local.xml",
+            "org/apache/maven/its/dep/1.0/dep-1.0.pom",
+            "org/apache/maven/its/dep/1.0/dep-1.0-tests.jar",
+            "org/apache/maven/its/dep/2.0/dep-2.0.pom",
+            "org/apache/maven/its/dep/2.0/dep-2.0.jar",
+            "org/apache/maven/its/dep/maven-metadata-local.xml",
       };
     for ( String file : files )
     {
@@ -30,6 +47,24 @@
             throw new IllegalStateException( "Missing: " + stagedFile );
         }
     }
+
+    Reader reader = ReaderFactory.newXmlReader( new File( itRepoDir, 
"org/apache/maven/its/dep/maven-metadata-local.xml" ) );
+    Xpp3Dom dom = Xpp3DomBuilder.build( reader );
+    IOUtil.close( reader );
+
+    if ( dom.getChild( "versioning" ).getChild( "versions" ).getChildCount() 
!= 2 )
+    {
+        throw new IllegalStateException( "Invalid version number count in 
metadata" );
+    }
+
+    List versions = new ArrayList();
+    versions.add( dom.getChild( "versioning" ).getChild( "versions" 
).getChild( 0 ).getValue() );
+    versions.add( dom.getChild( "versioning" ).getChild( "versions" 
).getChild( 1 ).getValue() );
+    Collections.sort( versions );
+    if ( !versions.equals( Arrays.asList( new String[] { "1.0", "2.0" } ) ) )
+    {
+        throw new IllegalStateException( "Invalid version numbers in metadata: 
" + versions );
+    }
 }
 catch( Throwable t )
 {

Modified: 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java?rev=814226&r1=814225&r2=814226&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
 Sat Sep 12 20:01:59 2009
@@ -31,7 +31,6 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.installer.ArtifactInstaller;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 import org.apache.maven.model.Model;
@@ -271,11 +270,7 @@
 
                 copyFileIfDifferent( file, destination );
 
-                for ( Iterator it = artifact.getMetadataList().iterator(); 
it.hasNext(); )
-                {
-                    ArtifactMetadata metadata = (ArtifactMetadata) it.next();
-                    metadata.storeInLocalRepository( testRepository, 
testRepository );
-                }
+                MetadataUtils.createMetadata( destination, artifact );
             }
             else
             {
@@ -467,7 +462,7 @@
 
                 if ( pomFile.isFile() )
                 {
-                    if ( !pomFile.equals( artifactFile ) )
+                    if ( !pomArtifact.getId().equals( depArtifact.getId() ) )
                     {
                         copyArtifact( pomFile, pomArtifact, testRepository );
                     }
@@ -526,7 +521,7 @@
     {
         Artifact pomArtifact = artifactFactory.createProjectArtifact( groupId, 
artifactId, version );
 
-        if ( installedArtifacts.contains( pomArtifact.getId() ) )
+        if ( installedArtifacts.contains( pomArtifact.getId() ) || 
copiedArtifacts.contains( pomArtifact.getId() ) )
         {
             getLog().debug( "Not re-installing " + pomArtifact );
             return;

Added: 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java?rev=814226&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
 (added)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
 Sat Sep 12 20:01:59 2009
@@ -0,0 +1,186 @@
+package org.apache.maven.plugin.invoker;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.maven.artifact.Artifact;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.Xpp3DomUtils;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Provides utility methods for artifact metadata processing.
+ * 
+ * @author Benjamin Bentmann
+ */
+class MetadataUtils
+{
+
+    /**
+     * Creates local metadata files for the specified artifact. The goal is to 
simulate the installation of the artifact
+     * by a local build, thereby decoupling the forked builds from the 
inderministic collection of remote repositories
+     * that are available to the main build and from which the artifact was 
originally resolved.
+     * 
+     * @param file The artifact's file in the local test repository, must not 
be <code>null</code>.
+     * @param artifact The artifact to create metadata for, must not be 
<code>null</code>.
+     * @throws IOException If the metadata could not be created.
+     */
+    public static void createMetadata( File file, Artifact artifact )
+        throws IOException
+    {
+        TimeZone tz = java.util.TimeZone.getTimeZone( "UTC" );
+        SimpleDateFormat fmt = new SimpleDateFormat( "yyyyMMddHHmmss" );
+        fmt.setTimeZone( tz );
+        String timestamp = fmt.format( new Date() );
+
+        if ( artifact.isSnapshot() )
+        {
+            File metadataFile = new File( file.getParentFile(), 
"maven-metadata-local.xml" );
+
+            Xpp3Dom metadata = new Xpp3Dom( "metadata" );
+            addChild( metadata, "groupId", artifact.getGroupId() );
+            addChild( metadata, "artifactId", artifact.getArtifactId() );
+            addChild( metadata, "version", artifact.getBaseVersion() );
+            Xpp3Dom versioning = new Xpp3Dom( "versioning" );
+            versioning.addChild( addChild( new Xpp3Dom( "snapshot" ), 
"localCopy", "true" ) );
+            addChild( versioning, "lastUpdated", timestamp );
+            metadata.addChild( versioning );
+
+            writeMetadata( metadataFile, metadata );
+        }
+
+        {
+            File metadataFile = new File( 
file.getParentFile().getParentFile(), "maven-metadata-local.xml" );
+
+            Set allVersions = new LinkedHashSet();
+
+            Xpp3Dom metadata = readMetadata( metadataFile );
+
+            if ( metadata != null )
+            {
+                Xpp3Dom versioning = metadata.getChild( "versioning" );
+                if ( versioning != null )
+                {
+                    Xpp3Dom versions = versioning.getChild( "versions" );
+                    if ( versions != null )
+                    {
+
+                        Xpp3Dom[] children = versions.getChildren( "version" );
+                        for ( int i = 0; i < children.length; i++ )
+                        {
+                            allVersions.add( children[i].getValue() );
+                        }
+                    }
+                }
+            }
+
+            allVersions.add( artifact.getBaseVersion() );
+
+            metadata = new Xpp3Dom( "metadata" );
+            addChild( metadata, "groupId", artifact.getGroupId() );
+            addChild( metadata, "artifactId", artifact.getArtifactId() );
+            Xpp3Dom versioning = new Xpp3Dom( "versioning" );
+            versioning.addChild( addChildren( new Xpp3Dom( "versions" ), 
"version", allVersions ) );
+            addChild( versioning, "lastUpdated", timestamp );
+            metadata.addChild( versioning );
+
+            metadata = Xpp3DomUtils.mergeXpp3Dom( metadata, readMetadata( 
metadataFile ) );
+
+            writeMetadata( metadataFile, metadata );
+        }
+    }
+
+    private static Xpp3Dom addChild( Xpp3Dom parent, String childName, String 
childValue )
+    {
+        Xpp3Dom child = new Xpp3Dom( childName );
+        child.setValue( childValue );
+        parent.addChild( child );
+        return parent;
+    }
+
+    private static Xpp3Dom addChildren( Xpp3Dom parent, String childName, 
Collection childValues )
+    {
+        for ( Iterator it = childValues.iterator(); it.hasNext(); )
+        {
+            String childValue = (String) it.next();
+            addChild( parent, childName, childValue );
+        }
+        return parent;
+    }
+
+    private static Xpp3Dom readMetadata( File metadataFile )
+        throws IOException
+    {
+        if ( !metadataFile.isFile() )
+        {
+            return null;
+        }
+
+        Reader reader = ReaderFactory.newXmlReader( metadataFile );
+        try
+        {
+            try
+            {
+                return Xpp3DomBuilder.build( reader );
+            }
+            catch ( XmlPullParserException e )
+            {
+                throw (IOException) new IOException( e.getMessage() 
).initCause( e );
+            }
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+    }
+
+    private static void writeMetadata( File metadataFile, Xpp3Dom metadata )
+        throws IOException
+    {
+        metadataFile.getParentFile().mkdirs();
+
+        Writer writer = WriterFactory.newXmlWriter( metadataFile );
+        try
+        {
+            Xpp3DomWriter.write( writer, metadata );
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
+    }
+
+}

Propchange: 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision


Reply via email to