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 2009/06/12 19:29:44 UTC
svn commit: r784210 - in /maven/components/trunk:
maven-core/src/main/java/org/apache/maven/project/
maven-repository/src/main/java/org/apache/maven/repository/
maven-repository/src/main/java/org/apache/maven/repository/legacy/
Author: bentmann
Date: Fri Jun 12 17:29:44 2009
New Revision: 784210
URL: http://svn.apache.org/viewvc?rev=784210&view=rev
Log:
[MNG-4190] same remote repo is referecned multiple times
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/RepositorySystem.java
maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java?rev=784210&r1=784209&r2=784210&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java Fri Jun 12 17:29:44 2009
@@ -233,27 +233,22 @@
this.repositorySystem = repositorySystem;
originalModel = model;
- remoteArtifactRepositories = new ArrayList<ArtifactRepository>();
+ remoteArtifactRepositories =
+ createArtifactRepositories( model.getRepositories(), projectBuilderConfiguration.getRemoteRepositories() );
- for ( Repository r : model.getRepositories() )
- {
- try
- {
- remoteArtifactRepositories.add( repositorySystem.buildArtifactRepository( r ) );
- }
- catch ( InvalidRepositoryException e )
- {
-
- }
- }
+ pluginArtifactRepositories = createArtifactRepositories( model.getPluginRepositories(), null );
+ }
- pluginArtifactRepositories = new ArrayList<ArtifactRepository>();
+ private List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
+ List<ArtifactRepository> externalRepositories )
+ {
+ List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
- for ( Repository r : model.getPluginRepositories() )
+ for ( Repository repository : pomRepositories )
{
try
{
- pluginArtifactRepositories.add( repositorySystem.buildArtifactRepository( r ) );
+ artifactRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
}
catch ( InvalidRepositoryException e )
{
@@ -261,14 +256,16 @@
}
}
- remoteArtifactRepositories = repositorySystem.getMirrors( remoteArtifactRepositories );
+ artifactRepositories = repositorySystem.getMirrors( artifactRepositories );
- if ( projectBuilderConfiguration.getRemoteRepositories() != null )
+ if ( externalRepositories != null )
{
- remoteArtifactRepositories.addAll( projectBuilderConfiguration.getRemoteRepositories() );
+ artifactRepositories.addAll( externalRepositories );
}
- pluginArtifactRepositories = repositorySystem.getMirrors( pluginArtifactRepositories );
+ artifactRepositories = repositorySystem.getEffectiveRepositories( artifactRepositories );
+
+ return artifactRepositories;
}
// TODO: Find a way to use <relativePath/> here...it's tricky, because the moduleProject
Modified: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/RepositorySystem.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/RepositorySystem.java?rev=784210&r1=784209&r2=784210&view=diff
==============================================================================
--- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/RepositorySystem.java (original)
+++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/RepositorySystem.java Fri Jun 12 17:29:44 2009
@@ -70,7 +70,18 @@
ArtifactRepository createLocalRepository( File localRepository )
throws InvalidRepositoryException;
-
+
+ /**
+ * Calculates the effective repositories for the given input repositories. This process will essentially remove
+ * duplicate repositories by merging them into one equivalent repository. It is worth to point out that merging does
+ * not simply choose one of the input repositories and discards the others but actually combines their possibly
+ * different policies.
+ *
+ * @param repositories The original repositories, may be {@code null}.
+ * @return The effective repositories or {@code null} if the input was {@code null}.
+ */
+ List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories );
+
ArtifactResolutionResult resolve( ArtifactResolutionRequest request );
MetadataResolutionResult resolveMetadata( MetadataResolutionRequest request );
Modified: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java?rev=784210&r1=784209&r2=784210&view=diff
==============================================================================
--- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java (original)
+++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java Fri Jun 12 17:29:44 2009
@@ -17,7 +17,11 @@
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.InvalidRepositoryException;
@@ -389,6 +393,137 @@
return mirrorBuilder.getMirrors( repositories );
}
+ public List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories )
+ {
+ if ( repositories == null )
+ {
+ return null;
+ }
+
+ Map<String, List<ArtifactRepository>> reposByKey = new LinkedHashMap<String, List<ArtifactRepository>>();
+
+ for ( ArtifactRepository repository : repositories )
+ {
+ String key = repository.getId();
+
+ List<ArtifactRepository> aliasedRepos = reposByKey.get( key );
+
+ if ( aliasedRepos == null )
+ {
+ aliasedRepos = new ArrayList<ArtifactRepository>();
+ reposByKey.put( key, aliasedRepos );
+ }
+
+ aliasedRepos.add( repository );
+ }
+
+ List<ArtifactRepository> effectiveRepositories = new ArrayList<ArtifactRepository>();
+
+ for ( List<ArtifactRepository> aliasedRepos : reposByKey.values() )
+ {
+ List<ArtifactRepositoryPolicy> releasePolicies =
+ new ArrayList<ArtifactRepositoryPolicy>( aliasedRepos.size() );
+
+ for ( ArtifactRepository aliasedRepo : aliasedRepos )
+ {
+ releasePolicies.add( aliasedRepo.getReleases() );
+ }
+
+ ArtifactRepositoryPolicy releasePolicy = getEffectivePolicy( releasePolicies );
+
+ List<ArtifactRepositoryPolicy> snapshotPolicies =
+ new ArrayList<ArtifactRepositoryPolicy>( aliasedRepos.size() );
+
+ for ( ArtifactRepository aliasedRepo : aliasedRepos )
+ {
+ snapshotPolicies.add( aliasedRepo.getSnapshots() );
+ }
+
+ ArtifactRepositoryPolicy snapshotPolicy = getEffectivePolicy( snapshotPolicies );
+
+ ArtifactRepository aliasedRepo = aliasedRepos.get( 0 );
+
+ ArtifactRepository effectiveRepository =
+ artifactRepositoryFactory.createArtifactRepository( aliasedRepo.getId(), aliasedRepo.getUrl(),
+ aliasedRepo.getLayout(), snapshotPolicy,
+ releasePolicy );
+
+ effectiveRepositories.add( effectiveRepository );
+ }
+
+ return effectiveRepositories;
+ }
+
+ private ArtifactRepositoryPolicy getEffectivePolicy( Collection<ArtifactRepositoryPolicy> policies )
+ {
+ ArtifactRepositoryPolicy effectivePolicy = null;
+
+ for ( ArtifactRepositoryPolicy policy : policies )
+ {
+ if ( effectivePolicy == null )
+ {
+ effectivePolicy =
+ new ArtifactRepositoryPolicy( policy.isEnabled(), policy.getUpdatePolicy(),
+ policy.getChecksumPolicy() );
+ }
+ 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() );
+ }
+ }
+ }
+ }
+
+ 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 MetadataResolutionResult resolveMetadata( MetadataResolutionRequest request )
{