]> source.dussan.org Git - archiva.git/commitdiff
added configuration to enable merging of source metadata if it exists.
authorEdwin L. Punzalan <epunzalan@apache.org>
Fri, 9 Jun 2006 07:32:14 +0000 (07:32 +0000)
committerEdwin L. Punzalan <epunzalan@apache.org>
Fri, 9 Jun 2006 07:32:14 +0000 (07:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@412961 13f79535-47bb-0310-9956-ffa450edef68

maven-repository-converter/src/main/java/org/apache/maven/repository/converter/DefaultRepositoryConverter.java
maven-repository-converter/src/test/expected-files/v4artifact-source-merging-metadata.xml [new file with mode: 0644]
maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java
maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.jar [new file with mode: 0644]
maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/1.0.0/correctArtifactMetadata-1.0.0.pom [new file with mode: 0644]
maven-repository-converter/src/test/source-modern-repository/test/correctArtifactMetadata/maven-metadata.xml [new file with mode: 0644]

index e946355c23b40d3ad32b5d9c2ecd69ca99c4348b..e7b5a88915188f15cfd74b6be09c54d131a63e98 100644 (file)
@@ -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
     {
-        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 (file)
index 0000000..f6fb7b1
--- /dev/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>
\ No newline at end of file
index f33895eb53bbcec23a4a47a9ddbe027224162a61..54c42b96bc4c6b4d6648f4025b1545a130ad4e68 100644 (file)
@@ -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 (file)
index 0000000..72af4bc
--- /dev/null
@@ -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 (file)
index 0000000..a258834
--- /dev/null
@@ -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 (file)
index 0000000..bfef089
--- /dev/null
@@ -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