git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@412961 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-0.9-alpha-1
@@ -95,6 +95,11 @@ public class DefaultRepositoryConverter | |||
*/ | |||
private boolean dryrun; | |||
/** | |||
* @plexus.configuration default-value="true" | |||
*/ | |||
private boolean mergeWithSourceMetadata; | |||
/** | |||
* @plexus.requirement | |||
*/ | |||
@@ -120,8 +125,8 @@ public class DefaultRepositoryConverter | |||
Versioning versioning = new Versioning(); | |||
versioning.addVersion( artifact.getBaseVersion() ); | |||
metadata.setVersioning( versioning ); | |||
updateMetadata( new ArtifactRepositoryMetadata( artifact ), targetRepository, metadata, | |||
transaction ); | |||
updateMetadata( new ArtifactRepositoryMetadata( artifact ), artifact.getRepository(), | |||
targetRepository, metadata, transaction ); | |||
metadata = createBaseMetadata( artifact ); | |||
metadata.setVersion( artifact.getBaseVersion() ); | |||
@@ -136,10 +141,9 @@ public class DefaultRepositoryConverter | |||
versioning.setSnapshot( snapshot ); | |||
} | |||
// TODO: merge latest/release/snapshot from source instead | |||
metadata.setVersioning( versioning ); | |||
updateMetadata( new SnapshotArtifactRepositoryMetadata( artifact ), targetRepository, metadata, | |||
transaction ); | |||
updateMetadata( new SnapshotArtifactRepositoryMetadata( artifact ), artifact.getRepository(), | |||
targetRepository, metadata, transaction ); | |||
if ( !dryrun ) | |||
{ | |||
@@ -159,16 +163,16 @@ public class DefaultRepositoryConverter | |||
return metadata; | |||
} | |||
private void updateMetadata( RepositoryMetadata artifactMetadata, ArtifactRepository targetRepository, | |||
Metadata newMetadata, FileTransaction transaction ) | |||
private void updateMetadata( RepositoryMetadata artifactMetadata, ArtifactRepository sourceRepository, | |||
ArtifactRepository targetRepository, Metadata newMetadata, FileTransaction transaction ) | |||
throws RepositoryConversionException | |||
{ | |||
File file = new File( targetRepository.getBasedir(), | |||
targetRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) ); | |||
Metadata metadata; | |||
boolean changed; | |||
boolean changed = false; | |||
//merge with target repository metadata | |||
File file = new File( targetRepository.getBasedir(), | |||
targetRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) ); | |||
if ( file.exists() ) | |||
{ | |||
metadata = readMetadata( file ); | |||
@@ -180,6 +184,19 @@ public class DefaultRepositoryConverter | |||
metadata = newMetadata; | |||
} | |||
//merge with source repository metadata | |||
if ( mergeWithSourceMetadata ) | |||
{ | |||
File srcfile = new File( sourceRepository.getBasedir(), | |||
sourceRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) ); | |||
if ( srcfile.exists() ) | |||
{ | |||
Metadata sourceMetadata = readMetadata( srcfile ); | |||
changed = changed | metadata.merge( sourceMetadata ); | |||
} | |||
} | |||
if ( changed ) | |||
{ | |||
StringWriter writer = null; |
@@ -0,0 +1,10 @@ | |||
<metadata> | |||
<groupId>test</groupId> | |||
<artifactId>correctArtifactMetadata</artifactId> | |||
<versioning> | |||
<versions> | |||
<version>1.0.0</version> | |||
<version>2.0</version> | |||
</versions> | |||
</versioning> | |||
</metadata> |
@@ -732,6 +732,39 @@ public class RepositoryConverterTest | |||
assertFalse( "Check metadata not created", metadataFile.exists() ); | |||
} | |||
public void testSourceArtifactMetadataMerging() | |||
throws Exception | |||
{ | |||
// test metadata in target repository is merged with the metadata in the source repository | |||
createModernSourceRepository(); | |||
Artifact artifact = createArtifact( "test", "correctArtifactMetadata", "1.0.0" ); | |||
repositoryConverter.convert( artifact, targetRepository, reporter ); | |||
checkSuccess(); | |||
File artifactFile = new File( targetRepository.getBasedir(), targetRepository.pathOf( artifact ) ); | |||
assertTrue( "Check artifact created", artifactFile.exists() ); | |||
assertTrue( "Check artifact matches", FileUtils.contentEquals( artifactFile, artifact.getFile() ) ); | |||
artifact = createPomArtifact( artifact ); | |||
File pomFile = new File( targetRepository.getBasedir(), targetRepository.pathOf( artifact ) ); | |||
File sourcePomFile = new File( sourceRepository.getBasedir(), sourceRepository.pathOf( artifact ) ); | |||
assertTrue( "Check POM created", pomFile.exists() ); | |||
compareFiles( sourcePomFile, pomFile ); | |||
ArtifactMetadata artifactMetadata = new ArtifactRepositoryMetadata( artifact ); | |||
File artifactMetadataFile = new File( targetRepository.getBasedir(), | |||
targetRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) ); | |||
assertTrue( "Check artifact metadata created", artifactMetadataFile.exists() ); | |||
File expectedMetadataFile = getTestFile( "src/test/expected-files/v4artifact-source-merging-metadata.xml" ); | |||
compareFiles( expectedMetadataFile, artifactMetadataFile ); | |||
} | |||
public void testInvalidSourceSnapshotMetadata() | |||
throws Exception, MalformedURLException | |||
{ |
@@ -0,0 +1 @@ | |||
incorrectMd5 |
@@ -0,0 +1,22 @@ | |||
<!-- | |||
~ Copyright 2005-2006 The Apache Software Foundation. | |||
~ | |||
~ Licensed under the Apache License, Version 2.0 (the "License"); | |||
~ you may not use this file except in compliance with the License. | |||
~ You may obtain a copy of the License at | |||
~ | |||
~ http://www.apache.org/licenses/LICENSE-2.0 | |||
~ | |||
~ Unless required by applicable law or agreed to in writing, software | |||
~ distributed under the License is distributed on an "AS IS" BASIS, | |||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
~ See the License for the specific language governing permissions and | |||
~ limitations under the License. | |||
--> | |||
<project> | |||
<modelVersion>4.0.0</modelVersion> | |||
<artifactId>correctArtifactMetadata</artifactId> | |||
<groupId>test</groupId> | |||
<version>1.0.0</version> | |||
</project> |
@@ -0,0 +1,26 @@ | |||
<!-- | |||
~ Copyright 2005-2006 The Apache Software Foundation. | |||
~ | |||
~ Licensed under the Apache License, Version 2.0 (the "License"); | |||
~ you may not use this file except in compliance with the License. | |||
~ You may obtain a copy of the License at | |||
~ | |||
~ http://www.apache.org/licenses/LICENSE-2.0 | |||
~ | |||
~ Unless required by applicable law or agreed to in writing, software | |||
~ distributed under the License is distributed on an "AS IS" BASIS, | |||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
~ See the License for the specific language governing permissions and | |||
~ limitations under the License. | |||
--> | |||
<metadata> | |||
<groupId>test</groupId> | |||
<artifactId>correctArtifactMetadata</artifactId> | |||
<versioning> | |||
<versions> | |||
<version>1.0.0</version> | |||
<version>2.0</version> | |||
</versions> | |||
</versioning> | |||
</metadata> |