You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2009/02/27 16:38:15 UTC
svn commit: r748558 - in /maven/components/trunk/maven-repository/src:
main/java/org/apache/maven/repository/ test/ test/java/ test/java/org/
test/java/org/apache/ test/java/org/apache/maven/
test/java/org/apache/maven/repository/
Author: jvanzyl
Date: Fri Feb 27 15:38:14 2009
New Revision: 748558
URL: http://svn.apache.org/viewvc?rev=748558&view=rev
Log:
o adding back in mirroring code but separated into a component and reactivated the tests
Added:
maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java (with props)
maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MirrorBuilder.java (with props)
maven/components/trunk/maven-repository/src/test/
maven/components/trunk/maven-repository/src/test/java/
maven/components/trunk/maven-repository/src/test/java/org/
maven/components/trunk/maven-repository/src/test/java/org/apache/
maven/components/trunk/maven-repository/src/test/java/org/apache/maven/
maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/
maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java (with props)
Modified:
maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyMavenRepositorySystem.java
maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MavenRepositorySystem.java
Added: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java?rev=748558&view=auto
==============================================================================
--- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java (added)
+++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java Fri Feb 27 15:38:14 2009
@@ -0,0 +1,184 @@
+package org.apache.maven.repository;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+@Component(role=MirrorBuilder.class)
+public class DefaultMirrorBuilder
+ implements MirrorBuilder
+{
+ private static final String WILDCARD = "*";
+
+ private static final String EXTERNAL_WILDCARD = "external:*";
+
+ private static int anonymousMirrorIdSeed = 0;
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private ArtifactRepositoryFactory repositoryFactory;
+
+ //used LinkedMap to preserve the order.
+ private Map<String, ArtifactRepository> mirrors = new LinkedHashMap<String, ArtifactRepository>();
+
+ public void addMirror( String id, String mirrorOf, String url )
+ {
+ if ( id == null )
+ {
+ id = "mirror-" + anonymousMirrorIdSeed++;
+ logger.warn( "You are using a mirror that doesn't declare an <id/> element. Using \'" + id + "\' instead:\nId: " + id + "\nmirrorOf: " + mirrorOf + "\nurl: " + url + "\n" );
+ }
+
+ ArtifactRepository mirror = new DefaultArtifactRepository( id, url, null );
+
+ System.out.println( mirror + " --> " + mirrorOf );
+
+ mirrors.put( mirrorOf, mirror );
+ }
+
+ public ArtifactRepository getMirrorRepository( ArtifactRepository repository )
+ {
+ ArtifactRepository mirror = getMirror( repository );
+ if ( mirror != null )
+ {
+ String id = mirror.getId();
+ if ( id == null )
+ {
+ // TODO: this should be illegal in settings.xml
+ id = repository.getId();
+ }
+
+ logger.debug( "Using mirror: " + mirror.getId() + " for repository: " + repository.getId() + "\n(mirror url: " + mirror.getUrl() + ")" );
+ repository = repositoryFactory.createArtifactRepository( id, mirror.getUrl(),
+ repository.getLayout(), repository.getSnapshots(),
+ repository.getReleases() );
+ }
+ return repository;
+ }
+
+ /**
+ * This method finds a matching mirror for the selected repository. If there is an exact match,
+ * this will be used. If there is no exact match, then the list of mirrors is examined to see if
+ * a pattern applies.
+ *
+ * @param originalRepository See if there is a mirror for this repository.
+ * @return the selected mirror or null if none are found.
+ */
+ public ArtifactRepository getMirror( ArtifactRepository originalRepository )
+ {
+ ArtifactRepository selectedMirror = mirrors.get( originalRepository.getId() );
+ if ( null == selectedMirror )
+ {
+ // Process the patterns in order. First one that matches wins.
+ Set<String> keySet = mirrors.keySet();
+ if ( keySet != null )
+ {
+ for ( String pattern : keySet )
+ {
+ if ( matchPattern( originalRepository, pattern ) )
+ {
+ selectedMirror = mirrors.get( pattern );
+ }
+ }
+ }
+
+ }
+
+ return selectedMirror;
+ }
+
+ /**
+ * This method checks if the pattern matches the originalRepository. Valid patterns: * =
+ * everything external:* = everything not on the localhost and not file based. repo,repo1 = repo
+ * or repo1 *,!repo1 = everything except repo1
+ *
+ * @param originalRepository to compare for a match.
+ * @param pattern used for match. Currently only '*' is supported.
+ * @return true if the repository is a match to this pattern.
+ */
+ public boolean matchPattern( ArtifactRepository originalRepository, String pattern )
+ {
+ boolean result = false;
+ String originalId = originalRepository.getId();
+
+ // simple checks first to short circuit processing below.
+ if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
+ {
+ result = true;
+ }
+ else
+ {
+ // process the list
+ String[] repos = pattern.split( "," );
+ for ( String repo : repos )
+ {
+ // see if this is a negative match
+ if ( repo.length() > 1 && repo.startsWith( "!" ) )
+ {
+ if ( originalId.equals( repo.substring( 1 ) ) )
+ {
+ // explicitly exclude. Set result and stop processing.
+ result = false;
+ break;
+ }
+ }
+ // check for exact match
+ else if ( originalId.equals( repo ) )
+ {
+ result = true;
+ break;
+ }
+ // check for external:*
+ else if ( EXTERNAL_WILDCARD.equals( repo ) && isExternalRepo( originalRepository ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ else if ( WILDCARD.equals( repo ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ }
+ }
+ return result;
+ }
+
+
+ /**
+ * Checks the URL to see if this repository refers to an external repository
+ *
+ * @param originalRepository
+ * @return true if external.
+ */
+ public boolean isExternalRepo( ArtifactRepository originalRepository )
+ {
+ try
+ {
+ URL url = new URL( originalRepository.getUrl() );
+ return !( url.getHost().equals( "localhost" ) || url.getHost().equals( "127.0.0.1" ) || url.getProtocol().equals( "file" ) );
+ }
+ catch ( MalformedURLException e )
+ {
+ // bad url just skip it here. It should have been validated already, but the wagon lookup will deal with it
+ return false;
+ }
+ }
+
+ public void clearMirrors()
+ {
+ mirrors.clear();
+ anonymousMirrorIdSeed = 0;
+ }
+}
Propchange: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyMavenRepositorySystem.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyMavenRepositorySystem.java?rev=748558&r1=748557&r2=748558&view=diff
==============================================================================
--- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyMavenRepositorySystem.java (original)
+++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyMavenRepositorySystem.java Fri Feb 27 15:38:14 2009
@@ -532,16 +532,6 @@
return artifactResolver.resolve( request );
}
- // ------------------------------------------------------------------------
- // Extracted from DefaultWagonManager
- // ------------------------------------------------------------------------
-
- private static final String WILDCARD = "*";
-
- private static final String EXTERNAL_WILDCARD = "external:*";
-
- private static int anonymousMirrorIdSeed = 0;
-
private boolean online = true;
private boolean interactive = true;
@@ -554,147 +544,6 @@
private Map<String, RepositoryPermissions> serverPermissionsMap = new HashMap<String, RepositoryPermissions>();
- //used LinkedMap to preserve the order.
- private Map<String, ArtifactRepository> mirrors = new LinkedHashMap<String, ArtifactRepository>();
-
- public ArtifactRepository getMirrorRepository( ArtifactRepository repository )
- {
- ArtifactRepository mirror = getMirror( repository );
- if ( mirror != null )
- {
- String id = mirror.getId();
- if ( id == null )
- {
- // TODO: this should be illegal in settings.xml
- id = repository.getId();
- }
-
- logger.debug( "Using mirror: " + mirror.getId() + " for repository: " + repository.getId() + "\n(mirror url: " + mirror.getUrl() + ")" );
- repository = artifactRepositoryFactory.createArtifactRepository( id, mirror.getUrl(), repository.getLayout(), repository.getSnapshots(), repository.getReleases() );
- }
- return repository;
- }
-
- /**
- * This method finds a matching mirror for the selected repository. If there is an exact match,
- * this will be used. If there is no exact match, then the list of mirrors is examined to see if
- * a pattern applies.
- *
- * @param originalRepository See if there is a mirror for this repository.
- * @return the selected mirror or null if none are found.
- */
- public ArtifactRepository getMirror( ArtifactRepository originalRepository )
- {
- ArtifactRepository selectedMirror = mirrors.get( originalRepository.getId() );
- if ( null == selectedMirror )
- {
- // Process the patterns in order. First one that matches wins.
- Set<String> keySet = mirrors.keySet();
- if ( keySet != null )
- {
- for ( String pattern : keySet )
- {
- if ( matchPattern( originalRepository, pattern ) )
- {
- selectedMirror = mirrors.get( pattern );
- }
- }
- }
-
- }
- return selectedMirror;
- }
-
- /**
- * This method checks if the pattern matches the originalRepository. Valid patterns: * =
- * everything external:* = everything not on the localhost and not file based. repo,repo1 = repo
- * or repo1 *,!repo1 = everything except repo1
- *
- * @param originalRepository to compare for a match.
- * @param pattern used for match. Currently only '*' is supported.
- * @return true if the repository is a match to this pattern.
- */
- public boolean matchPattern( ArtifactRepository originalRepository, String pattern )
- {
- boolean result = false;
- String originalId = originalRepository.getId();
-
- // simple checks first to short circuit processing below.
- if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
- {
- result = true;
- }
- else
- {
- // process the list
- String[] repos = pattern.split( "," );
- for ( String repo : repos )
- {
- // see if this is a negative match
- if ( repo.length() > 1 && repo.startsWith( "!" ) )
- {
- if ( originalId.equals( repo.substring( 1 ) ) )
- {
- // explicitly exclude. Set result and stop processing.
- result = false;
- break;
- }
- }
- // check for exact match
- else if ( originalId.equals( repo ) )
- {
- result = true;
- break;
- }
- // check for external:*
- else if ( EXTERNAL_WILDCARD.equals( repo ) && isExternalRepo( originalRepository ) )
- {
- result = true;
- // don't stop processing in case a future segment explicitly excludes this repo
- }
- else if ( WILDCARD.equals( repo ) )
- {
- result = true;
- // don't stop processing in case a future segment explicitly excludes this repo
- }
- }
- }
- return result;
- }
-
- /**
- * Checks the URL to see if this repository refers to an external repository
- *
- * @param originalRepository
- * @return true if external.
- */
- public boolean isExternalRepo( ArtifactRepository originalRepository )
- {
- try
- {
- URL url = new URL( originalRepository.getUrl() );
- return !( url.getHost().equals( "localhost" ) || url.getHost().equals( "127.0.0.1" ) || url.getProtocol().equals( "file" ) );
- }
- catch ( MalformedURLException e )
- {
- // bad url just skip it here. It should have been validated already, but the wagon lookup will deal with it
- return false;
- }
- }
-
- public void addMirror( String id, String mirrorOf, String url )
- {
- if ( id == null )
- {
- id = "mirror-" + anonymousMirrorIdSeed++;
- logger.warn( "You are using a mirror that doesn't declare an <id/> element. Using \'" + id + "\' instead:\nId: " + id + "\nmirrorOf: " + mirrorOf + "\nurl: " + url + "\n" );
- }
-
- ArtifactRepository mirror = new DefaultArtifactRepository( id, url, null );
-
- mirrors.put( mirrorOf, mirror );
- }
-
public void setOnline( boolean online )
{
this.online = online;
@@ -777,180 +626,4 @@
{
return artifactMetadataSource.retrieveRelocatedArtifact( artifact, localRepository, remoteRepositories );
}
-
- // Test for this stuff
-
- /*
-
- public void testAddMirrorWithNullRepositoryId()
- {
- wagonManager.addMirror( null, "test", "http://www.nowhere.com/" );
- }
-
- public void testGetArtifactSha1MissingMd5Present()
- throws IOException, UnsupportedProtocolException, TransferFailedException, ResourceDoesNotExistException
- {
- Artifact artifact = createTestPomArtifact( "target/test-data/get-remote-artifact" );
-
- ArtifactRepository repo = createStringRepo();
-
- StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
- wagon.addExpectedContent( repo.getLayout().pathOf( artifact ), "expected" );
- wagon.addExpectedContent( repo.getLayout().pathOf( artifact ) + ".md5", "bad_checksum" );
-
- wagonManager.getArtifact( artifact, repo, true );
-
- assertTrue( artifact.getFile().exists() );
- }
-
- public void testExternalURL()
- {
- DefaultWagonManager mgr = new DefaultWagonManager();
- assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
- assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
- assertTrue( mgr.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
- assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
- assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://" ) ) );
- // these are local
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
-
- // not a proper url so returns false;
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
- assertFalse( mgr.isExternalRepo( getRepo( "foo", "" ) ) );
- }
-
- public void testMirrorLookup()
- {
- wagonManager.addMirror( "a", "a", "http://a" );
- wagonManager.addMirror( "b", "b", "http://b" );
-
- ArtifactRepository repo = null;
- repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
- assertEquals( "http://a", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "b", "http://a.a" ) );
- assertEquals( "http://b", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "c", "http://c.c" ) );
- assertEquals( "http://c.c", repo.getUrl() );
-
- }
-
- public void testMirrorWildcardLookup()
- {
- wagonManager.addMirror( "a", "a", "http://a" );
- wagonManager.addMirror( "b", "b", "http://b" );
- wagonManager.addMirror( "c", "*", "http://wildcard" );
-
- ArtifactRepository repo = null;
- repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
- assertEquals( "http://a", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "b", "http://a.a" ) );
- assertEquals( "http://b", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "c", "http://c.c" ) );
- assertEquals( "http://wildcard", repo.getUrl() );
-
- }
-
- public void testMirrorStopOnFirstMatch()
- {
- //exact matches win first
- wagonManager.addMirror( "a2", "a,b", "http://a2" );
- wagonManager.addMirror( "a", "a", "http://a" );
- //make sure repeated entries are skipped
- wagonManager.addMirror( "a", "a", "http://a3" );
-
- wagonManager.addMirror( "b", "b", "http://b" );
- wagonManager.addMirror( "c", "d,e", "http://de" );
- wagonManager.addMirror( "c", "*", "http://wildcard" );
- wagonManager.addMirror( "c", "e,f", "http://ef" );
-
-
-
- ArtifactRepository repo = null;
- repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
- assertEquals( "http://a", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "b", "http://a.a" ) );
- assertEquals( "http://b", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "c", "http://c.c" ) );
- assertEquals( "http://wildcard", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "d", "http://d" ) );
- assertEquals( "http://de", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "e", "http://e" ) );
- assertEquals( "http://de", repo.getUrl() );
-
- repo = wagonManager.getMirrorRepository( getRepo( "f", "http://f" ) );
- assertEquals( "http://wildcard", repo.getUrl() );
-
- }
-
-
- public void testPatterns()
- {
- DefaultWagonManager mgr = new DefaultWagonManager();
-
- assertTrue( mgr.matchPattern( getRepo( "a" ), "*" ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), "*," ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), ",*," ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), "*," ) );
-
- assertTrue( mgr.matchPattern( getRepo( "a" ), "a" ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), "a," ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), ",a," ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), "a," ) );
-
- assertFalse( mgr.matchPattern( getRepo( "b" ), "a" ) );
- assertFalse( mgr.matchPattern( getRepo( "b" ), "a," ) );
- assertFalse( mgr.matchPattern( getRepo( "b" ), ",a" ) );
- assertFalse( mgr.matchPattern( getRepo( "b" ), ",a," ) );
-
- assertTrue( mgr.matchPattern( getRepo( "a" ), "a,b" ) );
- assertTrue( mgr.matchPattern( getRepo( "b" ), "a,b" ) );
-
- assertFalse( mgr.matchPattern( getRepo( "c" ), "a,b" ) );
-
- assertTrue( mgr.matchPattern( getRepo( "a" ), "*" ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), "*,b" ) );
- assertTrue( mgr.matchPattern( getRepo( "a" ), "*,!b" ) );
-
- assertFalse( mgr.matchPattern( getRepo( "a" ), "*,!a" ) );
- assertFalse( mgr.matchPattern( getRepo( "a" ), "!a,*" ) );
-
- assertTrue( mgr.matchPattern( getRepo( "c" ), "*,!a" ) );
- assertTrue( mgr.matchPattern( getRepo( "c" ), "!a,*" ) );
-
- assertFalse( mgr.matchPattern( getRepo( "c" ), "!a,!c" ) );
- assertFalse( mgr.matchPattern( getRepo( "d" ), "!a,!c*" ) );
- }
-
- public void testPatternsWithExternal()
- {
- DefaultWagonManager mgr = new DefaultWagonManager();
-
- assertTrue( mgr.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
- assertFalse( mgr.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
-
- assertTrue( mgr.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
- assertFalse( mgr.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
- assertTrue( mgr.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
- assertFalse( mgr.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
-
- assertFalse( mgr.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
- assertTrue( mgr.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
- }
-
- */
}
Modified: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MavenRepositorySystem.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MavenRepositorySystem.java?rev=748558&r1=748557&r2=748558&view=diff
==============================================================================
--- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MavenRepositorySystem.java (original)
+++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MavenRepositorySystem.java Fri Feb 27 15:38:14 2009
@@ -111,18 +111,6 @@
public Artifact retrieveRelocatedArtifact( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
throws ArtifactMetadataRetrievalException;
- // Mirrors
-
- ArtifactRepository getMirrorRepository( ArtifactRepository repository );
-
- ArtifactRepository getMirror( ArtifactRepository originalRepository );
-
- boolean matchPattern( ArtifactRepository originalRepository, String pattern );
-
- boolean isExternalRepo( ArtifactRepository originalRepository );
-
- void addMirror( String id, String mirrorOf, String url );
-
// Network enablement
void setOnline( boolean online );
Added: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MirrorBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MirrorBuilder.java?rev=748558&view=auto
==============================================================================
--- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MirrorBuilder.java (added)
+++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MirrorBuilder.java Fri Feb 27 15:38:14 2009
@@ -0,0 +1,20 @@
+package org.apache.maven.repository;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+public interface MirrorBuilder
+{
+ ArtifactRepository getMirror( ArtifactRepository originalRepository );
+
+ void addMirror( String id, String mirrorOf, String url );
+
+ void clearMirrors();
+
+ // These need to go
+
+ boolean isExternalRepo( ArtifactRepository originalRepository );
+
+ boolean matchPattern( ArtifactRepository originalRepository, String pattern );
+
+ ArtifactRepository getMirrorRepository( ArtifactRepository repository );
+}
Propchange: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/MirrorBuilder.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java?rev=748558&view=auto
==============================================================================
--- maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java (added)
+++ maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java Fri Feb 27 15:38:14 2009
@@ -0,0 +1,189 @@
+package org.apache.maven.repository;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class MirrorProcessorTest
+ extends PlexusTestCase
+{
+ private MirrorBuilder mirrorBuilder;
+
+ protected void setUp()
+ throws Exception
+ {
+ mirrorBuilder = lookup( MirrorBuilder.class );
+ mirrorBuilder.clearMirrors();
+ }
+
+ public void testAddMirrorWithNullRepositoryId()
+ {
+ mirrorBuilder.addMirror( null, "test", "http://www.nowhere.com/" );
+ }
+
+ public void testExternalURL()
+ {
+ assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
+ assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
+ assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
+ assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
+ assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://" ) ) );
+ // these are local
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
+
+ // not a proper url so returns false;
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
+ assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "" ) ) );
+ }
+
+ public void testMirrorLookup()
+ {
+ mirrorBuilder.addMirror( "a", "a", "http://a" );
+ mirrorBuilder.addMirror( "b", "b", "http://b" );
+
+ ArtifactRepository repo = null;
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
+ assertEquals( "http://a", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "b", "http://a.a" ) );
+ assertEquals( "http://b", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
+ assertEquals( "http://c.c", repo.getUrl() );
+
+ }
+
+ public void testMirrorWildcardLookup()
+ {
+ mirrorBuilder.addMirror( "a", "a", "http://a" );
+ mirrorBuilder.addMirror( "b", "b", "http://b" );
+ mirrorBuilder.addMirror( "c", "*", "http://wildcard" );
+
+ ArtifactRepository repo = null;
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
+ assertEquals( "http://a", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "b", "http://a.a" ) );
+ assertEquals( "http://b", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
+ assertEquals( "http://wildcard", repo.getUrl() );
+
+ }
+
+ public void xtestMirrorStopOnFirstMatch()
+ {
+ //exact matches win first
+ mirrorBuilder.addMirror( "a2", "a,b", "http://a2" );
+ mirrorBuilder.addMirror( "a", "a", "http://a" );
+ //make sure repeated entries are skipped
+ mirrorBuilder.addMirror( "a", "a", "http://a3" );
+
+ mirrorBuilder.addMirror( "b", "b", "http://b" );
+ mirrorBuilder.addMirror( "c", "d,e", "http://de" );
+ mirrorBuilder.addMirror( "c", "*", "http://wildcard" );
+ mirrorBuilder.addMirror( "c", "e,f", "http://ef" );
+
+ ArtifactRepository repo = null;
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
+ assertEquals( "http://a", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "b", "http://a.a" ) );
+ assertEquals( "http://b", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
+ assertEquals( "http://wildcard", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "d", "http://d" ) );
+ assertEquals( "http://de", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "e", "http://e" ) );
+ assertEquals( "http://de", repo.getUrl() );
+
+ repo = mirrorBuilder.getMirrorRepository( getRepo( "f", "http://f" ) );
+ assertEquals( "http://wildcard", repo.getUrl() );
+
+ }
+
+
+ public void testPatterns()
+ {
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), ",*," ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
+
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), ",a," ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
+
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), "a" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), "a," ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), ",a" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), ",a," ) );
+
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a,b" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "b" ), "a,b" ) );
+
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "c" ), "a,b" ) );
+
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*,b" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*,!b" ) );
+
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "a" ), "*,!a" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "a" ), "!a,*" ) );
+
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "c" ), "*,!a" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "c" ), "!a,*" ) );
+
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "c" ), "!a,!c" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "d" ), "!a,!c*" ) );
+ }
+
+ public void testPatternsWithExternal()
+ {
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
+
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
+
+ assertFalse( mirrorBuilder.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
+ assertTrue( mirrorBuilder.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ *
+ * @param id
+ * @param url
+ * @return
+ */
+ private ArtifactRepository getRepo( String id, String url )
+ {
+ return new DefaultArtifactRepository( id, url, new DefaultRepositoryLayout() );
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ *
+ * @param id
+ * @return
+ */
+ private ArtifactRepository getRepo( String id )
+ {
+ return getRepo( id, "http://something" );
+ }
+}
Propchange: maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-repository/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision