Author: bentmann
Date: Tue Nov  9 12:30:57 2010
New Revision: 1032964

URL: http://svn.apache.org/viewvc?rev=1032964&view=rev
Log:
[MNG-4891] Improve robustness of snapshot dependency resolution in case a 
remote repo accidently uses the id "local"

Modified:
    
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
    
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java

Modified: 
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java?rev=1032964&r1=1032963&r2=1032964&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
 (original)
+++ 
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
 Tue Nov  9 12:30:57 2010
@@ -22,6 +22,7 @@ package org.apache.maven.repository.inte
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -49,6 +50,7 @@ import org.sonatype.aether.impl.VersionR
 import org.sonatype.aether.impl.internal.CacheUtils;
 import org.sonatype.aether.metadata.Metadata;
 import org.sonatype.aether.repository.ArtifactRepository;
+import org.sonatype.aether.repository.LocalRepository;
 import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.repository.WorkspaceReader;
 import org.sonatype.aether.repository.WorkspaceRepository;
@@ -282,6 +284,28 @@ public class DefaultVersionResolver
                 fis = new FileInputStream( metadata.getFile() );
                 org.apache.maven.artifact.repository.metadata.Metadata m = new 
MetadataXpp3Reader().read( fis, false );
                 versioning = m.getVersioning();
+
+                /*
+                 * NOTE: Users occasionally misuse the id "local" for remote 
repos which screws up the metadata of the
+                 * local repository. This is especially troublesome during 
snapshot resolution so we try to handle that
+                 * gracefully.
+                 */
+                if ( versioning != null && repository instanceof 
LocalRepository )
+                {
+                    if ( !versioning.getSnapshotVersions().isEmpty()
+                        || ( versioning.getSnapshot() != null && 
versioning.getSnapshot().getBuildNumber() > 0 ) )
+                    {
+                        Versioning repaired = new Versioning();
+                        repaired.setLastUpdated( versioning.getLastUpdated() );
+                        Snapshot snapshot = new Snapshot();
+                        snapshot.setLocalCopy( true );
+                        repaired.setSnapshot( snapshot );
+                        versioning = repaired;
+
+                        throw new IOException( "Snapshot information corrupted 
with remote repository data"
+                            + ", please verify that no remote repository uses 
the id '" + repository.getId() + "'" );
+                    }
+                }
             }
         }
         catch ( FileNotFoundException e )

Modified: 
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java?rev=1032964&r1=1032963&r2=1032964&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
 (original)
+++ 
maven/maven-3/trunk/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
 Tue Nov  9 12:30:57 2010
@@ -78,6 +78,12 @@ final class LocalSnapshotMetadata
         return artifact.getGroupId() + ':' + artifact.getArtifactId() + ':' + 
artifact.getBaseVersion();
     }
 
+    @Override
+    protected void merge( Metadata recessive )
+    {
+        metadata.getVersioning().updateTimestamp();
+    }
+
     public String getGroupId()
     {
         return artifact.getGroupId();


Reply via email to