*/
private boolean dryrun;
+ /**
+ * @plexus.configuration default-value="true"
+ */
+ private boolean mergeWithSourceMetadata;
+
/**
* @plexus.requirement
*/
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() );
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 )
{
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 );
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;
--- /dev/null
+<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
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
{
--- /dev/null
+incorrectMd5
--- /dev/null
+<!--
+ ~ 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>
--- /dev/null
+<!--
+ ~ 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