mirror of https://github.com/apache/archiva.git
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
This commit is contained in:
parent
78de20b9d1
commit
e19841f467
|
@ -95,6 +95,11 @@ public class DefaultRepositoryConverter
|
||||||
*/
|
*/
|
||||||
private boolean dryrun;
|
private boolean dryrun;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.configuration default-value="true"
|
||||||
|
*/
|
||||||
|
private boolean mergeWithSourceMetadata;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @plexus.requirement
|
* @plexus.requirement
|
||||||
*/
|
*/
|
||||||
|
@ -120,8 +125,8 @@ public class DefaultRepositoryConverter
|
||||||
Versioning versioning = new Versioning();
|
Versioning versioning = new Versioning();
|
||||||
versioning.addVersion( artifact.getBaseVersion() );
|
versioning.addVersion( artifact.getBaseVersion() );
|
||||||
metadata.setVersioning( versioning );
|
metadata.setVersioning( versioning );
|
||||||
updateMetadata( new ArtifactRepositoryMetadata( artifact ), targetRepository, metadata,
|
updateMetadata( new ArtifactRepositoryMetadata( artifact ), artifact.getRepository(),
|
||||||
transaction );
|
targetRepository, metadata, transaction );
|
||||||
|
|
||||||
metadata = createBaseMetadata( artifact );
|
metadata = createBaseMetadata( artifact );
|
||||||
metadata.setVersion( artifact.getBaseVersion() );
|
metadata.setVersion( artifact.getBaseVersion() );
|
||||||
|
@ -136,10 +141,9 @@ public class DefaultRepositoryConverter
|
||||||
versioning.setSnapshot( snapshot );
|
versioning.setSnapshot( snapshot );
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: merge latest/release/snapshot from source instead
|
|
||||||
metadata.setVersioning( versioning );
|
metadata.setVersioning( versioning );
|
||||||
updateMetadata( new SnapshotArtifactRepositoryMetadata( artifact ), targetRepository, metadata,
|
updateMetadata( new SnapshotArtifactRepositoryMetadata( artifact ), artifact.getRepository(),
|
||||||
transaction );
|
targetRepository, metadata, transaction );
|
||||||
|
|
||||||
if ( !dryrun )
|
if ( !dryrun )
|
||||||
{
|
{
|
||||||
|
@ -159,16 +163,16 @@ public class DefaultRepositoryConverter
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateMetadata( RepositoryMetadata artifactMetadata, ArtifactRepository targetRepository,
|
private void updateMetadata( RepositoryMetadata artifactMetadata, ArtifactRepository sourceRepository,
|
||||||
Metadata newMetadata, FileTransaction transaction )
|
ArtifactRepository targetRepository, Metadata newMetadata, FileTransaction transaction )
|
||||||
throws RepositoryConversionException
|
throws RepositoryConversionException
|
||||||
{
|
{
|
||||||
|
Metadata metadata;
|
||||||
|
boolean changed = false;
|
||||||
|
|
||||||
|
//merge with target repository metadata
|
||||||
File file = new File( targetRepository.getBasedir(),
|
File file = new File( targetRepository.getBasedir(),
|
||||||
targetRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) );
|
targetRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) );
|
||||||
|
|
||||||
Metadata metadata;
|
|
||||||
boolean changed;
|
|
||||||
|
|
||||||
if ( file.exists() )
|
if ( file.exists() )
|
||||||
{
|
{
|
||||||
metadata = readMetadata( file );
|
metadata = readMetadata( file );
|
||||||
|
@ -180,6 +184,19 @@ public class DefaultRepositoryConverter
|
||||||
metadata = newMetadata;
|
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 )
|
if ( changed )
|
||||||
{
|
{
|
||||||
StringWriter writer = null;
|
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() );
|
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()
|
public void testInvalidSourceSnapshotMetadata()
|
||||||
throws Exception, MalformedURLException
|
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>
|
Loading…
Reference in New Issue