You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-commits@incubator.apache.org by gs...@apache.org on 2007/06/29 12:16:13 UTC

svn commit: r551867 - in /incubator/ivy/core/trunk: src/java/org/apache/ivy/core/ src/java/org/apache/ivy/plugins/parser/xml/ test/java/org/apache/ivy/plugins/parser/xml/

Author: gscokart
Date: Fri Jun 29 05:16:12 2007
New Revision: 551867

URL: http://svn.apache.org/viewvc?view=rev&rev=551867
Log:
refactoring to prepare support of relative url in XmlModuleDescriptorUpdater

Modified:
    incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
    incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
    incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml
    incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java?view=diff&rev=551867&r1=551866&r2=551867
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java Fri Jun 29 05:16:12 2007
@@ -26,8 +26,23 @@
  */
 public abstract class RelativeUrlResolver {
 
+    /**
+     * Resolve the url in the context of context.  
+     * @param context The URL of the ressource containing the reference url
+     * @param url a relative or absolution url string
+     * @throws MalformedURLException
+     */
     public abstract URL getURL(URL context , String url) throws MalformedURLException;
     
+    /**
+     * Relsovle file or url path relatively to a context.  file is considered first.
+     * If file is not defined, url will be considered.  
+     * @param context The URL of the ressource containing the reference file or url
+     * @param file a relative or absolute path
+     * @param url a relative or absolution url string
+     * @return the resulting url or null if faile and url are null.
+     * @throws MalformedURLException
+     */
     public URL getURL(URL context, String file, String url) throws MalformedURLException {
         if (file != null) {
             File f = new File(file);

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java?view=diff&rev=551867&r1=551866&r2=551867
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java Fri Jun 29 05:16:12 2007
@@ -59,6 +59,7 @@
  * possible the original syntax
  */
 public class XmlModuleDescriptorUpdater {
+    private static final int MAX_HEADER_LENGTH = 10000;
     public static String LINE_SEPARATOR = System.getProperty("line.separator");
 
     /**
@@ -87,10 +88,46 @@
             final Map resolvedRevisions, final String status, final String revision,
             final Date pubdate, final Namespace ns, final boolean replaceInclude,
             String[] confsToExclude) throws IOException, SAXException {
-        update(settings, srcURL.openStream(), destFile, resolvedRevisions, status, revision,
-            pubdate, ns, replaceInclude, confsToExclude);
+        if (destFile.getParentFile() != null) {
+            destFile.getParentFile().mkdirs();
+        }
+        OutputStream destStream = new FileOutputStream(destFile);
+        try {
+            update(settings, srcURL, destStream, resolvedRevisions, status, revision,
+                pubdate, ns, replaceInclude, confsToExclude);
+        } finally {
+            try {
+                destStream.close();
+            } catch (IOException e) {
+                Message.warn("failed to close a stream : " + e.toString());
+            }
+        }
     }
 
+    public static void update(final IvySettings settings, URL srcURL, OutputStream destFile,
+            final Map resolvedRevisions, final String status, final String revision,
+            final Date pubdate, final Namespace ns, final boolean replaceInclude,
+            String[] confsToExclude) throws IOException, SAXException {
+        InputStream in = srcURL.openStream();
+        try {
+            update(settings, srcURL, in, destFile, resolvedRevisions, status, revision,
+                pubdate, ns, replaceInclude, confsToExclude);
+        } finally {
+            try {
+                in.close();
+            } catch (IOException e) {
+                Message.warn("failed to close a stream : " + e.toString());
+            }
+            try {
+                destFile.close();
+            } catch (IOException e) {
+                Message.warn("failed to close a stream : " + e.toString());
+            }
+        }
+
+    }
+
+    
     public static void update(final IvySettings settings, InputStream in, File destFile,
             final Map resolvedRevisions, final String status, final String revision,
             final Date pubdate, final Namespace ns, final boolean replaceInclude,
@@ -100,16 +137,19 @@
         }
         OutputStream fos = new FileOutputStream(destFile);
         try {
-            update(settings, in, fos, resolvedRevisions, status, revision, pubdate, ns,
+            //TODO : the inputStream context should be given.
+            update(settings, null, in, fos, resolvedRevisions, status, revision, pubdate, ns,
                 replaceInclude, confsToExclude);
         } finally {
             try {
                 in.close();
             } catch (IOException e) {
+                Message.warn("failed to close a stream : " + e.toString());
             }
             try {
                 fos.close();
             } catch (IOException e) {
+                Message.warn("failed to close a stream : " + e.toString());
             }
         }
     }
@@ -136,10 +176,12 @@
 
         private final List confs;
 
+        private final URL relativePathCtx;
+
         public UpdaterHandler(final IvySettings settings, final PrintWriter out,
                 final Map resolvedRevisions, final String status, final String revision,
                 final Date pubdate, final Namespace ns, final boolean replaceInclude,
-                final String[] confs) {
+                final String[] confs, final URL relativePathCtx) {
             this.settings = settings;
             this.out = out;
             this.resolvedRevisions = resolvedRevisions;
@@ -148,6 +190,7 @@
             this.pubdate = pubdate;
             this.ns = ns;
             this.replaceInclude = replaceInclude;
+            this.relativePathCtx = relativePathCtx;
             if (confs != null) {
                 this.confs = Arrays.asList(confs);
             } else {
@@ -228,16 +271,26 @@
                 }
             } else if (replaceInclude && "include".equals(qName)
                     && _context.contains("configurations")) {
+                //TODO, in the case of !replaceInclude, we should still replace the relative path
+                //by an absolute path. 
                 final ExtendedBuffer buffer = new ExtendedBuffer(getContext());
                 _buffers.push(buffer);
                 try {
                     URL url;
-                    String fileName = substitute(settings, attributes.getValue("file"));
-                    if (fileName == null) {
-                        String urlStr = substitute(settings, attributes.getValue("url"));
-                        url = new URL(urlStr);
+                    if (settings != null) {
+                        url = settings.getRelativeUrlResolver().getURL(relativePathCtx,
+                            settings.substitute(attributes.getValue("file")),
+                            settings.substitute(attributes.getValue("url")));
                     } else {
-                        url = new File(fileName).toURL();
+                        //TODO : settings can be null, but I don't why.  
+                        //Check if the next code is correct in that case
+                        String fileName = attributes.getValue("file");
+                        if (fileName == null) {
+                            String urlStr = attributes.getValue("url");
+                            url = new URL(urlStr);
+                        } else {
+                            url = new File(fileName).toURL();
+                        }
                     }
                     XMLHelper.parse(url, null, new DefaultHandler() {
                         boolean _insideConfigurations = false;
@@ -606,28 +659,21 @@
 
     }
 
-    public static void update(final IvySettings settings, InputStream inStream,
-            OutputStream outStream, final Map resolvedRevisions, final String status,
-            final String revision, final Date pubdate, final Namespace ns,
-            final boolean replaceInclude) throws IOException, SAXException {
-        update(settings, inStream, outStream, resolvedRevisions, status, revision, pubdate, ns,
-            replaceInclude, null);
-    }
-
-    public static void update(final IvySettings settings, InputStream inStream,
+    public static void update(final IvySettings settings, URL inStreamCtx, InputStream inStream,
             OutputStream outStream, final Map resolvedRevisions, final String status,
             final String revision, final Date pubdate, final Namespace ns,
-            final boolean replaceInclude, String[] confsToExclude) throws IOException, SAXException {
+            final boolean replaceInclude, String[] confsToExclude) 
+            throws IOException, SAXException {
         final PrintWriter out = new PrintWriter(new OutputStreamWriter(outStream, "UTF-8"));
         final BufferedInputStream in = new BufferedInputStream(inStream);
 
-        in.mark(10000); // assume the header is never larger than 10000 bytes.
+        in.mark(MAX_HEADER_LENGTH); // assume the header is never larger than 10000 bytes.
         copyHeader(in, out);
         in.reset(); // reposition the stream at the beginning
 
         try {
             UpdaterHandler updaterHandler = new UpdaterHandler(settings, out, resolvedRevisions,
-                    status, revision, pubdate, ns, replaceInclude, confsToExclude);
+                    status, revision, pubdate, ns, replaceInclude, confsToExclude, inStreamCtx);
             XMLHelper.parse(in, null, updaterHandler, updaterHandler);
         } catch (ParserConfigurationException e) {
             IllegalStateException ise = new IllegalStateException(

Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java?view=diff&rev=551867&r1=551866&r2=551867
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java (original)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java Fri Jun 29 05:16:12 2007
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.FileReader;
 import java.io.InputStreamReader;
+import java.net.URL;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.GregorianCalendar;
@@ -82,9 +83,11 @@
         //file to test-configurations-import6.xml in order to use a path relative to
         //the execution directory.
         //But that may hidde a bug!
-        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
-                .getResourceAsStream("test-configurations-import6.xml"), buffer, new HashMap(),
-            "release", "mynewrev", new Date(), null, true);
+        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/" 
+            + "test-configurations-import4.xml").toURL();
+        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
+            "release", "mynewrev", new Date(), null,
+        true, null);
 
         String updatedXml = buffer.toString();
 
@@ -95,9 +98,11 @@
 
     public void testUpdateWithExcludeConfigurations1() throws Exception {
         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
-                .getResourceAsStream("test-update-excludedconfs1.xml"), buffer, new HashMap(),
-            "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
+        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/" 
+                + "test-update-excludedconfs1.xml").toURL();
+        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, 
+            buffer, new HashMap(), "release", "mynewrev", new Date(), null, true, 
+            new String[] {"myconf2"});
 
         XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
         ModuleDescriptor updatedMd = parser.parseDescriptor(new IvySettings(),
@@ -120,10 +125,12 @@
 
     public void testUpdateWithExcludeConfigurations2() throws Exception {
         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+        URL settingFile = new File("test/java/org/apache/ivy/plugins/parser/xml/" 
+            + "test-update-excludedconfs2.xml").toURL();
         try {
-            XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
-                    .getResourceAsStream("test-update-excludedconfs2.xml"), buffer, new HashMap(),
-                "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
+            XmlModuleDescriptorUpdater.update(new IvySettings(), settingFile, buffer,
+                new HashMap(), "release", "mynewrev", new Date(), null, true,
+                new String[] {"myconf2"});
             fail("IllegalArgumentException hasn't been thrown");
         } catch (IllegalArgumentException e) {
             // this is ok
@@ -134,8 +141,10 @@
 
     public void testUpdateWithExcludeConfigurations3() throws Exception {
         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
-                .getResourceAsStream("test-update-excludedconfs3.xml"), buffer, new HashMap(),
+        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/" 
+            + "test-update-excludedconfs3.xml").toURL();
+
+        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
             "release", "mynewrev", new Date(), null, true, new String[] {"myconf2", "conf2"});
 
         XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
@@ -161,8 +170,9 @@
 
     public void testUpdateWithExcludeConfigurations4() throws Exception {
         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
-                .getResourceAsStream("test-update-excludedconfs4.xml"), buffer, new HashMap(),
+        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/" 
+            + "test-update-excludedconfs4.xml").toURL();
+        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
             "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
 
         XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
@@ -186,8 +196,9 @@
 
     public void testUpdateWithExcludeConfigurations5() throws Exception {
         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
-                .getResourceAsStream("test-update-excludedconfs5.xml"), buffer, new HashMap(),
+        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/" 
+            + "test-update-excludedconfs5.xml").toURL();
+        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
             "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
 
         XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();

Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml?view=diff&rev=551867&r1=551866&r2=551867
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml (original)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml Fri Jun 29 05:16:12 2007
@@ -25,7 +25,7 @@
 	       status="integration"
 	       publication="20041101110000" />
 	<configurations>
-		<include file="test/java/org/apache/ivy/plugins/parser/xml/imported-configurations.xml"/>
+		<include file="imported-configurations.xml"/>
 		<conf name="myconf1" description="desc 1"/>
 		<conf name="myconf2" description="desc 2" visibility="public"/>
 		<conf name="myconf3" description="desc 3" visibility="private"/>

Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml?view=diff&rev=551867&r1=551866&r2=551867
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml (original)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml Fri Jun 29 05:16:12 2007
@@ -40,7 +40,7 @@
 		</description>
 	</info>
 	<configurations>
-		<include file="test/java/org/apache/ivy/plugins/parser/xml/imported-configurations-with-mapping.xml"/>
+		<include file="imported-configurations-with-mapping.xml"/>
 		<conf name="${myvar}" description="desc 1"/>
 		<conf name="myconf2" description="desc 2" visibility="public"/>
 		<conf name="myconf3" description="desc 3" visibility="private"/>



Re: svn commit: r551867 - in /incubator/ivy/core/trunk: src/java/org/apache/ivy/core/ src/java/org/apache/ivy/plugins/parser/xml/ test/java/org/apache/ivy/plugins/parser/xml/

Posted by Xavier Hanin <xa...@gmail.com>.
On 6/29/07, Gilles Scokart <gs...@gmail.com> wrote:
>
> I think I fixed the test.  But still, we might have a problem when the
> file coming from a repository are updated because the Ressource
> currently doesn't support relative url.


Funny, I did very similar changes to what you did while investigating on
this test failure (as I said yesterday), and reverted everything when I came
to the conclusion I give in my other e-mail). Keeping your changes like that
for the moment is fine I think, it shouldn't break too much things, and it
will be easier to see hoow to tackle the repository problem (resource based
relative path?) when you come back.

Xavier

I can't go further for the moment, sorry.  (I have some baguage to prepare
> ;-) )
>
> If you detect some other issues with my changes, don't hesitate to roll
> back.
>
> Gilles
>
> 2007/6/29, gscokart@apache.org <gs...@apache.org>:
> > Author: gscokart
> > Date: Fri Jun 29 05:16:12 2007
> > New Revision: 551867
> >
> > URL: http://svn.apache.org/viewvc?view=rev&rev=551867
> > Log:
> > refactoring to prepare support of relative url in
> XmlModuleDescriptorUpdater
> >
> > Modified:
> >
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
> >
> incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
> >
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
> >
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update-excludedconfs3.xml
> >
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update.xml
> >
> > Modified:
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
> > URL:
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java?view=diff&rev=551867&r1=551866&r2=551867
> >
> ==============================================================================
> > ---
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
> (original)
> > +++
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
> Fri Jun 29 05:16:12 2007
> > @@ -26,8 +26,23 @@
> >   */
> >  public abstract class RelativeUrlResolver {
> >
> > +    /**
> > +     * Resolve the url in the context of context.
> > +     * @param context The URL of the ressource containing the reference
> url
> > +     * @param url a relative or absolution url string
> > +     * @throws MalformedURLException
> > +     */
> >      public abstract URL getURL(URL context , String url) throws
> MalformedURLException;
> >
> > +    /**
> > +     * Relsovle file or url path relatively to a context.  file is
> considered first.
> > +     * If file is not defined, url will be considered.
> > +     * @param context The URL of the ressource containing the reference
> file or url
> > +     * @param file a relative or absolute path
> > +     * @param url a relative or absolution url string
> > +     * @return the resulting url or null if faile and url are null.
> > +     * @throws MalformedURLException
> > +     */
> >      public URL getURL(URL context, String file, String url) throws
> MalformedURLException {
> >          if (file != null) {
> >              File f = new File(file);
> >
> > Modified:
> incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
> > URL:
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java?view=diff&rev=551867&r1=551866&r2=551867
> >
> ==============================================================================
> > ---
> incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
> (original)
> > +++
> incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
> Fri Jun 29 05:16:12 2007
> > @@ -59,6 +59,7 @@
> >   * possible the original syntax
> >   */
> >  public class XmlModuleDescriptorUpdater {
> > +    private static final int MAX_HEADER_LENGTH = 10000;
> >      public static String LINE_SEPARATOR = System.getProperty("
> line.separator");
> >
> >      /**
> > @@ -87,10 +88,46 @@
> >              final Map resolvedRevisions, final String status, final
> String revision,
> >              final Date pubdate, final Namespace ns, final boolean
> replaceInclude,
> >              String[] confsToExclude) throws IOException, SAXException {
> > -        update(settings, srcURL.openStream(), destFile,
> resolvedRevisions, status, revision,
> > -            pubdate, ns, replaceInclude, confsToExclude);
> > +        if (destFile.getParentFile() != null) {
> > +            destFile.getParentFile().mkdirs();
> > +        }
> > +        OutputStream destStream = new FileOutputStream(destFile);
> > +        try {
> > +            update(settings, srcURL, destStream, resolvedRevisions,
> status, revision,
> > +                pubdate, ns, replaceInclude, confsToExclude);
> > +        } finally {
> > +            try {
> > +                destStream.close();
> > +            } catch (IOException e) {
> > +                Message.warn("failed to close a stream : " + e.toString
> ());
> > +            }
> > +        }
> >      }
> >
> > +    public static void update(final IvySettings settings, URL srcURL,
> OutputStream destFile,
> > +            final Map resolvedRevisions, final String status, final
> String revision,
> > +            final Date pubdate, final Namespace ns, final boolean
> replaceInclude,
> > +            String[] confsToExclude) throws IOException, SAXException {
> > +        InputStream in = srcURL.openStream();
> > +        try {
> > +            update(settings, srcURL, in, destFile, resolvedRevisions,
> status, revision,
> > +                pubdate, ns, replaceInclude, confsToExclude);
> > +        } finally {
> > +            try {
> > +                in.close();
> > +            } catch (IOException e) {
> > +                Message.warn("failed to close a stream : " + e.toString
> ());
> > +            }
> > +            try {
> > +                destFile.close();
> > +            } catch (IOException e) {
> > +                Message.warn("failed to close a stream : " + e.toString
> ());
> > +            }
> > +        }
> > +
> > +    }
> > +
> > +
> >      public static void update(final IvySettings settings, InputStream
> in, File destFile,
> >              final Map resolvedRevisions, final String status, final
> String revision,
> >              final Date pubdate, final Namespace ns, final boolean
> replaceInclude,
> > @@ -100,16 +137,19 @@
> >          }
> >          OutputStream fos = new FileOutputStream(destFile);
> >          try {
> > -            update(settings, in, fos, resolvedRevisions, status,
> revision, pubdate, ns,
> > +            //TODO : the inputStream context should be given.
> > +            update(settings, null, in, fos, resolvedRevisions, status,
> revision, pubdate, ns,
> >                  replaceInclude, confsToExclude);
> >          } finally {
> >              try {
> >                  in.close();
> >              } catch (IOException e) {
> > +                Message.warn("failed to close a stream : " + e.toString
> ());
> >              }
> >              try {
> >                  fos.close();
> >              } catch (IOException e) {
> > +                Message.warn("failed to close a stream : " + e.toString
> ());
> >              }
> >          }
> >      }
> > @@ -136,10 +176,12 @@
> >
> >          private final List confs;
> >
> > +        private final URL relativePathCtx;
> > +
> >          public UpdaterHandler(final IvySettings settings, final
> PrintWriter out,
> >                  final Map resolvedRevisions, final String status, final
> String revision,
> >                  final Date pubdate, final Namespace ns, final boolean
> replaceInclude,
> > -                final String[] confs) {
> > +                final String[] confs, final URL relativePathCtx) {
> >              this.settings = settings;
> >              this.out = out;
> >              this.resolvedRevisions = resolvedRevisions;
> > @@ -148,6 +190,7 @@
> >              this.pubdate = pubdate;
> >              this.ns = ns;
> >              this.replaceInclude = replaceInclude;
> > +            this.relativePathCtx = relativePathCtx;
> >              if (confs != null) {
> >                  this.confs = Arrays.asList(confs);
> >              } else {
> > @@ -228,16 +271,26 @@
> >                  }
> >              } else if (replaceInclude && "include".equals(qName)
> >                      && _context.contains("configurations")) {
> > +                //TODO, in the case of !replaceInclude, we should still
> replace the relative path
> > +                //by an absolute path.
> >                  final ExtendedBuffer buffer = new
> ExtendedBuffer(getContext());
> >                  _buffers.push(buffer);
> >                  try {
> >                      URL url;
> > -                    String fileName = substitute(settings,
> attributes.getValue("file"));
> > -                    if (fileName == null) {
> > -                        String urlStr = substitute(settings,
> attributes.getValue("url"));
> > -                        url = new URL(urlStr);
> > +                    if (settings != null) {
> > +                        url = settings.getRelativeUrlResolver
> ().getURL(relativePathCtx,
> > +                            settings.substitute(attributes.getValue
> ("file")),
> > +                            settings.substitute(attributes.getValue
> ("url")));
> >                      } else {
> > -                        url = new File(fileName).toURL();
> > +                        //TODO : settings can be null, but I don't why.
> > +                        //Check if the next code is correct in that
> case
> > +                        String fileName = attributes.getValue("file");
> > +                        if (fileName == null) {
> > +                            String urlStr = attributes.getValue("url");
> > +                            url = new URL(urlStr);
> > +                        } else {
> > +                            url = new File(fileName).toURL();
> > +                        }
> >                      }
> >                      XMLHelper.parse(url, null, new DefaultHandler() {
> >                          boolean _insideConfigurations = false;
> > @@ -606,28 +659,21 @@
> >
> >      }
> >
> > -    public static void update(final IvySettings settings, InputStream
> inStream,
> > -            OutputStream outStream, final Map resolvedRevisions, final
> String status,
> > -            final String revision, final Date pubdate, final Namespace
> ns,
> > -            final boolean replaceInclude) throws IOException,
> SAXException {
> > -        update(settings, inStream, outStream, resolvedRevisions,
> status, revision, pubdate, ns,
> > -            replaceInclude, null);
> > -    }
> > -
> > -    public static void update(final IvySettings settings, InputStream
> inStream,
> > +    public static void update(final IvySettings settings, URL
> inStreamCtx, InputStream inStream,
> >              OutputStream outStream, final Map resolvedRevisions, final
> String status,
> >              final String revision, final Date pubdate, final Namespace
> ns,
> > -            final boolean replaceInclude, String[] confsToExclude)
> throws IOException, SAXException {
> > +            final boolean replaceInclude, String[] confsToExclude)
> > +            throws IOException, SAXException {
> >          final PrintWriter out = new PrintWriter(new
> OutputStreamWriter(outStream, "UTF-8"));
> >          final BufferedInputStream in = new
> BufferedInputStream(inStream);
> >
> > -        in.mark(10000); // assume the header is never larger than 10000
> bytes.
> > +        in.mark(MAX_HEADER_LENGTH); // assume the header is never
> larger than 10000 bytes.
> >          copyHeader(in, out);
> >          in.reset(); // reposition the stream at the beginning
> >
> >          try {
> >              UpdaterHandler updaterHandler = new
> UpdaterHandler(settings, out, resolvedRevisions,
> > -                    status, revision, pubdate, ns, replaceInclude,
> confsToExclude);
> > +                    status, revision, pubdate, ns, replaceInclude,
> confsToExclude, inStreamCtx);
> >              XMLHelper.parse(in, null, updaterHandler, updaterHandler);
> >          } catch (ParserConfigurationException e) {
> >              IllegalStateException ise = new IllegalStateException(
> >
> > Modified:
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
> > URL:
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java?view=diff&rev=551867&r1=551866&r2=551867
> >
> ==============================================================================
> > ---
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
> (original)
> > +++
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
> Fri Jun 29 05:16:12 2007
> > @@ -23,6 +23,7 @@
> >  import java.io.File;
> >  import java.io.FileReader;
> >  import java.io.InputStreamReader;
> > +import java.net.URL;
> >  import java.util.Arrays;
> >  import java.util.Date;
> >  import java.util.GregorianCalendar;
> > @@ -82,9 +83,11 @@
> >          //file to test-configurations-import6.xml in order to use a
> path relative to
> >          //the execution directory.
> >          //But that may hidde a bug!
> > -        XmlModuleDescriptorUpdater.update(new IvySettings(),
> XmlModuleUpdaterTest.class
> > -                .getResourceAsStream("test-configurations-import6.xml"),
> buffer, new HashMap(),
> > -            "release", "mynewrev", new Date(), null, true);
> > +        URL settingsUrl = new
> File("test/java/org/apache/ivy/plugins/parser/xml/"
> > +            + "test-configurations-import4.xml").toURL();
> > +        XmlModuleDescriptorUpdater.update(new IvySettings(),
> settingsUrl, buffer, new HashMap(),
> > +            "release", "mynewrev", new Date(), null,
> > +        true, null);
> >
> >          String updatedXml = buffer.toString();
> >
> > @@ -95,9 +98,11 @@
> >
> >      public void testUpdateWithExcludeConfigurations1() throws Exception
> {
> >          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> > -        XmlModuleDescriptorUpdater.update(new IvySettings(),
> XmlModuleUpdaterTest.class
> > -                .getResourceAsStream("test-update-excludedconfs1.xml"),
> buffer, new HashMap(),
> > -            "release", "mynewrev", new Date(), null, true, new String[]
> {"myconf2"});
> > +        URL settingsUrl = new
> File("test/java/org/apache/ivy/plugins/parser/xml/"
> > +                + "test-update-excludedconfs1.xml").toURL();
> > +        XmlModuleDescriptorUpdater.update(new IvySettings(),
> settingsUrl,
> > +            buffer, new HashMap(), "release", "mynewrev", new Date(),
> null, true,
> > +            new String[] {"myconf2"});
> >
> >          XmlModuleDescriptorParser parser =
> XmlModuleDescriptorParser.getInstance();
> >          ModuleDescriptor updatedMd = parser.parseDescriptor(new
> IvySettings(),
> > @@ -120,10 +125,12 @@
> >
> >      public void testUpdateWithExcludeConfigurations2() throws Exception
> {
> >          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> > +        URL settingFile = new
> File("test/java/org/apache/ivy/plugins/parser/xml/"
> > +            + "test-update-excludedconfs2.xml").toURL();
> >          try {
> > -            XmlModuleDescriptorUpdater.update(new IvySettings(),
> XmlModuleUpdaterTest.class
> > -                    .getResourceAsStream("
> test-update-excludedconfs2.xml"), buffer, new HashMap(),
> > -                "release", "mynewrev", new Date(), null, true, new
> String[] {"myconf2"});
> > +            XmlModuleDescriptorUpdater.update(new IvySettings(),
> settingFile, buffer,
> > +                new HashMap(), "release", "mynewrev", new Date(), null,
> true,
> > +                new String[] {"myconf2"});
> >              fail("IllegalArgumentException hasn't been thrown");
> >          } catch (IllegalArgumentException e) {
> >              // this is ok
> > @@ -134,8 +141,10 @@
> >
> >      public void testUpdateWithExcludeConfigurations3() throws Exception
> {
> >          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> > -        XmlModuleDescriptorUpdater.update(new IvySettings(),
> XmlModuleUpdaterTest.class
> > -                .getResourceAsStream("test-update-excludedconfs3.xml"),
> buffer, new HashMap(),
> > +        URL settingsUrl = new
> File("test/java/org/apache/ivy/plugins/parser/xml/"
> > +            + "test-update-excludedconfs3.xml").toURL();
> > +
> > +        XmlModuleDescriptorUpdater.update(new IvySettings(),
> settingsUrl, buffer, new HashMap(),
> >              "release", "mynewrev", new Date(), null, true, new String[]
> {"myconf2", "conf2"});
> >
> >          XmlModuleDescriptorParser parser =
> XmlModuleDescriptorParser.getInstance();
> > @@ -161,8 +170,9 @@
> >
> >      public void testUpdateWithExcludeConfigurations4() throws Exception
> {
> >          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> > -        XmlModuleDescriptorUpdater.update(new IvySettings(),
> XmlModuleUpdaterTest.class
> > -                .getResourceAsStream("test-update-excludedconfs4.xml"),
> buffer, new HashMap(),
> > +        URL settingsUrl = new
> File("test/java/org/apache/ivy/plugins/parser/xml/"
> > +            + "test-update-excludedconfs4.xml").toURL();
> > +        XmlModuleDescriptorUpdater.update(new IvySettings(),
> settingsUrl, buffer, new HashMap(),
> >              "release", "mynewrev", new Date(), null, true, new String[]
> {"myconf2"});
> >
> >          XmlModuleDescriptorParser parser =
> XmlModuleDescriptorParser.getInstance();
> > @@ -186,8 +196,9 @@
> >
> >      public void testUpdateWithExcludeConfigurations5() throws Exception
> {
> >          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> > -        XmlModuleDescriptorUpdater.update(new IvySettings(),
> XmlModuleUpdaterTest.class
> > -                .getResourceAsStream("test-update-excludedconfs5.xml"),
> buffer, new HashMap(),
> > +        URL settingsUrl = new
> File("test/java/org/apache/ivy/plugins/parser/xml/"
> > +            + "test-update-excludedconfs5.xml").toURL();
> > +        XmlModuleDescriptorUpdater.update(new IvySettings(),
> settingsUrl, buffer, new HashMap(),
> >              "release", "mynewrev", new Date(), null, true, new String[]
> {"myconf2"});
> >
> >          XmlModuleDescriptorParser parser =
> XmlModuleDescriptorParser.getInstance();
> >
> > Modified:
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update-excludedconfs3.xml
> > URL:
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml?view=diff&rev=551867&r1=551866&r2=551867
> >
> ==============================================================================
> > ---
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update-excludedconfs3.xml (original)
> > +++
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update-excludedconfs3.xml Fri Jun 29 05:16:12 2007
> > @@ -25,7 +25,7 @@
> >                status="integration"
> >                publication="20041101110000" />
> >         <configurations>
> > -               <include
> file="test/java/org/apache/ivy/plugins/parser/xml/imported-
> configurations.xml"/>
> > +               <include file="imported-configurations.xml"/>
> >                 <conf name="myconf1" description="desc 1"/>
> >                 <conf name="myconf2" description="desc 2"
> visibility="public"/>
> >                 <conf name="myconf3" description="desc 3"
> visibility="private"/>
> >
> > Modified:
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update.xml
> > URL:
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml?view=diff&rev=551867&r1=551866&r2=551867
> >
> ==============================================================================
> > ---
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update.xml (original)
> > +++
> incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-
> update.xml Fri Jun 29 05:16:12 2007
> > @@ -40,7 +40,7 @@
> >                 </description>
> >         </info>
> >         <configurations>
> > -               <include
> file="test/java/org/apache/ivy/plugins/parser/xml/imported-
> configurations-with-mapping.xml"/>
> > +               <include file="imported-configurations-with-mapping.xml
> "/>
> >                 <conf name="${myvar}" description="desc 1"/>
> >                 <conf name="myconf2" description="desc 2"
> visibility="public"/>
> >                 <conf name="myconf3" description="desc 3"
> visibility="private"/>
> >
> >
> >
>
>
> --
> Gilles SCOKART
>



-- 
Xavier Hanin - Independent Java Consultant
Creator of Ivy, xooki and xoocode.org
More about me: http://xhab.blogspot.com/

Re: svn commit: r551867 - in /incubator/ivy/core/trunk: src/java/org/apache/ivy/core/ src/java/org/apache/ivy/plugins/parser/xml/ test/java/org/apache/ivy/plugins/parser/xml/

Posted by Gilles Scokart <gs...@gmail.com>.
I think I fixed the test.  But still, we might have a problem when the
file coming from a repository are updated because the Ressource
currently doesn't support relative url.

I can't go further for the moment, sorry.  (I have some baguage to prepare ;-) )

If you detect some other issues with my changes, don't hesitate to roll back.

Gilles

2007/6/29, gscokart@apache.org <gs...@apache.org>:
> Author: gscokart
> Date: Fri Jun 29 05:16:12 2007
> New Revision: 551867
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=551867
> Log:
> refactoring to prepare support of relative url in XmlModuleDescriptorUpdater
>
> Modified:
>     incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
>     incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
>     incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
>     incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml
>     incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml
>
> Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java
> URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java?view=diff&rev=551867&r1=551866&r2=551867
> ==============================================================================
> --- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java (original)
> +++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/RelativeUrlResolver.java Fri Jun 29 05:16:12 2007
> @@ -26,8 +26,23 @@
>   */
>  public abstract class RelativeUrlResolver {
>
> +    /**
> +     * Resolve the url in the context of context.
> +     * @param context The URL of the ressource containing the reference url
> +     * @param url a relative or absolution url string
> +     * @throws MalformedURLException
> +     */
>      public abstract URL getURL(URL context , String url) throws MalformedURLException;
>
> +    /**
> +     * Relsovle file or url path relatively to a context.  file is considered first.
> +     * If file is not defined, url will be considered.
> +     * @param context The URL of the ressource containing the reference file or url
> +     * @param file a relative or absolute path
> +     * @param url a relative or absolution url string
> +     * @return the resulting url or null if faile and url are null.
> +     * @throws MalformedURLException
> +     */
>      public URL getURL(URL context, String file, String url) throws MalformedURLException {
>          if (file != null) {
>              File f = new File(file);
>
> Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
> URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java?view=diff&rev=551867&r1=551866&r2=551867
> ==============================================================================
> --- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java (original)
> +++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java Fri Jun 29 05:16:12 2007
> @@ -59,6 +59,7 @@
>   * possible the original syntax
>   */
>  public class XmlModuleDescriptorUpdater {
> +    private static final int MAX_HEADER_LENGTH = 10000;
>      public static String LINE_SEPARATOR = System.getProperty("line.separator");
>
>      /**
> @@ -87,10 +88,46 @@
>              final Map resolvedRevisions, final String status, final String revision,
>              final Date pubdate, final Namespace ns, final boolean replaceInclude,
>              String[] confsToExclude) throws IOException, SAXException {
> -        update(settings, srcURL.openStream(), destFile, resolvedRevisions, status, revision,
> -            pubdate, ns, replaceInclude, confsToExclude);
> +        if (destFile.getParentFile() != null) {
> +            destFile.getParentFile().mkdirs();
> +        }
> +        OutputStream destStream = new FileOutputStream(destFile);
> +        try {
> +            update(settings, srcURL, destStream, resolvedRevisions, status, revision,
> +                pubdate, ns, replaceInclude, confsToExclude);
> +        } finally {
> +            try {
> +                destStream.close();
> +            } catch (IOException e) {
> +                Message.warn("failed to close a stream : " + e.toString());
> +            }
> +        }
>      }
>
> +    public static void update(final IvySettings settings, URL srcURL, OutputStream destFile,
> +            final Map resolvedRevisions, final String status, final String revision,
> +            final Date pubdate, final Namespace ns, final boolean replaceInclude,
> +            String[] confsToExclude) throws IOException, SAXException {
> +        InputStream in = srcURL.openStream();
> +        try {
> +            update(settings, srcURL, in, destFile, resolvedRevisions, status, revision,
> +                pubdate, ns, replaceInclude, confsToExclude);
> +        } finally {
> +            try {
> +                in.close();
> +            } catch (IOException e) {
> +                Message.warn("failed to close a stream : " + e.toString());
> +            }
> +            try {
> +                destFile.close();
> +            } catch (IOException e) {
> +                Message.warn("failed to close a stream : " + e.toString());
> +            }
> +        }
> +
> +    }
> +
> +
>      public static void update(final IvySettings settings, InputStream in, File destFile,
>              final Map resolvedRevisions, final String status, final String revision,
>              final Date pubdate, final Namespace ns, final boolean replaceInclude,
> @@ -100,16 +137,19 @@
>          }
>          OutputStream fos = new FileOutputStream(destFile);
>          try {
> -            update(settings, in, fos, resolvedRevisions, status, revision, pubdate, ns,
> +            //TODO : the inputStream context should be given.
> +            update(settings, null, in, fos, resolvedRevisions, status, revision, pubdate, ns,
>                  replaceInclude, confsToExclude);
>          } finally {
>              try {
>                  in.close();
>              } catch (IOException e) {
> +                Message.warn("failed to close a stream : " + e.toString());
>              }
>              try {
>                  fos.close();
>              } catch (IOException e) {
> +                Message.warn("failed to close a stream : " + e.toString());
>              }
>          }
>      }
> @@ -136,10 +176,12 @@
>
>          private final List confs;
>
> +        private final URL relativePathCtx;
> +
>          public UpdaterHandler(final IvySettings settings, final PrintWriter out,
>                  final Map resolvedRevisions, final String status, final String revision,
>                  final Date pubdate, final Namespace ns, final boolean replaceInclude,
> -                final String[] confs) {
> +                final String[] confs, final URL relativePathCtx) {
>              this.settings = settings;
>              this.out = out;
>              this.resolvedRevisions = resolvedRevisions;
> @@ -148,6 +190,7 @@
>              this.pubdate = pubdate;
>              this.ns = ns;
>              this.replaceInclude = replaceInclude;
> +            this.relativePathCtx = relativePathCtx;
>              if (confs != null) {
>                  this.confs = Arrays.asList(confs);
>              } else {
> @@ -228,16 +271,26 @@
>                  }
>              } else if (replaceInclude && "include".equals(qName)
>                      && _context.contains("configurations")) {
> +                //TODO, in the case of !replaceInclude, we should still replace the relative path
> +                //by an absolute path.
>                  final ExtendedBuffer buffer = new ExtendedBuffer(getContext());
>                  _buffers.push(buffer);
>                  try {
>                      URL url;
> -                    String fileName = substitute(settings, attributes.getValue("file"));
> -                    if (fileName == null) {
> -                        String urlStr = substitute(settings, attributes.getValue("url"));
> -                        url = new URL(urlStr);
> +                    if (settings != null) {
> +                        url = settings.getRelativeUrlResolver().getURL(relativePathCtx,
> +                            settings.substitute(attributes.getValue("file")),
> +                            settings.substitute(attributes.getValue("url")));
>                      } else {
> -                        url = new File(fileName).toURL();
> +                        //TODO : settings can be null, but I don't why.
> +                        //Check if the next code is correct in that case
> +                        String fileName = attributes.getValue("file");
> +                        if (fileName == null) {
> +                            String urlStr = attributes.getValue("url");
> +                            url = new URL(urlStr);
> +                        } else {
> +                            url = new File(fileName).toURL();
> +                        }
>                      }
>                      XMLHelper.parse(url, null, new DefaultHandler() {
>                          boolean _insideConfigurations = false;
> @@ -606,28 +659,21 @@
>
>      }
>
> -    public static void update(final IvySettings settings, InputStream inStream,
> -            OutputStream outStream, final Map resolvedRevisions, final String status,
> -            final String revision, final Date pubdate, final Namespace ns,
> -            final boolean replaceInclude) throws IOException, SAXException {
> -        update(settings, inStream, outStream, resolvedRevisions, status, revision, pubdate, ns,
> -            replaceInclude, null);
> -    }
> -
> -    public static void update(final IvySettings settings, InputStream inStream,
> +    public static void update(final IvySettings settings, URL inStreamCtx, InputStream inStream,
>              OutputStream outStream, final Map resolvedRevisions, final String status,
>              final String revision, final Date pubdate, final Namespace ns,
> -            final boolean replaceInclude, String[] confsToExclude) throws IOException, SAXException {
> +            final boolean replaceInclude, String[] confsToExclude)
> +            throws IOException, SAXException {
>          final PrintWriter out = new PrintWriter(new OutputStreamWriter(outStream, "UTF-8"));
>          final BufferedInputStream in = new BufferedInputStream(inStream);
>
> -        in.mark(10000); // assume the header is never larger than 10000 bytes.
> +        in.mark(MAX_HEADER_LENGTH); // assume the header is never larger than 10000 bytes.
>          copyHeader(in, out);
>          in.reset(); // reposition the stream at the beginning
>
>          try {
>              UpdaterHandler updaterHandler = new UpdaterHandler(settings, out, resolvedRevisions,
> -                    status, revision, pubdate, ns, replaceInclude, confsToExclude);
> +                    status, revision, pubdate, ns, replaceInclude, confsToExclude, inStreamCtx);
>              XMLHelper.parse(in, null, updaterHandler, updaterHandler);
>          } catch (ParserConfigurationException e) {
>              IllegalStateException ise = new IllegalStateException(
>
> Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java
> URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java?view=diff&rev=551867&r1=551866&r2=551867
> ==============================================================================
> --- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java (original)
> +++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleUpdaterTest.java Fri Jun 29 05:16:12 2007
> @@ -23,6 +23,7 @@
>  import java.io.File;
>  import java.io.FileReader;
>  import java.io.InputStreamReader;
> +import java.net.URL;
>  import java.util.Arrays;
>  import java.util.Date;
>  import java.util.GregorianCalendar;
> @@ -82,9 +83,11 @@
>          //file to test-configurations-import6.xml in order to use a path relative to
>          //the execution directory.
>          //But that may hidde a bug!
> -        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
> -                .getResourceAsStream("test-configurations-import6.xml"), buffer, new HashMap(),
> -            "release", "mynewrev", new Date(), null, true);
> +        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/"
> +            + "test-configurations-import4.xml").toURL();
> +        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
> +            "release", "mynewrev", new Date(), null,
> +        true, null);
>
>          String updatedXml = buffer.toString();
>
> @@ -95,9 +98,11 @@
>
>      public void testUpdateWithExcludeConfigurations1() throws Exception {
>          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> -        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
> -                .getResourceAsStream("test-update-excludedconfs1.xml"), buffer, new HashMap(),
> -            "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
> +        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/"
> +                + "test-update-excludedconfs1.xml").toURL();
> +        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl,
> +            buffer, new HashMap(), "release", "mynewrev", new Date(), null, true,
> +            new String[] {"myconf2"});
>
>          XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
>          ModuleDescriptor updatedMd = parser.parseDescriptor(new IvySettings(),
> @@ -120,10 +125,12 @@
>
>      public void testUpdateWithExcludeConfigurations2() throws Exception {
>          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> +        URL settingFile = new File("test/java/org/apache/ivy/plugins/parser/xml/"
> +            + "test-update-excludedconfs2.xml").toURL();
>          try {
> -            XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
> -                    .getResourceAsStream("test-update-excludedconfs2.xml"), buffer, new HashMap(),
> -                "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
> +            XmlModuleDescriptorUpdater.update(new IvySettings(), settingFile, buffer,
> +                new HashMap(), "release", "mynewrev", new Date(), null, true,
> +                new String[] {"myconf2"});
>              fail("IllegalArgumentException hasn't been thrown");
>          } catch (IllegalArgumentException e) {
>              // this is ok
> @@ -134,8 +141,10 @@
>
>      public void testUpdateWithExcludeConfigurations3() throws Exception {
>          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> -        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
> -                .getResourceAsStream("test-update-excludedconfs3.xml"), buffer, new HashMap(),
> +        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/"
> +            + "test-update-excludedconfs3.xml").toURL();
> +
> +        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
>              "release", "mynewrev", new Date(), null, true, new String[] {"myconf2", "conf2"});
>
>          XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
> @@ -161,8 +170,9 @@
>
>      public void testUpdateWithExcludeConfigurations4() throws Exception {
>          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> -        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
> -                .getResourceAsStream("test-update-excludedconfs4.xml"), buffer, new HashMap(),
> +        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/"
> +            + "test-update-excludedconfs4.xml").toURL();
> +        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
>              "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
>
>          XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
> @@ -186,8 +196,9 @@
>
>      public void testUpdateWithExcludeConfigurations5() throws Exception {
>          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> -        XmlModuleDescriptorUpdater.update(new IvySettings(), XmlModuleUpdaterTest.class
> -                .getResourceAsStream("test-update-excludedconfs5.xml"), buffer, new HashMap(),
> +        URL settingsUrl = new File("test/java/org/apache/ivy/plugins/parser/xml/"
> +            + "test-update-excludedconfs5.xml").toURL();
> +        XmlModuleDescriptorUpdater.update(new IvySettings(), settingsUrl, buffer, new HashMap(),
>              "release", "mynewrev", new Date(), null, true, new String[] {"myconf2"});
>
>          XmlModuleDescriptorParser parser = XmlModuleDescriptorParser.getInstance();
>
> Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml
> URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml?view=diff&rev=551867&r1=551866&r2=551867
> ==============================================================================
> --- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml (original)
> +++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update-excludedconfs3.xml Fri Jun 29 05:16:12 2007
> @@ -25,7 +25,7 @@
>                status="integration"
>                publication="20041101110000" />
>         <configurations>
> -               <include file="test/java/org/apache/ivy/plugins/parser/xml/imported-configurations.xml"/>
> +               <include file="imported-configurations.xml"/>
>                 <conf name="myconf1" description="desc 1"/>
>                 <conf name="myconf2" description="desc 2" visibility="public"/>
>                 <conf name="myconf3" description="desc 3" visibility="private"/>
>
> Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml
> URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml?view=diff&rev=551867&r1=551866&r2=551867
> ==============================================================================
> --- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml (original)
> +++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-update.xml Fri Jun 29 05:16:12 2007
> @@ -40,7 +40,7 @@
>                 </description>
>         </info>
>         <configurations>
> -               <include file="test/java/org/apache/ivy/plugins/parser/xml/imported-configurations-with-mapping.xml"/>
> +               <include file="imported-configurations-with-mapping.xml"/>
>                 <conf name="${myvar}" description="desc 1"/>
>                 <conf name="myconf2" description="desc 2" visibility="public"/>
>                 <conf name="myconf3" description="desc 3" visibility="private"/>
>
>
>


-- 
Gilles SCOKART