From b529deb2df0f32c44c376a5267c00546c0c84768 Mon Sep 17 00:00:00 2001 From: Brett Leslie Porter Date: Thu, 24 Mar 2005 16:03:51 +0000 Subject: [PATCH] bug fixes, but still not completely fixed git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163693 13f79535-47bb-0310-9956-ffa450edef68 --- .../metadata/SnapshotArtifactMetadata.java | 17 +++--- .../resolver/DefaultArtifactResolver.java | 13 ++++- .../transform/SnapshotTransformation.java | 56 ++++++++++++------- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java index e974951f2b..32de5287c0 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java @@ -113,15 +113,18 @@ private File getLocalRepositoryLocation( ArtifactRepository localRepository ) public String getVersion() { String version = artifact.getVersion(); - if ( version != null ) + if ( timestamp != null ) { - version = StringUtils.replace( version, "SNAPSHOT", timestamp ); + if ( version != null ) + { + version = StringUtils.replace( version, "SNAPSHOT", timestamp ) + "-" + buildNumber; + } + else + { + version = timestamp + "-" + buildNumber; + } } - else - { - version = timestamp; - } - return version + "-" + buildNumber; + return version; } public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, WagonManager wagonManager ) diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java index 4d519589c3..75ef1040f3 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java @@ -214,12 +214,19 @@ public ArtifactResolutionResult resolveTransitively( Set artifacts, List remoteR throw new ArtifactResolutionException( "Error transitively resolving artifacts: ", e ); } - for ( Iterator i = artifactResolutionResult.getArtifacts().values().iterator(); i.hasNext(); ) + // TODO: this is unclean, but necessary as long as resolve may return a different artifact + Map collectedArtifacts = artifactResolutionResult.getArtifacts(); + Map resolvedArtifacts = new HashMap( collectedArtifacts.size() ); + for ( Iterator i = collectedArtifacts.keySet().iterator(); i.hasNext(); ) { - // TODO: resolve may modify artifacts, do we need to get the new list? - resolve( (Artifact) i.next(), remoteRepositories, localRepository ); + Object key = i.next(); + resolvedArtifacts.put( key, resolve( (Artifact) collectedArtifacts.get( key ), remoteRepositories, + localRepository ) ); } + collectedArtifacts.clear(); + collectedArtifacts.putAll( resolvedArtifacts ); + return artifactResolutionResult; } diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java b/maven-artifact/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java index 9074524c7b..fbbe2b5032 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java @@ -49,12 +49,17 @@ public Artifact transformForResolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository ) throws ArtifactMetadataRetrievalException { - if ( isSnapshot( artifact ) && !alreadyResolved( artifact ) ) + if ( isSnapshot( artifact ) ) { // TODO: this mostly works, however... // - poms and jars are different, so both are checked individually // - when a pom is downloaded, it prevents the JAR getting downloaded because of the timestamp // - need to gather first, group them all up by groupId/artifactId, then go after them + // - alternatively, keep the timestamp when downloading (as is done here), and use the SNAPSHOT file for install + // - however, there is no mechanism to flip back and forward, and presently it keeps looking for 2.0-TIMESTAMP-0 instead as that is in the build file + + // - we definitely need the manual/daily check as this is quite slow given the large number of snapshots inside m2 presently + /* SnapshotArtifactMetadata localMetadata; try @@ -70,32 +75,37 @@ public Artifact transformForResolve( Artifact artifact, List remoteRepositories, throw new ArtifactMetadataRetrievalException( "Error reading local metadata", e ); } - boolean foundRemote = false; - for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); ) + if ( !alreadyResolved( artifact ) ) { - ArtifactRepository remoteRepository = (ArtifactRepository) i.next(); - - SnapshotArtifactMetadata remoteMetadata = SnapshotArtifactMetadata.createRemoteSnapshotMetadata( - artifact ); - remoteMetadata.retrieveFromRemoteRepository( remoteRepository, wagonManager ); - - if ( remoteMetadata.compareTo( localMetadata ) > 0 ) + boolean foundRemote = false; + for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); ) { - // TODO: investigate transforming this in place, in which case resolve can return void - artifact = createArtifactCopy( artifact, remoteMetadata ); - artifact.setRepository( remoteRepository ); + ArtifactRepository remoteRepository = (ArtifactRepository) i.next(); - localMetadata = remoteMetadata; - foundRemote = true; + SnapshotArtifactMetadata remoteMetadata = SnapshotArtifactMetadata.createRemoteSnapshotMetadata( + artifact ); + remoteMetadata.retrieveFromRemoteRepository( remoteRepository, wagonManager ); + + if ( remoteMetadata.compareTo( localMetadata ) > 0 ) + { + // TODO: investigate transforming this in place, in which case resolve can return void + artifact.setRepository( remoteRepository ); + + localMetadata = remoteMetadata; + foundRemote = true; + } + } + + if ( foundRemote ) + { + artifact.addMetadata( localMetadata ); } } - if ( foundRemote ) - { - artifact.addMetadata( localMetadata ); - } -*/ + artifact = createArtifactCopy( artifact, localMetadata ); + resolvedArtifactCache.add( getCacheKey( artifact ) ); +*/ } return artifact; } @@ -140,15 +150,21 @@ public Artifact transformForDeployment( Artifact artifact, ArtifactRepository re private Artifact createArtifactCopy( Artifact artifact, SnapshotArtifactMetadata metadata ) { + ArtifactRepository oldRepository = artifact.getRepository(); List list = artifact.getMetadataList(); + artifact = new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), metadata.getVersion(), artifact.getScope(), artifact.getType(), artifact.getClassifier() ); + for ( Iterator i = list.iterator(); i.hasNext(); ) { ArtifactMetadata m = (ArtifactMetadata) i.next(); m.setArtifact( artifact ); artifact.addMetadata( m ); } + + artifact.setRepository( oldRepository ); + return artifact; }