Author: maartenc
Date: Mon May  5 20:56:51 2014
New Revision: 1592628

URL: http://svn.apache.org/r1592628
Log:
IMPROVEMENT: ivy:makepom will generate an exclusion when transitive=false on a 
dependency (IVY-1470)

Added:
    
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom
    
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml
Modified:
    ant/ivy/core/trunk/CHANGES.txt
    
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java
    
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=1592628&r1=1592627&r2=1592628&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Mon May  5 20:56:51 2014
@@ -144,6 +144,7 @@ for detailed view of each issue, please 
 =====================================
 - IMPROVEMENT: Add support for packed jar within an OSGi bundle
 - IMPROVEMENT: ModuleRules.getRule is O(n) leading to resolution slowness 
(IVY-1465) (Thanks to Zhong Wang aka Kewpie)
+- IMPROVEMENT: ivy:makepom will generate an exclusion when transitive=false on 
a dependency (IVY-1470)
 
 - FIX: impossible to get artifacts when data has not been loaded. (IVY-1399) 
(Thanks to David Turner)
 - FIX: regression introduced by IVY-1457, dependency management wasn't 
properly handled introducing lots of resolution failures

Modified: 
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java?rev=1592628&r1=1592627&r2=1592628&view=diff
==============================================================================
--- 
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java
 (original)
+++ 
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java
 Mon May  5 20:56:51 2014
@@ -228,7 +228,7 @@ public final class PomModuleDescriptorWr
                     version = md.getModuleRevisionId().getRevision();
                 }
                 printDependency(out, indent, groupId, dep.getArtifact(), 
version, dep.getType(),
-                    dep.getClassifier(), dep.getScope(), dep.isOptional(), 
null);
+                    dep.getClassifier(), dep.getScope(), dep.isOptional(), 
true, null);
             }
 
             // now print the dependencies listed in the ModuleDescriptor
@@ -251,13 +251,15 @@ public final class PomModuleDescriptorWr
                         String scope = 
mapping.getScope(dds[i].getModuleConfigurations());
                         boolean optional = 
mapping.isOptional(dds[i].getModuleConfigurations());
                         printDependency(out, indent, mrid.getOrganisation(), 
mrid.getName(),
-                            mrid.getRevision(), type, classifier, scope, 
optional, excludes);
+                            mrid.getRevision(), type, classifier, scope, 
optional,
+                            dds[i].isTransitive(), excludes);
                     }
                 } else {
                     String scope = 
mapping.getScope(dds[i].getModuleConfigurations());
                     boolean optional = 
mapping.isOptional(dds[i].getModuleConfigurations());
                     printDependency(out, indent, mrid.getOrganisation(), 
mrid.getName(),
-                        mrid.getRevision(), null, null, scope, optional, 
excludes);
+                        mrid.getRevision(), null, null, scope, optional, 
dds[i].isTransitive(),
+                        excludes);
                 }
             }
 
@@ -270,7 +272,7 @@ public final class PomModuleDescriptorWr
 
     private static void printDependency(PrintWriter out, int indent, String 
groupId,
             String artifactId, String version, String type, String classifier, 
String scope,
-            boolean isOptional, ExcludeRule[] excludes) {
+            boolean isOptional, boolean isTransitive, ExcludeRule[] excludes) {
         indent(out, indent * 2);
         out.println("<dependency>");
         indent(out, indent * 3);
@@ -295,7 +297,20 @@ public final class PomModuleDescriptorWr
             indent(out, indent * 3);
             out.println("<optional>true</optional>");
         }
-        if (excludes != null) {
+        if (!isTransitive) {
+            indent(out, indent * 3);
+            out.println("<exclusions>");
+            indent(out, indent * 4);
+            out.println("<exclusion>");
+            indent(out, indent * 5);
+            out.println("<groupId>*</groupId>");
+            indent(out, indent * 5);
+            out.println("<artifactId>*</artifactId>");
+            indent(out, indent * 4);
+            out.println("</exclusion>");
+            indent(out, indent * 3);
+            out.println("</exclusions>");
+        } else if (excludes != null) {
             printExclusions(excludes, out, indent);
         }
         indent(out, indent * 2);

Modified: 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java?rev=1592628&r1=1592627&r2=1592628&view=diff
==============================================================================
--- 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java
 (original)
+++ 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java
 Mon May  5 20:56:51 2014
@@ -27,6 +27,7 @@ import junit.framework.TestCase;
 
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.settings.IvySettings;
+import org.apache.ivy.plugins.parser.ModuleDescriptorParserRegistry;
 import org.apache.ivy.util.FileUtil;
 
 public class PomModuleDescriptorWriterTest extends TestCase {
@@ -121,6 +122,20 @@ public class PomModuleDescriptorWriterTe
         assertEquals(expected, wrote);
     }
 
+    public void testTransitive() throws Exception {
+        ModuleDescriptor md = 
ModuleDescriptorParserRegistry.getInstance().parseDescriptor(
+            new IvySettings(), getClass().getResource("test-transitive.xml"), 
false);
+        PomModuleDescriptorWriter.write(md, _dest, getWriterOptions());
+        assertTrue(_dest.exists());
+
+        String wrote = FileUtil.readEntirely(new BufferedReader(new 
FileReader(_dest)))
+                .replaceAll("\r\n", "\n").replace('\r', '\n');
+        System.out.println(wrote);
+        String expected = 
readEntirely("test-transitive.pom").replaceAll("\r\n", "\n").replace(
+            '\r', '\n');
+        assertEquals(expected, wrote);
+    }
+
     public void testPackaging() throws Exception {
         ModuleDescriptor md = 
PomModuleDescriptorParser.getInstance().parseDescriptor(
             new IvySettings(), getClass().getResource("test-packaging.pom"), 
false);

Added: 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom?rev=1592628&view=auto
==============================================================================
--- 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom
 (added)
+++ 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom
 Mon May  5 20:56:51 2014
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one
+   or more contributor license agreements.  See the NOTICE file
+   distributed with this work for additional information
+   regarding copyright ownership.  The ASF licenses this file
+   to you 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 xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>apache</groupId>
+  <artifactId>test-transitive</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>apache</groupId>
+      <artifactId>ivy</artifactId>
+      <version>1.0</version>
+      <optional>true</optional>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+</project>

Added: 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml?rev=1592628&view=auto
==============================================================================
--- 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml
 (added)
+++ 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml
 Mon May  5 20:56:51 2014
@@ -0,0 +1,24 @@
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one
+   or more contributor license agreements.  See the NOTICE file
+   distributed with this work for additional information
+   regarding copyright ownership.  The ASF licenses this file
+   to you 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.    
+-->
+<ivy-module version="1.0">
+    <info organisation="apache" module="test-transitive" revision="1.0"/>
+    <dependencies>
+        <dependency org="apache" name="ivy" rev="1.0" transitive="false" />
+    </dependencies>
+</ivy-module>


Reply via email to