Index: src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java (revision 1471573) +++ src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java (revision ) @@ -27,17 +27,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Stack; -import java.util.StringTokenizer; +import java.util.*; import javax.xml.parsers.ParserConfigurationException; @@ -296,6 +286,20 @@ //by an absolute path. includeStarted(attributes); } else if ("ivy-module/info/extends".equals(path)) { + if (options.isMerge()) { + ModuleDescriptor mergedDescriptor = options.getMergedDescriptor(); + ExtendsDescriptor[] inheritedDescriptors = mergedDescriptor.getInheritedDescriptors(); + for (int i = 0; i < inheritedDescriptors.length; i++) { + ExtendsDescriptor inheritedDescriptor = inheritedDescriptors[i]; + ModuleDescriptor rprid = inheritedDescriptor.getParentMd(); + if (rprid instanceof DefaultModuleDescriptor) { + DefaultModuleDescriptor defaultModuleDescriptor = (DefaultModuleDescriptor) rprid; + if (defaultModuleDescriptor.getDefaultConfMapping() != null) { + defaultConfMapping = defaultModuleDescriptor.getDefaultConfMapping(); + } + } + } + } startExtends(attributes); } else if ("ivy-module/dependencies/dependency".equals(path)) { startElementInDependency(attributes); @@ -1048,6 +1052,12 @@ private void writeInheritedConfigurations(ModuleDescriptor merged) { if (!mergedConfigurations) { mergedConfigurations = true; +// Map attributes = new HashMap(); +// if (merged instanceof DefaultModuleDescriptor) { +// DefaultModuleDescriptor defaultModuleDescriptor = (DefaultModuleDescriptor) merged; +// String defaultConfMapping1 = defaultModuleDescriptor.getDefaultConfMapping(); +// attributes.put("defaultconfmapping", defaultConfMapping) +// } writeInheritedItems(merged, merged.getConfigurations(), ConfigurationPrinter.INSTANCE, "configurations", false); } Index: test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java (revision 1471573) +++ test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java (revision ) @@ -356,6 +356,32 @@ + XmlModuleDescriptorUpdater.LINE_SEPARATOR) != -1); } + //IVY-1420 + public void testMergedUpdateWithExtendsAndDefaultConfMappings() throws Exception { + URL url = XmlModuleUpdaterTest.class.getResource("test-extends-configurations-defaultconfmapping.xml"); + + XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance(); + ModuleDescriptor md = parser.parseDescriptor(new IvySettings(), url, true); + + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + XmlModuleDescriptorUpdater.update(url, buffer, + getUpdateOptions("release", "mynewrev") + .setMerge(true) + .setMergedDescriptor(md)); + + ModuleDescriptor updatedMd = parser.parseDescriptor(new IvySettings(), + new ByteArrayInputStream(buffer.toByteArray()), new BasicResource("test", false, 0, 0, + false), true); + + Configuration[] configurations = updatedMd.getConfigurations(); + assertNotNull("Configurations shouldn't be null", configurations); + assertEquals("Number of configurations is incorrect", 3, configurations.length); + + String updatedXml = buffer.toString(); + System.out.println(updatedXml); + assertTrue(updatedXml.indexOf("defaultconfmapping=\"conf1,default->@()\"") != -1); + } + private UpdateOptions getUpdateOptions(String status, String revision) { return getUpdateOptions(new IvySettings(), new HashMap(), status, revision, new Date()); } Index: test/java/org/apache/ivy/plugins/parser/xml/test-extends-configurations-defaultconfmapping.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/java/org/apache/ivy/plugins/parser/xml/test-extends-configurations-defaultconfmapping.xml (revision ) +++ test/java/org/apache/ivy/plugins/parser/xml/test-extends-configurations-defaultconfmapping.xml (revision ) @@ -0,0 +1,33 @@ + + + + + + + + + + + + Index: test/java/org/apache/ivy/plugins/parser/xml/test-extends-parent-defaultconfmapping.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/java/org/apache/ivy/plugins/parser/xml/test-extends-parent-defaultconfmapping.xml (revision ) +++ test/java/org/apache/ivy/plugins/parser/xml/test-extends-parent-defaultconfmapping.xml (revision ) @@ -0,0 +1,34 @@ + + + + Parent module description. + + + + + + + + +