Author: ogusakov Date: Tue Apr 7 00:18:23 2009 New Revision: 762576 URL: http://svn.apache.org/viewvc?rev=762576&view=rev Log: working on MercuryRepositorySystem - oprimized Adapter
Modified: maven/components/trunk/build-mercury.xml maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryAdaptor.java maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryRepositorySystem.java maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java maven/components/trunk/mercury-ant-tasks-1.0-alpha-6-SNAPSHOT.jar Modified: maven/components/trunk/build-mercury.xml URL: http://svn.apache.org/viewvc/maven/components/trunk/build-mercury.xml?rev=762576&r1=762575&r2=762576&view=diff ============================================================================== --- maven/components/trunk/build-mercury.xml (original) +++ maven/components/trunk/build-mercury.xml Tue Apr 7 00:18:23 2009 @@ -67,9 +67,13 @@ <property name="maven.repo.central" value="http://repository.sonatype.org/content/groups/public"/> <!-- <property name="maven.repo.central" value="http://repo1.maven.org/maven2"/> + <property name="maven.repo.update.policy" value="daily"/> + <property name="maven.repo.update.policy" value="always"/> --> <property name="maven.repo.update.policy" value="daily"/> - + + <property name="maven.repo.system" value="don.t"/> + <condition property="do.not.clean.local.repo"> <not> <isset property="clean.local.repo"/> @@ -89,6 +93,52 @@ <mkdir dir="${maven.repo.local}"/> </target> + <target name="flip-default-repository" unless="do.not.flip.repository"> + + <replace dir="${basedir}/maven-repository/src/main/java"> + <include name="**/LegacyRepositorySystem.java"/> + <replacefilter token='@Component( role = RepositorySystem.class, hint = "default" )' + value='@Component( role = RepositorySystem.class, hint = "${legacy-hint}" )'/> + <replacefilter token='@Component( role = RepositorySystem.class, hint = "legacy" )' + value='@Component( role = RepositorySystem.class, hint = "${legacy-hint}" )'/> + </replace> + + <replace dir="${basedir}/maven-repository-mercury/src/main/java"> + <include name="**/MercuryRepositorySystem.java"/> + <replacefilter token='@Component( role = RepositorySystem.class, hint = "mercury" )' + value='@Component( role = RepositorySystem.class, hint = "${mercury-hint}" )'/> + <replacefilter token='@Component( role = RepositorySystem.class, hint = "default" )' + value='@Component( role = RepositorySystem.class, hint = "${mercury-hint}" )'/> + </replace> + + <echo>maven.repo.system is ${maven.repo.system}, flip: legacy-hint=${legacy-hint}, mercury-hint=${mercury-hint}</echo> + + </target> + + <target name="flip-default-repository-system" description="flips repository system impl"> + + <condition property="legacy-hint" value="default"> + <equals arg1="${maven.repo.system}" arg2="legacy"/> + </condition> + <condition property="mercury-hint" value="mercury"> + <equals arg1="${maven.repo.system}" arg2="legacy"/> + </condition> + + <condition property="legacy-hint" value="legacy"> + <equals arg1="${maven.repo.system}" arg2="mercury"/> + </condition> + <condition property="mercury-hint" value="default"> + <equals arg1="${maven.repo.system}" arg2="mercury"/> + </condition> + + <condition property="do.not.flip.repository" value="default"> + <equals arg1="${maven.repo.system}" arg2="don.t"/> + </condition> + + <antcall target="flip-default-repository"/> + + </target> + <target name="pull" depends="init,clean-local-repo" unless="skip.pull"> <property name="verbose" value="false"/> <!-- Pull the dependencies that Maven needs to build --> @@ -219,7 +269,7 @@ <modello file="maven-compat/src/main/mdo/metadata.mdo"/> </target> - <target name="compile-boot" depends="generate-sources" description="compiles the bootstrap sources"> + <target name="compile-boot" depends="generate-sources,flip-default-repository-system" description="compiles the bootstrap sources"> <path id="sources"> <dirset dir="."> @@ -253,6 +303,12 @@ <arg value="install"/> <arg value="-Dmaven.repo.local=${maven.repo.local}"/> <arg value="-Dsurefire.useFile=${surefire.useFile}"/> + <!-- <debug-the-bootstrap> --> + <jvmarg value="-Xdebug"/> + <jvmarg value="-Xnoagent"/> + <jvmarg value="-Djava.compiler=NONE"/> + <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"/> + <!-- </debug-the-bootstrap> --> </java> </target> Modified: maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryAdaptor.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryAdaptor.java?rev=762576&r1=762575&r2=762576&view=diff ============================================================================== --- maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryAdaptor.java (original) +++ maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryAdaptor.java Tue Apr 7 00:18:23 2009 @@ -21,9 +21,14 @@ import java.io.File; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; @@ -46,9 +51,13 @@ */ public class MercuryAdaptor { + + private static Map<String, Repository> _repos = Collections.synchronizedMap( new HashMap<String, Repository>() ); + public static List<Repository> toMercuryRepos( ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, - DependencyProcessor dependencyProcessor ) + DependencyProcessor dependencyProcessor + ) { if ( localRepository == null && Util.isEmpty( remoteRepositories ) ) return null; @@ -60,9 +69,25 @@ if ( localRepository != null ) { - LocalRepositoryM2 lr = - new LocalRepositoryM2( localRepository.getId(), new File( localRepository.getUrl() ), - dependencyProcessor ); + String url = localRepository.getUrl(); + + LocalRepositoryM2 lr = (LocalRepositoryM2) _repos.get( url ); + + if( lr == null ) + try + { + URI rootURI = new URI( url ); + + File localRepoDir = new File( rootURI ); + + lr = new LocalRepositoryM2( localRepository.getId(), localRepoDir, dependencyProcessor ); + + _repos.put( url, lr ); + } + catch ( URISyntaxException e ) + { + throw new IllegalArgumentException( e ); + } res.add( lr ); } @@ -70,16 +95,24 @@ { for ( ArtifactRepository ar : remoteRepositories ) { - Server server; - try + String url = ar.getUrl(); + + RemoteRepositoryM2 rr = (RemoteRepositoryM2) _repos.get( url ); + + if( rr == null ) { - server = new Server( ar.getId(), new URL( ar.getUrl() ) ); - } - catch ( MalformedURLException e ) - { - throw new IllegalArgumentException( e ); + Server server; + try + { + server = new Server( ar.getId(), new URL( url ) ); + } + catch ( MalformedURLException e ) + { + throw new IllegalArgumentException( e ); + } + rr = new RemoteRepositoryM2( server, dependencyProcessor ); + _repos.put( url, rr ); } - RemoteRepositoryM2 rr = new RemoteRepositoryM2( server, dependencyProcessor ); res.add( rr ); } Modified: maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryRepositorySystem.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryRepositorySystem.java?rev=762576&r1=762575&r2=762576&view=diff ============================================================================== --- maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryRepositorySystem.java (original) +++ maven/components/trunk/maven-repository-mercury/src/main/java/org/apache/maven/repository/mercury/MercuryRepositorySystem.java Tue Apr 7 00:18:23 2009 @@ -25,6 +25,7 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; +import org.apache.maven.mercury.artifact.Artifact; import org.apache.maven.mercury.artifact.ArtifactMetadata; import org.apache.maven.mercury.artifact.ArtifactQueryList; import org.apache.maven.mercury.artifact.ArtifactScopeEnum; @@ -48,7 +49,7 @@ * @author Oleg Gusakov * @version $Id$ */ -...@component( role = RepositorySystem.class, hint = "mercury" ) +...@component( role = RepositorySystem.class, hint = "default" ) public class MercuryRepositorySystem extends LegacyRepositorySystem implements RepositorySystem @@ -83,15 +84,25 @@ try { - List<ArtifactMetadata> mercuryMetadataList = - _mercury.resolve( repos, null, MercuryAdaptor.toMercuryMetadata( request.getArtifact() ) ); + org.apache.maven.artifact.Artifact mavenRootArtifact = request.getArtifact(); + + ArtifactMetadata rootMd = MercuryAdaptor.toMercuryMetadata( mavenRootArtifact ); + + List<ArtifactMetadata> mercuryMetadataList = _mercury.resolve( repos, null, rootMd ); List<org.apache.maven.mercury.artifact.Artifact> mercuryArtifactList = _mercury.read( repos, mercuryMetadataList ); if ( !Util.isEmpty( mercuryArtifactList ) ) + { for ( org.apache.maven.mercury.artifact.Artifact a : mercuryArtifactList ) result.addArtifact( MercuryAdaptor.toMavenArtifact( _artifactFactory, a ) ); + + // maven likes the original artifact instance - fill it in + Artifact mercuryRootArtifact = mercuryArtifactList.get( 0 ); + + mavenRootArtifact.setFile( mercuryRootArtifact.getFile() ); + } } catch ( RepositoryException e ) { Modified: maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java?rev=762576&r1=762575&r2=762576&view=diff ============================================================================== --- maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java (original) +++ maven/components/trunk/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java Tue Apr 7 00:18:23 2009 @@ -59,7 +59,7 @@ /** * @author Jason van Zyl */ -...@component( role = RepositorySystem.class, hint = "default" ) +...@component( role = RepositorySystem.class, hint = "legacy" ) public class LegacyRepositorySystem implements RepositorySystem { Modified: maven/components/trunk/mercury-ant-tasks-1.0-alpha-6-SNAPSHOT.jar URL: http://svn.apache.org/viewvc/maven/components/trunk/mercury-ant-tasks-1.0-alpha-6-SNAPSHOT.jar?rev=762576&r1=762575&r2=762576&view=diff ============================================================================== Binary files - no diff available.