summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin L. Punzalan <epunzalan@apache.org>2006-06-09 07:32:14 +0000
committerEdwin L. Punzalan <epunzalan@apache.org>2006-06-09 07:32:14 +0000
commite19841f467db60cd899de050810baaeeb58947a4 (patch)
tree0147f7ceb1445fb2b6725364c9b479fc87b8cbd5
parent78de20b9d197cdaffb48226a9ab4a549f88e0202 (diff)
downloadarchiva-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
-rw-r--r--maven-repository-converter/src/main/java/org/apache/maven/repository/converter/DefaultRepositoryConverter.java39
-rw-r--r--maven-repository-converter/src/test/expected-files/v4artifact-source-merging-metadata.xml10
-rw-r--r--maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java33
-rw-r--r--maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.jar1
-rw-r--r--maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.pom22
-rw-r--r--maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/maven-metadata.xml26
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