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

svn commit: r646561 - in /ant/ivy/core/trunk: CHANGES.txt doc/use/report.html src/java/org/apache/ivy/ant/IvyReport.java test/java/org/apache/ivy/ant/IvyReportTest.java

Author: maartenc
Date: Wed Apr  9 15:08:49 2008
New Revision: 646561

URL: http://svn.apache.org/viewvc?rev=646561&view=rev
Log:
FIX: revision token is not set in report outputpattern (IVY-272)

Modified:
    ant/ivy/core/trunk/CHANGES.txt
    ant/ivy/core/trunk/doc/use/report.html
    ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyReport.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyReportTest.java

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=646561&r1=646560&r2=646561&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Wed Apr  9 15:08:49 2008
@@ -78,6 +78,7 @@
 - IMPROVEMENT: Change allownomd and skipbuildwithoutivy into a more semantically correct name (IVY-297)
 - IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher
 
+- FIX: revision token is not set in report outputpattern (IVY-272)
 - FIX: Ivy uses the first set of configurations it sees when resolving multiple versions of a module (IVY-681)
 - FIX: Eviction fails for libs not providing their ivy configuration and providing artifacts named different between lib versions (IVY-537)
 - FIX: Memory leak in ModuleRevisionId.java (IVY-791)

Modified: ant/ivy/core/trunk/doc/use/report.html
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/doc/use/report.html?rev=646561&r1=646560&r2=646561&view=diff
==============================================================================
--- ant/ivy/core/trunk/doc/use/report.html (original)
+++ ant/ivy/core/trunk/doc/use/report.html Wed Apr  9 15:08:49 2008
@@ -56,14 +56,16 @@
     <tr><td>conf</td><td>a comma separated list of the configurations for which a report should be generated</td>
         <td>No. Defaults to the configurations resolved by the last resolve call (during same ant build), or ${ivy.resolved.configurations} if no resolve was called</td></tr>
     <tr><td>organisation</td><td>the name of the organisation of the module for which report should be generated</td>
-        <td>No, unless no resolve was called during the build. Defaults to last resolved module organisation.</td></tr>
+        <td>No, unless resolveId has not been specified and no resolve was called during the build. Defaults to last resolved module organisation.</td></tr>
     <tr><td>module</td><td>the name of the module for which report should be generated</td>
-        <td>No, unless no resolve was called during the build. Defaults to last resolved module.</td></tr>
+        <td>No, unless resolveId has not been specified and no resolve was called during the build. Defaults to last resolved module.</td></tr>
     <tr><td>validate</td><td>true to force ivy files validation against ivy.xsd, false to force no validation</td>
         <td>No. Defaults to default ivy value (as configured in configuration file)</td></tr>
     <tr><td>xslfile</td><td>indicates which xsl file should be used to generate the report</td>
         <td>No, defaults to ivy provided xsl which generates html report</td></tr>
-    <tr><td>settingsRef</td><td>A reference to the ivy settings that must be used by this task <span class="since">(since 2.0)</span></td><td>No, 'ivy.instance' is taken by default.</td></tr></tbody>
+    <tr><td>settingsRef</td><td>A reference to the ivy settings that must be used by this task <span class="since">(since 2.0)</span></td><td>No, 'ivy.instance' is taken by default.</td></tr>
+    <tr><td>resolveId</td><td>The id which was used for a previous resolve <span class="since">(since 2.0)</span></td><td>No, defaults to '[org]-[module]'.</td></tr>
+</tbody>
 </table>
 
 <h1>Examples</h1>

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyReport.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyReport.java?rev=646561&r1=646560&r2=646561&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyReport.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyReport.java Wed Apr  9 15:08:49 2008
@@ -25,6 +25,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -41,9 +42,11 @@
 import org.apache.ivy.core.IvyPatternHelper;
 import org.apache.ivy.core.cache.ResolutionCacheManager;
 import org.apache.ivy.core.module.id.ModuleId;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.resolve.ResolveOptions;
 import org.apache.ivy.core.settings.IvySettings;
 import org.apache.ivy.plugins.report.XmlReportOutputter;
+import org.apache.ivy.plugins.report.XmlReportParser;
 import org.apache.ivy.util.FileUtil;
 import org.apache.ivy.util.Message;
 import org.apache.tools.ant.BuildException;
@@ -79,6 +82,8 @@
     private List params = new ArrayList();
 
     private String resolveId;
+    
+    private ModuleRevisionId mRevId;
 
     public File getTodir() {
         return todir;
@@ -115,7 +120,7 @@
     public void setOrganisation(String organisation) {
         this.organisation = organisation;
     }
-
+    
     public boolean isGraph() {
         return graph;
     }
@@ -152,8 +157,6 @@
         Ivy ivy = getIvyInstance();
         IvySettings settings = ivy.getSettings();
 
-        organisation = getProperty(organisation, settings, "ivy.organisation", resolveId);
-        module = getProperty(module, settings, "ivy.module", resolveId);
         conf = getProperty(conf, settings, "ivy.resolved.configurations", resolveId);
         if ("*".equals(conf)) {
             conf = getProperty(settings, "ivy.resolved.configurations", resolveId);
@@ -170,10 +173,10 @@
                 todir = new File(t);
             }
         }
-        outputpattern = getProperty(outputpattern, settings, "ivy.report.output.pattern");
         if (todir != null && todir.exists()) {
             todir.mkdirs();
         }
+        outputpattern = getProperty(outputpattern, settings, "ivy.report.output.pattern");
         if (outputpattern == null) {
             outputpattern = "[organisation]-[module]-[conf].[ext]";
         }
@@ -181,36 +184,41 @@
         if (todir != null && todir.exists() && !todir.isDirectory()) {
             throw new BuildException("destination directory should be a directory !");
         }
-        if (organisation == null) {
-            throw new BuildException(
-                    "no organisation provided for ivy report task: "
-                    + "It can either be set explicitely via the attribute 'organisation' or "
-                    + "via 'ivy.organisation' property or a prior call to <resolve/>");
-        }
-        if (module == null) {
-            throw new BuildException(
-                    "no module name provided for ivy report task: "
-                    + "It can either be set explicitely via the attribute 'module' or "
-                    + "via 'ivy.module' property or a prior call to <resolve/>");
-        }
+        
         if (resolveId == null) {
+            organisation = getProperty(organisation, settings, "ivy.organisation", resolveId);
+            module = getProperty(module, settings, "ivy.module", resolveId);
+
+            if (organisation == null) {
+                throw new BuildException(
+                        "no organisation provided for ivy report task: "
+                        + "It can either be set explicitely via the attribute 'organisation' or "
+                        + "via 'ivy.organisation' property or a prior call to <resolve/>");
+            }
+            if (module == null) {
+                throw new BuildException(
+                        "no module name provided for ivy report task: "
+                        + "It can either be set explicitely via the attribute 'module' or "
+                        + "via 'ivy.module' property or a prior call to <resolve/>");
+            }
+            
             resolveId = ResolveOptions.getDefaultResolveId(new ModuleId(organisation, module));
         }
 
         try {
             String[] confs = splitConfs(conf);
             if (xsl) {
-                genreport(organisation, module, confs);
+                genreport(confs);
             }
             if (xml) {
-                genxml(organisation, module, confs);
+                genxml(confs);
             }
             if (graph) {
-                genStyled(organisation, module, confs, 
+                genStyled(confs, 
                     getStylePath("ivy-report-graph.xsl"), "graphml");
             }
             if (dot) {
-                genStyled(organisation, module, confs, 
+                genStyled(confs, 
                     getStylePath("ivy-report-dot.xsl"), "dot");
             }
         } catch (IOException e) {
@@ -218,7 +226,7 @@
         }
     }
 
-    private void genxml(String organisation, String module, String[] confs)
+    private void genxml(String[] confs)
             throws IOException {
         ResolutionCacheManager cacheMgr = getIvyInstance().getResolutionCacheManager();
         for (int i = 0; i < confs.length; i++) {
@@ -226,20 +234,18 @@
 
             File out;
             if (todir != null) {
-                out = new File(todir, IvyPatternHelper.substitute(outputpattern, organisation,
-                    module, "", "", "", "xml", confs[i]));
+                out = new File(todir, getOutputPattern(confs[i], "xml"));
             } else {
-                out = new File(IvyPatternHelper.substitute(outputpattern, organisation, module,
-                    "", "", "", "xml", confs[i]));
+                out = new File(getOutputPattern(confs[i], "xml"));
             }
 
             FileUtil.copy(xml, out, null);
         }
     }
 
-    private void genreport(String organisation, String module, String[] confs)
+    private void genreport(String[] confs)
             throws IOException {
-        genStyled(organisation, module, confs, getReportStylePath(), xslext);
+        genStyled(confs, getReportStylePath(), xslext);
 
         // copy the css if required
         if (todir != null && xslFile == null) {
@@ -263,9 +269,29 @@
         FileUtil.copy(XmlReportOutputter.class.getResourceAsStream("ivy-report.xsl"), style, null);
         return style;
     }
+    
+    private String getOutputPattern(String conf, String ext) {
+        if (mRevId == null) {
+            ResolutionCacheManager cacheMgr = getIvyInstance().getResolutionCacheManager();
+            
+            XmlReportParser parser = new XmlReportParser();
+            File reportFile = cacheMgr.getConfigurationResolveReportInCache (resolveId, conf);
+            
+            try {
+                parser.parse(reportFile);
+            } catch (ParseException e) {
+                throw new BuildException("Error occurred while parsing reportfile '" + reportFile.getAbsolutePath() + "'", e);
+            }
+            
+            // get the resolve module
+            mRevId = parser.getResolvedModule();
+        }
+        
+        return IvyPatternHelper.substitute(outputpattern, mRevId.getOrganisation(), mRevId.getName(),
+            mRevId.getRevision(), "", "", ext, conf, mRevId.getAttributes());
+    }
 
-    private void genStyled(String organisation, String module, String[] confs,
-            File style, String ext) throws IOException {
+    private void genStyled(String[] confs, File style, String ext) throws IOException {
         ResolutionCacheManager cacheMgr = getIvyInstance().getResolutionCacheManager();
 
         // process the report with xslt to generate dot file
@@ -299,10 +325,9 @@
             // create the report
             for (int i = 0; i < confs.length; i++) {
                 File reportFile = 
-                    cacheMgr.getConfigurationResolveReportInCache(resolveId, confs[i]);
+                    cacheMgr.getConfigurationResolveReportInCache (resolveId, confs[i]);
                 File outFile = 
-                    new File(out, IvyPatternHelper.substitute(outputpattern, organisation, module,
-                    "", "", "", ext, confs[i]));
+                    new File(out, getOutputPattern(confs[i], ext));
                 
                 log("Processing " + reportFile + " to " + outFile);
                 

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyReportTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyReportTest.java?rev=646561&r1=646560&r2=646561&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyReportTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyReportTest.java Wed Apr  9 15:08:49 2008
@@ -81,6 +81,30 @@
         }
     }
 
+    public void testNoRevisionInOutputPattern() throws Exception {
+        Locale oldLocale = Locale.getDefault();
+        
+        try {
+            // set the locale to UK as workaround for SUN bug 6240963
+            Locale.setDefault(Locale.UK);
+
+            IvyResolve res = new IvyResolve();
+            res.setProject(project);
+            res.setFile(new File("test/java/org/apache/ivy/ant/ivy-simple.xml"));
+            res.execute();
+    
+            report.setTodir(new File(cache, "report"));
+            report.setOutputpattern("[organisation]-[module]-[revision].[ext]");
+            report.setConf("default");
+            report.execute();
+            
+            assertTrue(new File(cache, "report/apache-resolve-simple-1.0.html").exists());
+            assertTrue(new File(cache, "report/apache-resolve-simple-1.0.graphml").exists());
+        } finally {
+            Locale.setDefault(oldLocale);
+        }
+    }
+
     public void testMultipleConfigurations() throws Exception {
         Locale oldLocale = Locale.getDefault();