From f2a8739925d34de99fa04427b3aec5ab7f40c7a5 Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Sat, 14 Jul 2012 15:23:20 +0200 Subject: [PATCH] Bug 384492 - Wrong repository key is used for artifact with unique version during resolveArtifact Fixed EnhancedLocalRepositoryManager to register timestamped snapshot artifacts cached from remote repositories using their remote filename --- .../impl/EnhancedLocalRepositoryManager.java | 12 ++++++---- .../EnhancedLocalRepositoryManagerTest.java | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java index 2edf635c..620cec22 100644 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java +++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2011 Sonatype, Inc. + * Copyright (c) 2010, 2012 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -101,14 +101,16 @@ class EnhancedLocalRepositoryManager @Override public void add( RepositorySystemSession session, LocalArtifactRegistration request ) { + Collection repositories; if ( request.getRepository() == null ) { - addArtifact( request.getArtifact(), Collections.singleton( LOCAL_REPO_ID ) ); + repositories = Collections.singleton( LOCAL_REPO_ID ); } else { - addArtifact( request.getArtifact(), getRepositoryKeys( request.getRepository(), request.getContexts() ) ); + repositories = getRepositoryKeys( request.getRepository(), request.getContexts() ); } + addArtifact( request.getArtifact(), repositories, request.getRepository() == null ); } private Collection getRepositoryKeys( RemoteRepository repository, Collection contexts ) @@ -126,13 +128,13 @@ class EnhancedLocalRepositoryManager return keys; } - private void addArtifact( Artifact artifact, Collection repositories ) + private void addArtifact( Artifact artifact, Collection repositories, boolean local ) { if ( artifact == null ) { throw new IllegalArgumentException( "artifact to register not specified" ); } - String path = getPathForLocalArtifact( artifact ); + String path = getPathForArtifact( artifact, local ); File file = new File( getRepository().getBasedir(), path ); addRepo( file, repositories ); } diff --git a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerTest.java b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerTest.java index 94149bf9..5e7a4393 100644 --- a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerTest.java +++ b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerTest.java @@ -43,6 +43,8 @@ public class EnhancedLocalRepositoryManagerTest private Artifact artifact; + private Artifact snapshot; + private File basedir; private EnhancedLocalRepositoryManager manager; @@ -72,6 +74,10 @@ public class EnhancedLocalRepositoryManagerTest new DefaultArtifact( "gid", "aid", "", "jar", "1-test", Collections. emptyMap(), TestFileUtils.createTempFile( "artifact" ) ); + snapshot = + new DefaultArtifact( "gid", "aid", "", "jar", "1.0-20120710.231549-9", + Collections. emptyMap(), TestFileUtils.createTempFile( "artifact" ) ); + metadata = new DefaultMetadata( "gid", "aid", "1-test", "maven-metadata.xml", Nature.RELEASE, TestFileUtils.createTempFile( "metadata" ) ); @@ -177,6 +183,15 @@ public class EnhancedLocalRepositoryManagerTest LocalArtifactRequest request = new LocalArtifactRequest( artifact, null, null ); LocalArtifactResult result = manager.find( session, request ); assertTrue( result.isAvailable() ); + assertEquals( null, result.getRepository() ); + + snapshot = snapshot.setVersion( snapshot.getBaseVersion() ); + addLocalArtifact( snapshot ); + + request = new LocalArtifactRequest( snapshot, null, null ); + result = manager.find( session, request ); + assertTrue( result.isAvailable() ); + assertEquals( null, result.getRepository() ); } @Test @@ -188,6 +203,14 @@ public class EnhancedLocalRepositoryManagerTest LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); LocalArtifactResult result = manager.find( session, request ); assertTrue( result.isAvailable() ); + assertEquals( repository, result.getRepository() ); + + addRemoteArtifact( snapshot ); + + request = new LocalArtifactRequest( snapshot, Arrays.asList( repository ), testContext ); + result = manager.find( session, request ); + assertTrue( result.isAvailable() ); + assertEquals( repository, result.getRepository() ); } @Test -- GitLab