You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/07/08 17:04:43 UTC

svn commit: r674852 - in /ant/ivy/core/trunk: ./ doc/ivyfile/ src/java/org/apache/ivy/plugins/parser/xml/ test/java/org/apache/ivy/plugins/parser/xml/

Author: xavier
Date: Tue Jul  8 08:04:42 2008
New Revision: 674852

URL: http://svn.apache.org/viewvc?rev=674852&view=rev
Log:
IMPROVEMENT: Add defaultconf in publications tag of ivy file (IVY-801)

Added:
    ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml   (with props)
Modified:
    ant/ivy/core/trunk/CHANGES.txt
    ant/ivy/core/trunk/doc/ivyfile/artifact.html
    ant/ivy/core/trunk/doc/ivyfile/publications.html
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd
    ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=674852&r1=674851&r2=674852&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Tue Jul  8 08:04:42 2008
@@ -77,6 +77,7 @@
 - NEW: Add transitive dependency version and branch override mechanism (IVY-784)
 - NEW: Add new packager resolver (IVY-829) (thanks to Archie Cobbs)
 
+- IMPROVEMENT: Add defaultconf in publications tag of ivy file (IVY-801)
 - IMPROVEMENT: Support atomic publish with sub directory structure (IVY-856)
 - IMPROVEMENT: Provide ant task to retrieve information from published ivy modules (IVY-838) (thanks to David Maplesden)
 - IMPROVEMENT: Install task fails but reason is not displayed without using -debug or -verbose (IVY-834)

Modified: ant/ivy/core/trunk/doc/ivyfile/artifact.html
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/doc/ivyfile/artifact.html?rev=674852&r1=674851&r2=674852&view=diff
==============================================================================
--- ant/ivy/core/trunk/doc/ivyfile/artifact.html (original)
+++ ant/ivy/core/trunk/doc/ivyfile/artifact.html Tue Jul  8 08:04:42 2008
@@ -58,7 +58,7 @@
         <td>No, defaults to type</td></tr>
     <tr><td>conf</td><td>comma separated list of public configurations in which this artifact is published.
     	'*' wildcard can be used to designate all public configurations of this module</td>
-        <td>No, defaults to '*' if neither conf attribute nor conf children element is given</td></tr>
+        <td>No, defaults to defaultconf attribute value on parent publications element.</td></tr>
     <tr><td>url</td><td>a url at which this artifact can be found if it isn't located at the standard location in the repository <span class="since">since 1.4</span></td>
         <td>No, defaults to no url</td></tr>
 </tbody>

Modified: ant/ivy/core/trunk/doc/ivyfile/publications.html
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/doc/ivyfile/publications.html?rev=674852&r1=674851&r2=674852&view=diff
==============================================================================
--- ant/ivy/core/trunk/doc/ivyfile/publications.html (original)
+++ ant/ivy/core/trunk/doc/ivyfile/publications.html Tue Jul  8 08:04:42 2008
@@ -28,18 +28,28 @@
 <b>Tag:</b> publications <b>Parent:</b> <a href="../ivyfile.html">ivy-module</a><br/><br/>
 
 Container for artifact elements, used to describe the artifacts published by this module. 
-If this container is not present, it is assumed that the module has one artifact, with the same name
-as the module, and published in all module configurations.<br/>
-Thus if you have a module which publishes no artifacts (a sort of virtual module, 
-made only to integrate several other modules as a whole), you have to include
-a publications element with no artifact sub element.
+
+If this container is not present, it is assumed that the module has one artifact, with the same name as the module, and published in all module configurations.<br/>
+
+Thus if you have a module which publishes no artifacts (a sort of virtual module, made only to integrate several other modules as a whole), you have to include a publications element with no artifact sub element.
+<h1>Attributes</h1>
+<table class="ivy-attributes">
+<thead>
+    <tr><th class="ivy-att">Attribute</th><th class="ivy-att-desc">Description</th><th class="ivy-att-req">Required</th></tr>
+</thead>
+<tbody>
+    <tr><td>defaultconf</td><td>comma separated list of public configurations in which artifacts are published by default (when no specific configurations are set on the artifact element).
+    	'*' wildcard can be used to designate all public configurations of this module. <span class="since">since 2.0</span></td>
+        <td>No, defaults to '*'</td></tr>
+</tbody>
+</table>
 <h1>Child elements</h1>
 <table class="ivy-children">
 <thead>
     <tr><th class="ivy-chld">Element</th><th class="ivy-chld-desc">Description</th><th class="ivy-chld-card">Cardinality</th></tr>
 </thead>
 <tbody>
-    <tr><td>artifact</td><td>declares a published artifact for this module</td>
+    <tr><td>[[ivyfile/artifact]]</td><td>declares a published artifact for this module</td>
         <td>0..n</td></tr>
 </tbody>
 </table>

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java?rev=674852&r1=674851&r2=674852&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java Tue Jul  8 08:04:42 2008
@@ -193,6 +193,8 @@
         private StringBuffer buffer;
 
         private String descriptorVersion;
+
+        private String[] publicationsDefaultConf;
         
         
 
@@ -294,9 +296,7 @@
                 } else if ("configurations".equals(qName)) {
                     configurationStarted(attributes);
                 } else if ("publications".equals(qName)) {
-                    state = PUB;
-                    artifactsDeclared = true;
-                    checkConfigurations();
+                    publicationsStarted(attributes);
                 } else if ("dependencies".equals(qName)) {
                     dependenciesStarted(attributes);
                 } else if ("conflicts".equals(qName)) {
@@ -344,6 +344,20 @@
             }
         }
 
+        private void publicationsStarted(Attributes attributes) {
+            state = PUB;
+            artifactsDeclared = true;
+            checkConfigurations();
+            String defaultConf = ivy.substitute(attributes.getValue("defaultconf"));
+            if (defaultConf != null) {
+                setPublicationsDefaultConf(defaultConf);
+            }
+        }
+
+        private void setPublicationsDefaultConf(String defaultConf) {
+            this.publicationsDefaultConf = defaultConf == null ? null : defaultConf.split(",");
+        }
+
         private boolean isOtherNamespace(String qName) {
             return qName.indexOf(':') != -1;
         }
@@ -778,10 +792,12 @@
         public void endElement(String uri, String localName, String qName) throws SAXException {
             if (state == PUB && "artifact".equals(qName)
                     && artifact.getConfigurations().length == 0) {
-                String[] confs = getMd().getConfigurationsNames();
+                String[] confs = publicationsDefaultConf == null 
+                    ? getMd().getConfigurationsNames()
+                    : publicationsDefaultConf;
                 for (int i = 0; i < confs.length; i++) {
-                    artifact.addConfiguration(confs[i]);
-                    getMd().addArtifact(confs[i], artifact);
+                    artifact.addConfiguration(confs[i].trim());
+                    getMd().addArtifact(confs[i].trim(), artifact);
                 }
             } else if ("configurations".equals(qName)) {
                 checkConfigurations();

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd?rev=674852&r1=674851&r2=674852&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd Tue Jul  8 08:04:42 2008
@@ -141,6 +141,7 @@
 				            	</xs:complexType>
 				      		</xs:element>
 				        </xs:sequence>
+						<xs:attribute name="defaultconf" type="xs:string"/>				  
 			      </xs:complexType>
       		</xs:element>
       		<xs:element name="dependencies" minOccurs="0">

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java?rev=674852&r1=674851&r2=674852&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java Tue Jul  8 08:04:42 2008
@@ -623,6 +623,24 @@
                 .getDependencyConfigurations("test")));
     }
 
+    public void testPublicationDefaultConf() throws Exception {
+        ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(settings,
+            getClass().getResource("test-publication-defaultconf.xml"), true);
+        assertNotNull(md);
+
+        Artifact[] artifacts = md.getArtifacts("default");
+        assertNotNull(artifacts);
+        assertEquals(3, artifacts.length);
+
+        artifacts = md.getArtifacts("test");
+        assertNotNull(artifacts);
+        assertEquals(2, artifacts.length);
+        
+        artifacts = md.getArtifacts("other");
+        assertNotNull(artifacts);
+        assertEquals(1, artifacts.length);
+    }
+
     public void testDefaultConfMapping() throws Exception {
         ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(settings,
             getClass().getResource("test-defaultconfmapping.xml"), true);

Added: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml?rev=674852&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml (added)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml Tue Jul  8 08:04:42 2008
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml-stylesheet type="text/xsl" href="http://www.jayasoft.fr/org/ivyrep/ivy-doc.xsl"?>
+<!--
+   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="myorg"
+	       module="mymodule"
+	       revision="myrev"
+	       status="integration"
+	       publication="20041101110000"/>
+	<configurations>
+		<conf name="default"/>
+		<conf name="test"/>
+		<conf name="other"/>
+	</configurations>
+	<publications defaultconf="default,test">
+		<artifact name="art1" type="jar" />
+		<artifact name="art2" type="jar" />
+		<artifact name="art3" type="jar" conf="default,other" />
+	</publications>
+</ivy-module>

Propchange: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-publication-defaultconf.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain