Author: sisbell Date: Mon Sep 29 21:13:08 2008 New Revision: 700331 URL: http://svn.apache.org/viewvc?rev=700331&view=rev Log: Small perf tweak.
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=700331&r1=700330&r2=700331&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon Sep 29 21:13:08 2008 @@ -166,7 +166,8 @@ return project; } - File f = artifact.getFile(); + File f = (artifact.getFile() != null) ? artifact.getFile() : + new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );; repositoryHelper.findModelFromRepository( artifact, remoteArtifactRepositories, localRepository ); ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ); Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java?rev=700331&r1=700330&r2=700331&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java Mon Sep 29 21:13:08 2008 @@ -74,18 +74,23 @@ private MavenXpp3Reader modelReader; - private static HashMap<String, Model> cache = new HashMap<String, Model>(); + private static HashMap<String, Artifact> cache = new HashMap<String, Artifact>(); private Logger getLogger() { return logger; } - public Model findModelFromRepository( Artifact artifact, List remoteArtifactRepositories, + public void findModelFromRepository( Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository ) throws ProjectBuildingException { + if(cache.containsKey(artifact.getId())) + { + artifact.setFile(cache.get(artifact.getId()).getFile()); + } + String projectId = safeVersionlessKey( artifact.getGroupId(), artifact.getArtifactId() ); remoteArtifactRepositories = normalizeToArtifactRepositories( remoteArtifactRepositories, projectId ); @@ -106,48 +111,13 @@ artifact.getVersion(), artifact.getScope() ); } - Model legacy_model; try { artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository ); File file = projectArtifact.getFile(); artifact.setFile( file ); - if(cache.containsKey(projectId)) - { - legacy_model = cache.get(projectId); - } - else - { - legacy_model = readModelLegacy( projectId, file, false ); - cache.put(projectId, legacy_model); - } - - String downloadUrl = null; - - ArtifactStatus status = ArtifactStatus.NONE; - - DistributionManagement distributionManagement = legacy_model.getDistributionManagement(); - - if ( distributionManagement != null ) - { - downloadUrl = distributionManagement.getDownloadUrl(); - - status = ArtifactStatus.valueOf( distributionManagement.getStatus() ); - } - - checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, localRepository ); - - // TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that - // Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions? - if ( downloadUrl != null ) - { - projectArtifact.setDownloadUrl( downloadUrl ); - } - else - { - projectArtifact.setDownloadUrl( legacy_model.getUrl() ); - } + cache.put(artifact.getId(), artifact); } catch ( ArtifactResolutionException e ) { @@ -160,8 +130,6 @@ "POM '" + projectId + "' not found in repository: " + e.getMessage(), e ); } - - return legacy_model; } public List buildArtifactRepositories( Model model ) @@ -277,56 +245,6 @@ return ArtifactUtils.versionlessKey( gid, aid ); } - private void checkModelVersion( String modelSource, String projectId, File file ) - throws InvalidProjectModelException - { - if ( modelSource.indexOf( "<modelVersion>4.0.0" ) < 0 ) - { - throw new InvalidProjectModelException( projectId, "Not a v" + MAVEN_MODEL_VERSION + " POM.", file ); - } - } - - private Model readModelLegacy( String projectId, File file, boolean strict ) - throws ProjectBuildingException - { - Reader reader = null; - try - { - reader = ReaderFactory.newXmlReader( file ); - - String modelSource = IOUtil.toString( reader ); - - checkModelVersion( modelSource, projectId, file ); - - StringReader sReader = new StringReader( modelSource ); - - try - { - return new MavenXpp3Reader().read( sReader, strict ); - } - catch ( XmlPullParserException e ) - { - throw new InvalidProjectModelException( projectId, "Parse error reading POM. Reason: " + e.getMessage(), - file, e ); - } - } - catch ( FileNotFoundException e ) - { - throw new ProjectBuildingException( projectId, - "Could not find the model file '" + file.getAbsolutePath() + "'.", file, - e ); - } - catch ( IOException e ) - { - throw new ProjectBuildingException( projectId, "Failed to build model from file '" + - file.getAbsolutePath() + "'.\nError: \'" + e.getLocalizedMessage() + "\'", file, e ); - } - finally - { - IOUtil.close( reader ); - } - } - private void collectInitialRepositoriesFromModel( LinkedHashSet collected, Model model, File pomFile, boolean validProfilesXmlLocation, ProfileActivationContext profileActivationContext ) @@ -359,43 +277,6 @@ } } - private void checkStatusAndUpdate( Artifact projectArtifact, ArtifactStatus status, File file, - List remoteArtifactRepositories, ArtifactRepository localRepository ) - throws ArtifactNotFoundException - { - // TODO: configurable actions dependant on status - if ( !projectArtifact.isSnapshot() && ( status.compareTo( ArtifactStatus.DEPLOYED ) < 0 ) ) - { - // use default policy (enabled, daily update, warn on bad checksum) - ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy(); - // TODO: re-enable [MNG-798/865] - policy.setUpdatePolicy( ArtifactRepositoryPolicy.UPDATE_POLICY_NEVER ); - - if ( policy.checkOutOfDate( new Date( file.lastModified() ) ) ) - { - getLogger().info( - projectArtifact.getArtifactId() + ": updating metadata due to status of '" + status + "'" ); - try - { - projectArtifact.setResolved( false ); - artifactResolver.resolveAlways( projectArtifact, remoteArtifactRepositories, localRepository ); - } - catch ( ArtifactResolutionException e ) - { - getLogger().warn( "Error updating POM - using existing version" ); - getLogger().debug( "Cause", e ); - } - catch ( ArtifactNotFoundException e ) - { - getLogger().warn( "Error updating POM - not found. Removing local copy." ); - getLogger().debug( "Cause", e ); - file.delete(); - throw e; - } - } - } - } - public void initialize() throws InitializationException Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java?rev=700331&r1=700330&r2=700331&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java Mon Sep 29 21:13:08 2008 @@ -18,7 +18,7 @@ String ROLE = RepositoryHelper.class.getName(); - Model findModelFromRepository( Artifact artifact, List remoteArtifactRepositories, + void findModelFromRepository( Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository ) throws ProjectBuildingException;