You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/09/08 10:28:21 UTC

svn commit: r279535 - in /maven/components/trunk: maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ maven-mboot2/src/main/java/ maven-mboot2/src/main/java/download/

Author: brett
Date: Thu Sep  8 01:28:06 2005
New Revision: 279535

URL: http://svn.apache.org/viewcvs?rev=279535&view=rev
Log:
PR: MNG-613
use new metadata in bootstrap

Added:
    maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java   (with props)
Modified:
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
    maven/components/trunk/maven-mboot2/src/main/java/MBoot.java
    maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java?rev=279535&r1=279534&r2=279535&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java Thu Sep  8 01:28:06 2005
@@ -26,7 +26,6 @@
  * @todo merge with artifactmetadatasource
  * @todo retrieval exception not appropriate for store
  * @todo not happy about the store/retrieve methods - they use "this"
- * @todo separate specific interfaces
  */
 public interface ArtifactMetadata
 {

Modified: maven/components/trunk/maven-mboot2/src/main/java/MBoot.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/MBoot.java?rev=279535&r1=279534&r2=279535&view=diff
==============================================================================
--- maven/components/trunk/maven-mboot2/src/main/java/MBoot.java (original)
+++ maven/components/trunk/maven-mboot2/src/main/java/MBoot.java Thu Sep  8 01:28:06 2005
@@ -1,6 +1,7 @@
 import compile.CompilerConfiguration;
 import compile.JavacCompiler;
 import download.ArtifactDownloader;
+import download.RepositoryMetadata;
 import jar.JarMojo;
 import model.Dependency;
 import model.ModelReader;
@@ -11,17 +12,14 @@
 import util.AbstractReader;
 import util.Commandline;
 import util.FileUtils;
-import util.IOUtil;
 import util.IsolatedClassLoader;
 import util.Os;
 
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.StringReader;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -815,22 +813,12 @@
 
         System.out.println( "Installing: " + file );
 
-        if ( version.indexOf( "SNAPSHOT" ) >= 0 )
-        {
-            // TODO: replace
-            File metadata = localRepository.getMetadataFile( groupId, artifactId, version, type,
-                                                             finalName + ".version.txt" );
-
-            metadata.getParentFile().mkdirs();
-
-            IOUtil.copy( new StringReader( version ), new FileWriter( metadata ) );
-        }
-
         FileUtils.copyFile( new File( basedir, BUILD_DIR + "/" + finalName + ".jar" ), file );
 
-        // TODO: replace
+        RepositoryMetadata metadata = new RepositoryMetadata();
+        metadata.setReleaseVersion( version );
         file = localRepository.getMetadataFile( groupId, artifactId, null, type, artifactId + "-RELEASE.version.txt" );
-        IOUtil.copy( new StringReader( version ), new FileWriter( file ) );
+        metadata.write( file );
     }
 
     private void runTests( String basedir, String classes, String testClasses, ModelReader reader,

Modified: maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java?rev=279535&r1=279534&r2=279535&view=diff
==============================================================================
--- maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java (original)
+++ maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java Thu Sep  8 01:28:06 2005
@@ -136,48 +136,114 @@
                 String version = dep.getVersion();
                 if ( snapshot )
                 {
-                    // TODO: augment with maven-metadata
-                    String filename = getSnapshotMetadataFile( destinationFile.getName(), "SNAPSHOT.version.txt" );
-                    File file = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
-                                                                 dep.getVersion(), dep.getType(), filename );
+                    String filename = "maven-metadata-" + remoteRepo.getId() + ".xml";
+                    File localFile = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
+                                                                      dep.getVersion(), dep.getType(),
+                                                                      "maven-metadata-local.xml" );
+                    File remoteFile = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
+                                                                       dep.getVersion(), dep.getType(), filename );
                     String metadataPath = remoteRepo.getMetadataPath( dep.getGroupId(), dep.getArtifactId(),
                                                                       dep.getVersion(), dep.getType(), filename );
                     String metaUrl = remoteRepo.getBasedir() + "/" + metadataPath;
                     log( "Downloading " + metaUrl );
                     try
                     {
-                        HttpUtils.getFile( metaUrl, file, ignoreErrors, true, proxyHost, proxyPort, proxyUserName,
+                        HttpUtils.getFile( metaUrl, remoteFile, ignoreErrors, true, proxyHost, proxyPort, proxyUserName,
                                            proxyPassword, false );
                     }
                     catch ( IOException e )
                     {
-                        log( "WARNING: remote SNAPSHOT version not found, using local: " + e.getMessage() );
+                        log( "WARNING: remote metadata version not found, using local: " + e.getMessage() );
                     }
 
+                    File file = localFile;
+                    if ( remoteFile.exists() )
+                    {
+                        if ( !localFile.exists() || localFile.lastModified() < remoteFile.lastModified() )
+                        {
+                            file = remoteFile;
+                        }
+                    }
+
+                    boolean found = false;
                     if ( file.exists() )
                     {
-                        version = FileUtils.fileRead( file );
-                        log( "Resolved version: " + version );
-                        dep.setResolvedVersion( version );
-                        if ( !version.endsWith( "SNAPSHOT" ) )
-                        {
-                            String ver = version.substring(
-                                version.lastIndexOf( "-", version.lastIndexOf( "-" ) - 1 ) + 1 );
-                            String extension = url.substring( url.length() - 4 );
-                            url = getSnapshotMetadataFile( url, ver + extension );
+                        log( "Using metadata: " + file );
+
+                        RepositoryMetadata metadata = RepositoryMetadata.read( file );
+
+                        if ( version.equals( metadata.getVersion() ) )
+                        {
+                            found = true;
+                            version = metadata.constructVersion( version );
+                            log( "Resolved version: " + version );
+                            dep.setResolvedVersion( version );
+                            if ( !version.endsWith( "SNAPSHOT" ) )
+                            {
+                                String ver = version.substring(
+                                    version.lastIndexOf( "-", version.lastIndexOf( "-" ) - 1 ) + 1 );
+                                String extension = url.substring( url.length() - 4 );
+                                url = getSnapshotMetadataFile( url, ver + extension );
+                            }
+                            else if ( destinationFile.exists() )
+                            {
+                                // It's already there
+                                return true;
+                            }
                         }
-                        else if ( destinationFile.exists() )
+                        else
                         {
-                            // It's already there
-                            return true;
+                            log( "WARNING: versions did not match, not using metadata (" + version + " vs " +
+                                metadata.getVersion() + ")" );
                         }
                     }
-                    else
+
+                    if ( !found )
                     {
-                        log( "WARNING: local SNAPSHOT version not found, using default" );
+                        log( "WARNING: attempting to use legacy metadata" );
+
+                        filename = getSnapshotMetadataFile( destinationFile.getName(), "SNAPSHOT.version.txt" );
+                        file = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(), dep.getVersion(),
+                                                                dep.getType(), filename );
+                        metadataPath = remoteRepo.getMetadataPath( dep.getGroupId(), dep.getArtifactId(),
+                                                                   dep.getVersion(), dep.getType(), filename );
+                        metaUrl = remoteRepo.getBasedir() + "/" + metadataPath;
+                        log( "Downloading " + metaUrl );
+                        try
+                        {
+                            HttpUtils.getFile( metaUrl, file, ignoreErrors, true, proxyHost, proxyPort, proxyUserName,
+                                               proxyPassword, false );
+                        }
+                        catch ( IOException e )
+                        {
+                            log( "WARNING: remote SNAPSHOT version not found, using local: " + e.getMessage() );
+                        }
+
+                        if ( file.exists() )
+                        {
+                            version = FileUtils.fileRead( file );
+                            log( "Resolved version: " + version );
+                            dep.setResolvedVersion( version );
+                            if ( !version.endsWith( "SNAPSHOT" ) )
+                            {
+                                String ver = version.substring(
+                                    version.lastIndexOf( "-", version.lastIndexOf( "-" ) - 1 ) + 1 );
+                                String extension = url.substring( url.length() - 4 );
+                                url = getSnapshotMetadataFile( url, ver + extension );
+                            }
+                            else if ( destinationFile.exists() )
+                            {
+                                // It's already there
+                                return true;
+                            }
+                        }
+                        else
+                        {
+                            log( "WARNING: local SNAPSHOT version not found, using default" );
+                        }
                     }
                 }
-                if ( !dep.getType().equals( "pom" ) )
+                if ( !"pom".equals( dep.getType() ) )
                 {
                     String name = dep.getArtifactId() + "-" + dep.getResolvedVersion() + ".pom";
                     File file = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),

Added: maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java?rev=279535&view=auto
==============================================================================
--- maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java (added)
+++ maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java Thu Sep  8 01:28:06 2005
@@ -0,0 +1,331 @@
+package download;
+
+/*
+ * 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.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import util.AbstractReader;
+import util.StringUtils;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * TODO: describe
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class RepositoryMetadata
+{
+    private String snapshotTimestamp;
+
+    private int snapshotBuildNumber;
+
+    private String releaseVersion;
+
+    private String groupId;
+
+    private String artifactId;
+
+    private String version;
+
+    private List versions = new ArrayList();
+
+    private String latestVersion;
+
+    public String getSnapshotTimestamp()
+    {
+        return snapshotTimestamp;
+    }
+
+    public void setSnapshotTimestamp( String snapshotTimestamp )
+    {
+        this.snapshotTimestamp = snapshotTimestamp;
+    }
+
+    public int getSnapshotBuildNumber()
+    {
+        return snapshotBuildNumber;
+    }
+
+    public void setSnapshotBuildNumber( int snapshotBuildNumber )
+    {
+        this.snapshotBuildNumber = snapshotBuildNumber;
+    }
+
+    public String getGroupId()
+    {
+        return groupId;
+    }
+
+    public void setGroupId( String groupId )
+    {
+        this.groupId = groupId;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    public List getVersions()
+    {
+        return versions;
+    }
+
+    public void setVersions( List versions )
+    {
+        this.versions = versions;
+    }
+
+    public String getReleaseVersion()
+    {
+        return releaseVersion;
+    }
+
+    public void setReleaseVersion( String releaseVersion )
+    {
+        this.releaseVersion = releaseVersion;
+    }
+
+    public String getLatestVersion()
+    {
+        return latestVersion;
+    }
+
+    public void setLatestVersion( String latestVersion )
+    {
+        this.latestVersion = latestVersion;
+    }
+
+    public void addVersion( String version )
+    {
+        versions.add( version );
+    }
+
+    public static RepositoryMetadata read( File file )
+        throws IOException, ParserConfigurationException, SAXException
+    {
+        RepositoryMetadata metadata = new RepositoryMetadata();
+        new Reader( metadata ).parse( file );
+        return metadata;
+    }
+
+    public void write( File file )
+        throws IOException
+    {
+        new Writer( this ).write( file );
+    }
+
+    public String constructVersion( String baseVersion )
+    {
+        if ( snapshotTimestamp != null )
+        {
+            baseVersion = StringUtils.replace( baseVersion, "SNAPSHOT", snapshotTimestamp + "-" + snapshotBuildNumber );
+        }
+        return baseVersion;
+    }
+
+    static class Reader
+        extends AbstractReader
+    {
+        private boolean insideVersioning;
+
+        private StringBuffer bodyText = new StringBuffer();
+
+        private boolean insideSnapshot;
+
+        private final RepositoryMetadata metadata;
+
+        private boolean insideVersions;
+
+        public Reader( RepositoryMetadata metadata )
+        {
+            this.metadata = metadata;
+        }
+
+        public void startElement( String uri, String localName, String rawName, Attributes attributes )
+        {
+            if ( insideVersioning )
+            {
+                if ( insideSnapshot )
+                {
+                    if ( "buildNumber".equals( rawName ) )
+                    {
+                        metadata.setSnapshotBuildNumber( Integer.valueOf( getBodyText() ).intValue() );
+                    }
+                    else if ( "timestamp".equals( rawName ) )
+                    {
+                        metadata.setSnapshotTimestamp( getBodyText() );
+                    }
+                }
+                else if ( insideVersions )
+                {
+                    if ( "version".equals( rawName ) )
+                    {
+                        metadata.addVersion( getBodyText() );
+                    }
+                }
+                else
+                {
+                    if ( "snapshot".equals( rawName ) )
+                    {
+                        insideSnapshot = true;
+                    }
+                    else if ( "versions".equals( rawName ) )
+                    {
+                        insideVersions = true;
+                    }
+                    else if ( "latest".equals( rawName ) )
+                    {
+                        metadata.setLatestVersion( getBodyText() );
+                    }
+                    else if ( "release".equals( rawName ) )
+                    {
+                        metadata.setReleaseVersion( getBodyText() );
+                    }
+                }
+            }
+            else
+            {
+                // root element
+                if ( "versioning".equals( rawName ) )
+                {
+                    insideVersioning = true;
+                }
+                else if ( "groupId".equals( rawName ) )
+                {
+                    metadata.setGroupId( getBodyText() );
+                }
+                else if ( "artifactId".equals( rawName ) )
+                {
+                    metadata.setArtifactId( getBodyText() );
+                }
+                else if ( "version".equals( rawName ) )
+                {
+                    metadata.setVersion( getBodyText() );
+                }
+            }
+        }
+
+        public void characters( char buffer[], int start, int length )
+        {
+            bodyText.append( buffer, start, length );
+        }
+
+        private String getBodyText()
+        {
+            return bodyText.toString().trim();
+        }
+
+        public void endElement( String uri, String localName, String rawName )
+            throws SAXException
+        {
+            if ( insideVersioning )
+            {
+                if ( "versioning".equals( rawName ) )
+                {
+                    insideVersioning = false;
+                }
+                if ( "snapshot".equals( rawName ) )
+                {
+                    insideSnapshot = false;
+                }
+                if ( "versions".equals( rawName ) )
+                {
+                    insideVersions = false;
+                }
+            }
+            bodyText = new StringBuffer();
+        }
+
+    }
+
+    static class Writer
+    {
+        private final RepositoryMetadata metadata;
+
+        public Writer( RepositoryMetadata metadata )
+        {
+            this.metadata = metadata;
+        }
+
+        public void write( File file )
+            throws IOException
+        {
+            PrintWriter w = new PrintWriter( new FileWriter( file ) );
+
+            try
+            {
+                w.println( "<metadata>" );
+                writeLine( w, "  ", "groupId", metadata.getGroupId() );
+                writeLine( w, "  ", "artifactId", metadata.getArtifactId() );
+                writeLine( w, "  ", "version", metadata.getVersion() );
+                w.println( "  <versioning>" );
+                writeLine( w, "    ", "latest", metadata.getLatestVersion() );
+                writeLine( w, "    ", "release", metadata.getReleaseVersion() );
+                w.println( "    <snapshot>" );
+                writeLine( w, "      ", "buildNumber", String.valueOf( metadata.getSnapshotBuildNumber() ) );
+                writeLine( w, "      ", "timestamp", metadata.getSnapshotTimestamp() );
+                w.println( "    </snapshot>" );
+                w.println( "    <versions>" );
+                for ( Iterator i = metadata.getVersions().iterator(); i.hasNext(); )
+                {
+                    writeLine( w, "      ", "version", (String) i.next() );
+                }
+                w.println( "    </versions>" );
+                w.println( "  </versioning>" );
+                w.println( "</metadata>" );
+            }
+            finally
+            {
+                w.close();
+            }
+        }
+
+        private void writeLine( PrintWriter w, String indent, String tag, String content )
+        {
+            if ( content != null )
+            {
+                w.println( indent + ( "<" + tag + ">" + content + "</" + tag + ">" ) );
+            }
+        }
+
+    }
+}

Propchange: maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"



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