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/07/28 08:36:14 UTC

svn commit: r225714 - in /maven/components/trunk: maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/ maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ maven-artifact-manager/src/main/java/org/apache/maven/art...

Author: brett
Date: Wed Jul 27 23:35:47 2005
New Revision: 225714

URL: http://svn.apache.org/viewcvs?rev=225714&view=rev
Log:
PR: MNG-615
implement repository confidence levels. currently updates poms daily if they are not deployed or verified

Added:
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java   (with props)
Modified:
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/VersionArtifactMetadata.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
    maven/components/trunk/maven-model/maven.mdo
    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/MavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Wed Jul 27 23:35:47 2005
@@ -204,7 +204,7 @@
         }
     }
 
-    public void getArtifact( Artifact artifact, List remoteRepositories, File destination )
+    public void getArtifact( Artifact artifact, List remoteRepositories )
         throws TransferFailedException, ResourceDoesNotExistException
     {
         // TODO [BP]: The exception handling here needs some work
@@ -215,7 +215,7 @@
 
             try
             {
-                getArtifact( artifact, repository, destination );
+                getArtifact( artifact, repository );
 
                 successful = true;
             }
@@ -234,7 +234,7 @@
         }
     }
 
-    public void getArtifact( Artifact artifact, ArtifactRepository repository, File destination )
+    public void getArtifact( Artifact artifact, ArtifactRepository repository )
         throws TransferFailedException, ResourceDoesNotExistException
     {
         String remotePath = repository.pathOf( artifact );
@@ -243,7 +243,7 @@
 
         if ( policy.isEnabled() )
         {
-            getRemoteFile( repository, destination, remotePath, downloadMonitor, policy.getUpdatePolicy() );
+            getRemoteFile( repository, artifact.getFile(), remotePath, downloadMonitor, policy.getChecksumPolicy() );
         }
         else
         {
@@ -252,13 +252,13 @@
     }
 
     public void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository repository, File destination,
-                                     String updatePolicy )
+                                     String checksumPolicy )
         throws TransferFailedException, ResourceDoesNotExistException
     {
         String remotePath = repository.pathOfMetadata( metadata );
 
         getLogger().info( "Retrieving " + metadata );
-        getRemoteFile( repository, destination, remotePath, null, updatePolicy );
+        getRemoteFile( repository, destination, remotePath, null, checksumPolicy );
     }
 
     public void getRepositoryMetadata( RepositoryMetadata metadata, ArtifactRepository remoteRepository,
@@ -273,7 +273,7 @@
     }
 
     private void getRemoteFile( ArtifactRepository repository, File destination, String remotePath,
-                                TransferListener downloadMonitor, String updatePolicy )
+                                TransferListener downloadMonitor, String checksumPolicy )
         throws TransferFailedException, ResourceDoesNotExistException, ChecksumFailedException
     {
         // TODO: better excetpions - transfer failed is not enough?
@@ -363,7 +363,7 @@
                     }
                     else
                     {
-                        handleChecksumFailure( updatePolicy, e.getMessage(), e.getCause() );
+                        handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
                     }
                 }
                 catch ( ResourceDoesNotExistException sha1TryException )
@@ -386,13 +386,13 @@
                         }
                         else
                         {
-                            handleChecksumFailure( updatePolicy, e.getMessage(), e.getCause() );
+                            handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
                         }
                     }
                     catch ( ResourceDoesNotExistException md5TryException )
                     {
                         // this was a failed transfer, and we don't want to retry.
-                        handleChecksumFailure( updatePolicy, "Error retrieving checksum file for " + remotePath,
+                        handleChecksumFailure( checksumPolicy, "Error retrieving checksum file for " + remotePath,
                                                md5TryException );
                     }
                 }
@@ -452,17 +452,19 @@
         }
     }
 
-    private void handleChecksumFailure( String updatePolicy, String message, Throwable cause )
+    private void handleChecksumFailure( String checksumPolicy, String message, Throwable cause )
         throws ChecksumFailedException
     {
-        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( updatePolicy ) )
+        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( checksumPolicy ) )
         {
             throw new ChecksumFailedException( message, cause );
         }
-        else
+        else if ( !ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( checksumPolicy ) )
         {
+            // warn if it is set to anything other than ignore
             getLogger().warn( "*** CHECKSUM FAILED - " + message + " - IGNORING" );
         }
+        // otherwise it is ignore
     }
 
     private void verifyChecksum( ChecksumObserver checksumObserver, File destination, String remotePath,

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java Wed Jul 27 23:35:47 2005
@@ -42,10 +42,10 @@
     Wagon getWagon( String protocol )
         throws UnsupportedProtocolException;
 
-    void getArtifact( Artifact artifact, List remoteRepositories, File destination )
+    void getArtifact( Artifact artifact, List remoteRepositories )
         throws TransferFailedException, ResourceDoesNotExistException;
 
-    void getArtifact( Artifact artifact, ArtifactRepository repository, File destination )
+    void getArtifact( Artifact artifact, ArtifactRepository repository )
         throws TransferFailedException, ResourceDoesNotExistException;
 
     void putArtifact( File source, Artifact artifact, ArtifactRepository deploymentRepository )
@@ -55,7 +55,7 @@
         throws TransferFailedException;
 
     void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination,
-                              String updatePolicy )
+                              String checksumPolicy )
         throws TransferFailedException, ResourceDoesNotExistException;
 
     void putRepositoryMetadata( File source, RepositoryMetadata metadata, ArtifactRepository repository )

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java Wed Jul 27 23:35:47 2005
@@ -60,16 +60,14 @@
 
     protected abstract void setContent( String content );
 
-    // TODO: share
-    public boolean checkedSinceDate( Date date )
+    public boolean exists()
     {
-        // Note that if last modified is 0, it didn't exist, so this will be true
-        return !date.after( new Date( lastModified ) );
+        return lastModified > 0;
     }
 
-    public boolean exists()
+    public Date getLastModified()
     {
-        return lastModified > 0;
+        return new Date( lastModified );
     }
 
     public void readFromLocalRepository( ArtifactRepository localRepository )
@@ -83,7 +81,7 @@
     }
 
     public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, WagonManager wagonManager,
-                                              String updatePolicy )
+                                              String checksumPolicy )
         throws ArtifactMetadataRetrievalException, ResourceDoesNotExistException
     {
         try
@@ -92,7 +90,7 @@
             File destination = File.createTempFile( "maven-artifact", null );
             destination.deleteOnExit();
 
-            wagonManager.getArtifactMetadata( this, remoteRepository, destination, updatePolicy );
+            wagonManager.getArtifactMetadata( this, remoteRepository, destination, checksumPolicy );
 
             readFromFile( destination );
         }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java Wed Jul 27 23:35:47 2005
@@ -1,14 +1,28 @@
 package org.apache.maven.artifact.metadata;
 
+/*
+ * 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.transform.LatestArtifactTransformation;
 
 import java.io.File;
 
 public class LatestArtifactMetadata
     extends AbstractVersionArtifactMetadata
 {
-    
     private String version;
 
     public LatestArtifactMetadata( Artifact artifact )
@@ -54,7 +68,7 @@
     {
         long fileTime = file.lastModified();
 
-        return ( lastModified > fileTime );
+        return lastModified > fileTime;
     }
 
     public String toString()
@@ -76,7 +90,7 @@
     {
         return Artifact.LATEST_VERSION;
     }
-    
+
     public boolean storedInArtifactDirectory()
     {
         return false;

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java Wed Jul 27 23:35:47 2005
@@ -76,7 +76,7 @@
     {
         long fileTime = file.lastModified();
 
-        return ( lastModified > fileTime );
+        return lastModified > fileTime;
     }
 
     public String toString()
@@ -98,7 +98,7 @@
     {
         return ReleaseArtifactTransformation.RELEASE_VERSION;
     }
-    
+
     public boolean storedInArtifactDirectory()
     {
         return false;

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Wed Jul 27 23:35:47 2005
@@ -60,6 +60,19 @@
     public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactResolutionException
     {
+        resolve( artifact, remoteRepositories, localRepository, false );
+    }
+
+    public void resolveAlways( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
+        throws ArtifactResolutionException
+    {
+        resolve( artifact, remoteRepositories, localRepository, true );
+    }
+
+    private void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository,
+                          boolean force )
+        throws ArtifactResolutionException
+    {
         if ( artifact != null )
         {
             // ----------------------------------------------------------------------
@@ -87,18 +100,18 @@
             }
 
             File destination = artifact.getFile();
-            if ( !destination.exists() )
+            if ( !destination.exists() || force )
             {
                 try
                 {
                     if ( artifact.getRepository() != null )
                     {
                         // the transformations discovered the artifact - so use it exclusively
-                        wagonManager.getArtifact( artifact, artifact.getRepository(), destination );
+                        wagonManager.getArtifact( artifact, artifact.getRepository() );
                     }
                     else
                     {
-                        wagonManager.getArtifact( artifact, remoteRepositories, destination );
+                        wagonManager.getArtifact( artifact, remoteRepositories );
                     }
 
                     // must be after the artifact is downloaded

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java Wed Jul 27 23:35:47 2005
@@ -27,8 +27,6 @@
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 import java.io.IOException;
-import java.util.Calendar;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -81,33 +79,8 @@
                 }
                 else
                 {
-                    String updatePolicy = policy.getUpdatePolicy();
                     // TODO: should be able to calculate this less often
-                    boolean checkForUpdates = false;
-                    if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( updatePolicy ) )
-                    {
-                        checkForUpdates = true;
-                    }
-                    else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( updatePolicy ) )
-                    {
-                        if ( !localMetadata.checkedSinceDate( getMidnightBoundary() ) )
-                        {
-                            checkForUpdates = true;
-                        }
-                    }
-                    else if ( updatePolicy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
-                    {
-                        String s = updatePolicy.substring(
-                            ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
-                        int minutes = Integer.valueOf( s ).intValue();
-                        Calendar cal = Calendar.getInstance();
-                        cal.add( Calendar.MINUTE, -minutes );
-                        if ( !localMetadata.checkedSinceDate( cal.getTime() ) )
-                        {
-                            checkForUpdates = true;
-                        }
-                    }
-                    // else assume "never"
+                    boolean checkForUpdates = policy.checkOutOfDate( localMetadata.getLastModified() );
 
                     if ( checkForUpdates )
                     {
@@ -119,7 +92,7 @@
                         try
                         {
                             remoteMetadata = retrieveFromRemoteRepository( artifact, repository, localMetadata,
-                                                                           updatePolicy );
+                                                                           policy.getChecksumPolicy() );
 
                             // we must only flag this after checking for updates, otherwise subsequent attempts will look
                             // for SNAPSHOT without checking the metadata
@@ -190,12 +163,12 @@
     protected VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
                                                                     ArtifactRepository remoteRepository,
                                                                     VersionArtifactMetadata localMetadata,
-                                                                    String updatePolicy )
+                                                                    String checksumPolicy )
         throws ArtifactMetadataRetrievalException, ResourceDoesNotExistException
     {
         AbstractVersionArtifactMetadata metadata = createMetadata( artifact );
 
-        metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager, updatePolicy );
+        metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager, checksumPolicy );
 
         return metadata;
     }
@@ -208,16 +181,6 @@
         AbstractVersionArtifactMetadata metadata = createMetadata( artifact );
         metadata.readFromLocalRepository( localRepository );
         return metadata;
-    }
-
-    private Date getMidnightBoundary()
-    {
-        Calendar cal = Calendar.getInstance();
-        cal.set( Calendar.HOUR_OF_DAY, 0 );
-        cal.set( Calendar.MINUTE, 0 );
-        cal.set( Calendar.SECOND, 0 );
-        cal.set( Calendar.MILLISECOND, 0 );
-        return cal.getTime();
     }
 
     private boolean alreadyResolved( Artifact artifact )

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java Wed Jul 27 23:35:47 2005
@@ -65,7 +65,7 @@
             try
             {
                 metadata = (SnapshotArtifactMetadata) retrieveFromRemoteRepository( artifact, remoteRepository, null,
-                                                                                    ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
+                                                                                    ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
             }
             catch ( ResourceDoesNotExistException e )
             {

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java Wed Jul 27 23:35:47 2005
@@ -24,7 +24,6 @@
 
 import java.io.File;
 import java.util.List;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
@@ -128,4 +127,5 @@
     void setArtifactId( String artifactId );
 
     boolean isSnapshot();
+
 }

Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java?rev=225714&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java (added)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java Wed Jul 27 23:35:47 2005
@@ -0,0 +1,123 @@
+package org.apache.maven.artifact;
+
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Type safe enumeration for the artifact status field.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public final class ArtifactStatus
+    implements Comparable
+{
+    /**
+     * No trust - no information about status.
+     */
+    public static final ArtifactStatus NONE = new ArtifactStatus( "none", 0 );
+
+    /**
+     * No trust - information was generated with defaults.
+     */
+    public static final ArtifactStatus GENERATED = new ArtifactStatus( "generated", 1 );
+
+    /**
+     * Low trust - was converted from the Maven 1.x repository.
+     */
+    public static final ArtifactStatus CONVERTED = new ArtifactStatus( "converted", 2 );
+
+    /**
+     * Moderate trust - it was deployed directly from a partner.
+     */
+    public static final ArtifactStatus PARTNER = new ArtifactStatus( "partner", 3 );
+
+    /**
+     * Moderate trust - it was deployed directly by a user.
+     */
+    public static final ArtifactStatus DEPLOYED = new ArtifactStatus( "deployed", 4 );
+
+    /**
+     * Trusted, as it has had its data verified by hand.
+     */
+    public static final ArtifactStatus VERIFIED = new ArtifactStatus( "verified", 5 );
+
+    private final int rank;
+
+    private final String key;
+
+    private static Map map = null;
+
+    private ArtifactStatus( String key, int rank )
+    {
+        this.rank = rank;
+        this.key = key;
+
+        if ( map == null )
+        {
+            map = new HashMap();
+        }
+        map.put( key, this );
+    }
+
+    public static ArtifactStatus valueOf( String status )
+    {
+        ArtifactStatus retVal = null;
+
+        if ( status != null )
+        {
+            retVal = (ArtifactStatus) map.get( status );
+        }
+
+        return retVal != null ? retVal : NONE;
+    }
+
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+
+        final ArtifactStatus that = (ArtifactStatus) o;
+
+        return rank == that.rank;
+
+    }
+
+    public int hashCode()
+    {
+        return rank;
+    }
+
+    public String toString()
+    {
+        return key;
+    }
+
+    public int compareTo( Object o )
+    {
+        ArtifactStatus s = (ArtifactStatus) o;
+        return rank - s.rank;
+    }
+}

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactStatus.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java Wed Jul 27 23:35:47 2005
@@ -435,4 +435,5 @@
             return getVersion().endsWith( SNAPSHOT_VERSION ) || getVersion().equals( LATEST_VERSION );
         }
     }
+
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/VersionArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/VersionArtifactMetadata.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/VersionArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/VersionArtifactMetadata.java Wed Jul 27 23:35:47 2005
@@ -28,21 +28,25 @@
 public interface VersionArtifactMetadata
     extends ArtifactMetadata, Comparable
 {
-    /**
-     * Determine if the metadata is considered newer than a given date.
-     * @return whether it is newer
-     */
-    boolean checkedSinceDate( Date date );
 
     /**
      * Determine if the metadata is considered newer than a given file.
+     *
      * @return whether it is newer
      */
     boolean newerThanFile( File file );
 
     /**
      * Get the resolved version from the metadata.
+     *
      * @return the resolved version
      */
     String constructVersion();
+
+    /**
+     * Determine when the metadata was last modified.
+     *
+     * @return the date the metadata was last modified.
+     */
+    Date getLastModified();
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java Wed Jul 27 23:35:47 2005
@@ -1,4 +1,6 @@
-package org.apache.maven.artifact.repository;/*
+package org.apache.maven.artifact.repository;
+
+/*
  * Copyright 2001-2005 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,6 +16,9 @@
  * limitations under the License.
  */
 
+import java.util.Calendar;
+import java.util.Date;
+
 /**
  * Describes a set of policies for a repository to use under certain conditions.
  *
@@ -34,6 +39,8 @@
 
     public static final String CHECKSUM_POLICY_WARN = "warn";
 
+    public static final String CHECKSUM_POLICY_IGNORE = "ignore";
+
     private boolean enabled;
 
     private String updatePolicy;
@@ -90,5 +97,41 @@
     public String getChecksumPolicy()
     {
         return checksumPolicy;
+    }
+
+    public boolean checkOutOfDate( Date lastModified )
+    {
+        boolean checkForUpdates = false;
+
+        if ( UPDATE_POLICY_ALWAYS.equals( updatePolicy ) )
+        {
+            checkForUpdates = true;
+        }
+        else if ( UPDATE_POLICY_DAILY.equals( updatePolicy ) )
+        {
+            // Get midnight boundary
+            Calendar cal = Calendar.getInstance();
+            cal.set( Calendar.HOUR_OF_DAY, 0 );
+            cal.set( Calendar.MINUTE, 0 );
+            cal.set( Calendar.SECOND, 0 );
+            cal.set( Calendar.MILLISECOND, 0 );
+            if ( cal.getTime().after( lastModified ) )
+            {
+                checkForUpdates = true;
+            }
+        }
+        else if ( updatePolicy.startsWith( UPDATE_POLICY_INTERVAL ) )
+        {
+            String s = updatePolicy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
+            int minutes = Integer.valueOf( s ).intValue();
+            Calendar cal = Calendar.getInstance();
+            cal.add( Calendar.MINUTE, -minutes );
+            if ( cal.getTime().after( lastModified ) )
+            {
+                checkForUpdates = true;
+            }
+        }
+        // else assume "never"
+        return checkForUpdates;
     }
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java Wed Jul 27 23:35:47 2005
@@ -35,7 +35,7 @@
  */
 public interface ArtifactResolver
 {
-    static String ROLE = ArtifactResolver.class.getName();
+    String ROLE = ArtifactResolver.class.getName();
 
     void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactResolutionException;
@@ -62,5 +62,8 @@
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, Map managedVersions,
                                                   ArtifactRepository localRepository, List remoteRepositories,
                                                   ArtifactMetadataSource source, ArtifactFilter filter )
+        throws ArtifactResolutionException;
+
+    void resolveAlways( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactResolutionException;
 }

Modified: maven/components/trunk/maven-model/maven.mdo
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-model/maven.mdo?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-model/maven.mdo (original)
+++ maven/components/trunk/maven-model/maven.mdo Wed Jul 27 23:35:47 2005
@@ -1467,6 +1467,19 @@
             <type>Relocation</type>
           </association>
         </field>
+        <field>
+          <name>status</name>
+          <version>4.0.0</version>
+          <description>
+            Gives the status of this artifact in the remote repository. This must not be set in your local
+            project, as it is updated by tools placing it in the reposiory. Valid values are: none (default),
+            converted (repository manager converted this from an Maven 1 POM), partner (directly synced from a partner
+            Maven 2 repository), deployed (was deployed from a Maven 2 instance), verified (has been hand verified as
+            correct and final).
+          </description>
+          <required>false</required>
+          <type>String</type>
+        </field>
       </fields>
     </class>
     <class>

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=225714&r1=225713&r2=225714&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 Wed Jul 27 23:35:47 2005
@@ -17,10 +17,12 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactStatus;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -65,6 +67,7 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -235,6 +238,12 @@
                                       Collections.EMPTY_LIST, externalProfiles,
                                       projectDescriptor.getAbsoluteFile().getParentFile() );
 
+        if ( project.getDistributionManagement() != null && project.getDistributionManagement().getStatus() != null )
+        {
+            throw new ProjectBuildingException(
+                "Invalid project file: distribution status must not be specified for a project outside of the repository" );
+        }
+
         // Only translate the base directory for files in the source tree
         pathTranslator.alignToBaseDirectory( project.getModel(), projectDescriptor );
 
@@ -273,6 +282,50 @@
 
                 File file = artifact.getFile();
                 model = readModel( file );
+
+                String downloadUrl = null;
+                ArtifactStatus status = ArtifactStatus.NONE;
+
+                DistributionManagement distributionManagement = model.getDistributionManagement();
+                if ( distributionManagement != null )
+                {
+                    downloadUrl = distributionManagement.getDownloadUrl();
+
+                    status = ArtifactStatus.valueOf( distributionManagement.getStatus() );
+                }
+
+                // TODO: configurable actions dependant on status
+                if ( status.compareTo( ArtifactStatus.VERIFIED ) < 0 )
+                {
+                    // use default policy (enabled, daily update, warn on bad checksum)
+                    ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy();
+
+                    if ( policy.checkOutOfDate( new Date( file.lastModified() ) ) )
+                    {
+                        getLogger().info(
+                            artifact.getArtifactId() + ": updating metadata due to status of '" + status + "'" );
+                        try
+                        {
+                            artifactResolver.resolveAlways( artifact, remoteArtifactRepositories, localRepository );
+                        }
+                        catch ( ArtifactResolutionException e )
+                        {
+                            getLogger().warn( "Error updating POM - using existing version", e );
+                        }
+                    }
+                }
+
+                // TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that
+                // Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions?
+                if ( downloadUrl != null )
+                {
+                    artifact.setDownloadUrl( downloadUrl );
+                }
+                else
+                {
+                    artifact.setDownloadUrl( model.getUrl() );
+                }
+
             }
             catch ( ArtifactResolutionException e )
             {
@@ -289,23 +342,9 @@
                 model.setVersion( artifact.getVersion() );
                 // TODO: not correct in some instances
                 model.setPackaging( artifact.getType() );
-            }
-        }
 
-        // TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that
-        // Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions?
-        String downloadUrl = null;
-        if ( model.getDistributionManagement() != null )
-        {
-            downloadUrl = model.getDistributionManagement().getDownloadUrl();
-        }
-        if ( downloadUrl != null )
-        {
-            artifact.setDownloadUrl( downloadUrl );
-        }
-        else
-        {
-            artifact.setDownloadUrl( model.getUrl() );
+                // TODO: save to disk with a "generated" status
+            }
         }
 
         return model;
@@ -461,9 +500,9 @@
 
         if ( parentProject != null )
         {
-            Artifact parentArtifact = artifactFactory.createProjectArtifact( parentProject.getGroupId(),
-                                                                             parentProject.getArtifactId(),
-                                                                             parentProject.getVersion() );
+            Artifact parentArtifact = artifactFactory.createParentArtifact( parentProject.getGroupId(),
+                                                                            parentProject.getArtifactId(),
+                                                                            parentProject.getVersion() );
             project.setParentArtifact( parentArtifact );
         }
 

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java Wed Jul 27 23:35:47 2005
@@ -27,11 +27,11 @@
 {
     String ROLE = MavenProjectBuilder.class.getName();
 
-    static final String STANDALONE_SUPERPOM_GROUPID = "org.apache.maven";
+    String STANDALONE_SUPERPOM_GROUPID = "org.apache.maven";
 
-    static final String STANDALONE_SUPERPOM_ARTIFACTID = "super-pom";
+    String STANDALONE_SUPERPOM_ARTIFACTID = "super-pom";
 
-    static final String STANDALONE_SUPERPOM_VERSION = "2.0";
+    String STANDALONE_SUPERPOM_VERSION = "2.0";
 
     MavenProject build( File project, ArtifactRepository localRepository, List profiles )
         throws ProjectBuildingException;

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Wed Jul 27 23:35:47 2005
@@ -28,6 +28,7 @@
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Exclusion;
 import org.apache.maven.model.Relocation;
 import org.apache.maven.project.MavenProject;
@@ -85,9 +86,10 @@
 
             Relocation relocation = null;
 
-            if ( p.getDistributionManagement() != null )
+            DistributionManagement distMgmt = p.getDistributionManagement();
+            if ( distMgmt != null )
             {
-                relocation = p.getDistributionManagement().getRelocation();
+                relocation = distMgmt.getRelocation();
             }
             if ( relocation != null )
             {
@@ -121,6 +123,7 @@
         }
         while ( !done );
 
+        // TODO: this could come straight from the project, negating the need to set it in the project itself?
         artifact.setDownloadUrl( pomArtifact.getDownloadUrl() );
 
         try

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java?rev=225714&r1=225713&r2=225714&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java Wed Jul 27 23:35:47 2005
@@ -17,9 +17,11 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactStatus;
 import org.apache.maven.artifact.metadata.AbstractArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
@@ -76,6 +78,14 @@
             MavenXpp3Reader modelReader = new MavenXpp3Reader();
             Model model = modelReader.read( reader );
             model.setVersion( getVersion() );
+
+            DistributionManagement distributionManagement = model.getDistributionManagement();
+            if ( distributionManagement == null )
+            {
+                distributionManagement = new DistributionManagement();
+                model.setDistributionManagement( distributionManagement );
+            }
+            distributionManagement.setStatus( ArtifactStatus.DEPLOYED.toString() );
 
             MavenXpp3Writer modelWriter = new MavenXpp3Writer();
             modelWriter.write( writer, model );



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