diff options
author | Edwin L. Punzalan <epunzalan@apache.org> | 2006-06-09 07:32:14 +0000 |
---|---|---|
committer | Edwin L. Punzalan <epunzalan@apache.org> | 2006-06-09 07:32:14 +0000 |
commit | e19841f467db60cd899de050810baaeeb58947a4 (patch) | |
tree | 0147f7ceb1445fb2b6725364c9b479fc87b8cbd5 | |
parent | 78de20b9d197cdaffb48226a9ab4a549f88e0202 (diff) | |
download | archiva-e19841f467db60cd899de050810baaeeb58947a4.tar.gz archiva-e19841f467db60cd899de050810baaeeb58947a4.zip |
added configuration to enable merging of source metadata if it exists.
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@412961 13f79535-47bb-0310-9956-ffa450edef68
6 files changed, 120 insertions, 11 deletions
diff --git a/maven-repository-converter/src/main/java/org/apache/maven/repository/converter/DefaultRepositoryConverter.java b/maven-repository-converter/src/main/java/org/apache/maven/repository/converter/DefaultRepositoryConverter.java index e946355c2..e7b5a8891 100644 --- a/maven-repository-converter/src/main/java/org/apache/maven/repository/converter/DefaultRepositoryConverter.java +++ b/maven-repository-converter/src/main/java/org/apache/maven/repository/converter/DefaultRepositoryConverter.java @@ -96,6 +96,11 @@ public class DefaultRepositoryConverter private boolean dryrun; /** + * @plexus.configuration default-value="true" + */ + private boolean mergeWithSourceMetadata; + + /** * @plexus.requirement */ private I18N i18n; @@ -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; diff --git a/maven-repository-converter/src/test/expected-files/v4artifact-source-merging-metadata.xml b/maven-repository-converter/src/test/expected-files/v4artifact-source-merging-metadata.xml new file mode 100644 index 000000000..f6fb7b1d9 --- /dev/null +++ b/maven-repository-converter/src/test/expected-files/v4artifact-source-merging-metadata.xml @@ -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>
\ No newline at end of file diff --git a/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java b/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java index f33895eb5..54c42b96b 100644 --- a/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java +++ b/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java @@ -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 { diff --git a/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.jar b/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.jar new file mode 100644 index 000000000..72af4bc10 --- /dev/null +++ b/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.jar @@ -0,0 +1 @@ +incorrectMd5 diff --git a/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.pom b/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.pom new file mode 100644 index 000000000..a258834c1 --- /dev/null +++ b/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.pom @@ -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> diff --git a/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/maven-metadata.xml b/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/maven-metadata.xml new file mode 100644 index 000000000..bfef089f3 --- /dev/null +++ b/maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/maven-metadata.xml @@ -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>
\ No newline at end of file |