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;
|
||||
|
||||
/**
|
||||
* @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
|
||||
{
|
||||
Metadata metadata;
|
||||
boolean changed = false;
|
||||
|
||||
//merge with target repository metadata
|
||||
File file = new File( targetRepository.getBasedir(),
|
||||
targetRepository.pathOfRemoteRepositoryMetadata( artifactMetadata ) );
|
||||
|
||||
Metadata metadata;
|
||||
boolean changed;
|
||||
|
||||
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>
|
Loading…
Reference in New Issue