You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/04/08 23:29:56 UTC

svn commit: r932128 - in /maven/maven-3/trunk: maven-artifact/src/main/java/org/apache/maven/artifact/repository/ maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/ maven-compat/src/main/java/org/apache/maven/repository/legacy/ m...

Author: bentmann
Date: Thu Apr  8 21:29:56 2010
New Revision: 932128

URL: http://svn.apache.org/viewvc?rev=932128&view=rev
Log:
[MNG-2994] Snapshot repositories are not checked when using ranges

Modified:
    maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java

Modified: maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java (original)
+++ maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java Thu Apr  8 21:29:56 2010
@@ -56,6 +56,11 @@ public class ArtifactRepositoryPolicy
         this( true, null, null );
     }
 
+    public ArtifactRepositoryPolicy( ArtifactRepositoryPolicy policy )
+    {
+        this( policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy() );
+    }
+
     public ArtifactRepositoryPolicy( boolean enabled,
                                      String updatePolicy,
                                      String checksumPolicy )
@@ -163,4 +168,59 @@ public class ArtifactRepositoryPolicy
         return buffer.toString();
     }
 
+    public void merge( ArtifactRepositoryPolicy policy )
+    {
+        if ( policy != null && policy.isEnabled() )
+        {
+            setEnabled( true );
+
+            if ( ordinalOfChecksumPolicy( policy.getChecksumPolicy() ) < ordinalOfChecksumPolicy( getChecksumPolicy() ) )
+            {
+                setChecksumPolicy( policy.getChecksumPolicy() );
+            }
+
+            if ( ordinalOfUpdatePolicy( policy.getUpdatePolicy() ) < ordinalOfUpdatePolicy( getUpdatePolicy() ) )
+            {
+                setUpdatePolicy( policy.getUpdatePolicy() );
+            }
+        }
+    }
+
+    private int ordinalOfChecksumPolicy( String policy )
+    {
+        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
+        {
+            return 2;
+        }
+        else if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
+        {
+            return 0;
+        }
+        else
+        {
+            return 1;
+        }
+    }
+
+    private int ordinalOfUpdatePolicy( String policy )
+    {
+        if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
+        {
+            return 1440;
+        }
+        else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
+        {
+            return 0;
+        }
+        else if ( policy != null && policy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
+        {
+            String s = policy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
+            return Integer.valueOf( s );
+        }
+        else
+        {
+            return Integer.MAX_VALUE;
+        }
+    }
+
 }

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java Thu Apr  8 21:29:56 2010
@@ -113,8 +113,7 @@ public class DefaultRepositoryMetadataMa
 
             for ( ArtifactRepository repository : remoteRepositories )
             {
-                ArtifactRepositoryPolicy policy =
-                    metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+                ArtifactRepositoryPolicy policy = metadata.getPolicy( repository );
 
                 File file =
                     new File( localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata( metadata,
@@ -352,7 +351,7 @@ public class DefaultRepositoryMetadataMa
         ArtifactRepository selected = null;
         for ( ArtifactRepository repository : remoteRepositories )
         {
-            ArtifactRepositoryPolicy policy = metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+            ArtifactRepositoryPolicy policy = metadata.getPolicy( repository );
 
             if ( policy.isEnabled() && loadMetadata( metadata, repository, localRepository, previousMetadata ) )
             {

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java Thu Apr  8 21:29:56 2010
@@ -82,6 +82,11 @@ public class SnapshotArtifactRepositoryM
         return artifact.isSnapshot();
     }
 
+    public int getNature()
+    {
+        return isSnapshot() ? SNAPSHOT : RELEASE;
+    }
+
     public ArtifactRepository getRepository()
     {
         return artifact.getRepository();

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java Thu Apr  8 21:29:56 2010
@@ -117,7 +117,7 @@ public class DefaultUpdateCheckManager
         // NOTE: Release metadata includes version information about artifacts that have been released, to allow
         // meta-versions like RELEASE and LATEST to resolve, and also to allow retrieval of the range of valid, released
         // artifacts available.
-        ArtifactRepositoryPolicy policy = metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+        ArtifactRepositoryPolicy policy = metadata.getPolicy( repository );
 
         if ( !policy.isEnabled() )
         {

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java Thu Apr  8 21:29:56 2010
@@ -411,66 +411,17 @@ public class LegacyRepositorySystem
         {
             if ( effectivePolicy == null )
             {
-                effectivePolicy = new ArtifactRepositoryPolicy( policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy() );
+                effectivePolicy = new ArtifactRepositoryPolicy( policy );
             }
             else
             {
-                if ( policy.isEnabled() )
-                {
-                    effectivePolicy.setEnabled( true );
-
-                    if ( ordinalOfChecksumPolicy( policy.getChecksumPolicy() ) < ordinalOfChecksumPolicy( effectivePolicy.getChecksumPolicy() ) )
-                    {
-                        effectivePolicy.setChecksumPolicy( policy.getChecksumPolicy() );
-                    }
-
-                    if ( ordinalOfUpdatePolicy( policy.getUpdatePolicy() ) < ordinalOfUpdatePolicy( effectivePolicy.getUpdatePolicy() ) )
-                    {
-                        effectivePolicy.setUpdatePolicy( policy.getUpdatePolicy() );
-                    }
-                }
+                effectivePolicy.merge( policy );
             }
         }
 
         return effectivePolicy;
     }
 
-    private int ordinalOfChecksumPolicy( String policy )
-    {
-        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
-        {
-            return 2;
-        }
-        else if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
-        {
-            return 0;
-        }
-        else
-        {
-            return 1;
-        }
-    }
-
-    private int ordinalOfUpdatePolicy( String policy )
-    {
-        if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
-        {
-            return 1440;
-        }
-        else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
-        {
-            return 0;
-        }
-        else if ( policy != null && policy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
-        {
-            return 60;
-        }
-        else
-        {
-            return Integer.MAX_VALUE;
-        }
-    }
-
     public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
     {
         return mirrorSelector.getMirror( repository, mirrors );

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java Thu Apr  8 21:29:56 2010
@@ -27,6 +27,7 @@ import java.io.Writer;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
 import org.codehaus.plexus.util.IOUtil;
@@ -214,4 +215,29 @@ public abstract class AbstractRepository
 
         return buffer.toString();
     }
+
+    public int getNature()
+    {
+        return RELEASE;
+    }
+
+    public ArtifactRepositoryPolicy getPolicy( ArtifactRepository repository )
+    {
+        int nature = getNature();
+        if ( ( nature & RepositoryMetadata.RELEASE_OR_SNAPSHOT ) == RepositoryMetadata.RELEASE_OR_SNAPSHOT )
+        {
+            ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy( repository.getReleases() );
+            policy.merge( repository.getSnapshots() );
+            return policy;
+        }
+        else if ( ( nature & RepositoryMetadata.SNAPSHOT ) != 0 )
+        {
+            return repository.getSnapshots();
+        }
+        else
+        {
+            return repository.getReleases();
+        }
+    }
+
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java Thu Apr  8 21:29:56 2010
@@ -20,7 +20,11 @@ package org.apache.maven.artifact.reposi
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.Restriction;
+import org.apache.maven.artifact.versioning.VersionRange;
 
 /**
  * Metadata for the artifact directory of the repository.
@@ -82,6 +86,33 @@ public class ArtifactRepositoryMetadata
         return false;
     }
 
+    public int getNature()
+    {
+        if ( artifact.getVersion() != null )
+        {
+            return artifact.isSnapshot() ? SNAPSHOT : RELEASE;
+        }
+
+        VersionRange range = artifact.getVersionRange();
+        if ( range != null )
+        {
+            for ( Restriction restriction : range.getRestrictions() )
+            {
+                if ( isSnapshot( restriction.getLowerBound() ) || isSnapshot( restriction.getUpperBound() ) )
+                {
+                    return RELEASE_OR_SNAPSHOT;
+                }
+            }
+        }
+
+        return RELEASE;
+    }
+
+    private boolean isSnapshot( ArtifactVersion version )
+    {
+        return version != null && ArtifactUtils.isSnapshot( version.getQualifier() );
+    }
+
     public ArtifactRepository getRepository()
     {
         return null;

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java?rev=932128&r1=932127&r2=932128&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java Thu Apr  8 21:29:56 2010
@@ -21,6 +21,7 @@ package org.apache.maven.artifact.reposi
 
 //import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 
 /**
  * Describes repository directory metadata.
@@ -31,7 +32,14 @@ import org.apache.maven.artifact.reposit
  */
 public interface RepositoryMetadata
     extends org.apache.maven.artifact.metadata.ArtifactMetadata
-{        
+{
+
+    int RELEASE = 1;
+    
+    int SNAPSHOT = 2;
+    
+    int RELEASE_OR_SNAPSHOT = RELEASE | SNAPSHOT;
+
     /**
      * Get the repository the metadata was located in.
      *
@@ -66,4 +74,21 @@ public interface RepositoryMetadata
      * @return if it is a snapshot
      */
     boolean isSnapshot();       
+
+    /**
+     * Gets the artifact quality this metadata refers to. One of {@link #RELEASE}, {@link #SNAPSHOT} or
+     * {@link #RELEASE_OR_SNAPSHOT}.
+     * 
+     * @return The artifact qualitiy this metadata refers to.
+     */
+    int getNature();
+
+    /**
+     * Gets the policy that applies to this metadata regarding the specified repository.
+     * 
+     * @param repository The repository for which to determine the policy, must not be {@code null}.
+     * @return The policy, never {@code null}.
+     */
+    ArtifactRepositoryPolicy getPolicy( ArtifactRepository repository );
+
 }