conor       2003/03/22 01:39:46

  Modified:    src/main/org/apache/tools/ant/loader AntClassLoader2.java
               docs/manual/CoreTasks jar.html manifest.html
               src/main/org/apache/tools/ant/taskdefs Jar.java
                        ManifestTask.java
  Log:
  Add manifest encoding options to control the encoding used to read in
  manifests
  
  PR:   17634
  
  Revision  Changes    Path
  1.6       +2 -1      
ant/src/main/org/apache/tools/ant/loader/AntClassLoader2.java
  
  Index: AntClassLoader2.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/loader/AntClassLoader2.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -u -r1.5 -r1.6
  --- AntClassLoader2.java      10 Feb 2003 14:13:34 -0000      1.5
  +++ AntClassLoader2.java      22 Mar 2003 09:39:46 -0000      1.6
  @@ -283,7 +283,8 @@
               if (manifestStream == null) {
                   return;
               }                
  -            Reader manifestReader = new InputStreamReader(manifestStream);
  +            Reader manifestReader 
  +                = new InputStreamReader(manifestStream, "UTF-8");
               org.apache.tools.ant.taskdefs.Manifest manifest
                   = new org.apache.tools.ant.taskdefs.Manifest(manifestReader);
               classpath 
  
  
  
  1.25      +5 -0      ant/docs/manual/CoreTasks/jar.html
  
  Index: jar.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/jar.html,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -w -u -r1.24 -r1.25
  --- jar.html  7 Mar 2003 14:48:52 -0000       1.24
  +++ jar.html  22 Mar 2003 09:39:46 -0000      1.25
  @@ -151,6 +151,11 @@
       <td valign="top">whether to create an <A 
HREF="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#JAR%20Index";>index 
list</A> to speed up classloading.  This is a JDK 1.3+ specific feature.  
Defaults to false. </td>
       <td valign="top" align="center">No</td>
     </tr>
  +  <tr>
  +    <td valign="top">manifestencoding</td>
  +    <td valign="top">The encoding used to read the JAR manifest, when a 
manifest file is specified.</td>
  +    <td valign="top" align="center">No, defaults to the platform 
encoding.</td>
  +  </tr>
   </table>
   
   <h3>Nested elements</h3>
  
  
  
  1.7       +5 -0      ant/docs/manual/CoreTasks/manifest.html
  
  Index: manifest.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/manifest.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -w -u -r1.6 -r1.7
  --- manifest.html     4 Sep 2002 11:05:16 -0000       1.6
  +++ manifest.html     22 Mar 2003 09:39:46 -0000      1.7
  @@ -39,6 +39,11 @@
       <td valign="top">One of "update" or "replace", default is "replace".</td>
       <td valign="top" align="center">No</td>
     </tr>
  +  <tr>
  +    <td valign="top">encoding</td>
  +    <td valign="top">The encoding used to read the existing manifest when 
updating.</td>
  +    <td valign="top" align="center">No, defaults to UTF-8 encoding.</td>
  +  </tr>
   </table>
   
   <h3>Nested elements</h3>
  
  
  
  1.72      +45 -7     ant/src/main/org/apache/tools/ant/taskdefs/Jar.java
  
  Index: Jar.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Jar.java,v
  retrieving revision 1.71
  retrieving revision 1.72
  diff -u -w -u -r1.71 -r1.72
  --- Jar.java  12 Mar 2003 11:23:27 -0000      1.71
  +++ Jar.java  22 Mar 2003 09:39:46 -0000      1.72
  @@ -61,6 +61,7 @@
   import java.io.FileInputStream;
   import java.io.IOException;
   import java.io.InputStream;
  +import java.io.UnsupportedEncodingException;
   import java.io.InputStreamReader;
   import java.io.OutputStreamWriter;
   import java.io.PrintWriter;
  @@ -124,6 +125,9 @@
       /** the manifest specified by the 'manifest' attribute **/
       private Manifest manifest;
   
  +    /** The encoding to use when reading in a manifest file */
  +    private String manifestEncoding;
  +    
       /**
        * The file found from the 'manifest' attribute.  This can be
        * either the location of a manifest, or the name of a jar added
  @@ -173,6 +177,14 @@
       }
   
       /**
  +     * Set whether or not to create an index list for classes.
  +     * This may speed up classloading in some cases.
  +     */
  +    public void setManifestEncoding(String manifestEncoding) {
  +        this.manifestEncoding = manifestEncoding;
  +    }
  +
  +    /**
        * Allows the manifest for the archive file to be provided inline
        * in the build file rather than in an external file.
        *
  @@ -212,8 +224,15 @@
           InputStreamReader isr = null;
           try {
               fis = new FileInputStream(manifestFile);
  -            isr = new InputStreamReader(fis, "UTF-8");
  +            if (manifestEncoding == null) {
  +                isr = new InputStreamReader(fis);
  +            } else {
  +                isr = new InputStreamReader(fis, manifestEncoding);
  +            }
               newManifest = getManifest(isr);
  +        } catch (UnsupportedEncodingException e) {
  +            throw new BuildException("Unsupported encoding while reading 
manifest: "
  +                                     + e.getMessage(), e);
           } catch (IOException e) {
               throw new BuildException("Unable to read manifest file: "
                                        + manifestFile
  @@ -466,11 +485,22 @@
               // If this is the same name specified in 'manifest', this
               // is the manifest to use
               log("Found manifest " + file, Project.MSG_VERBOSE);
  +            try {
               if (is != null) {
  -                manifest = getManifest(new InputStreamReader(is, "UTF-8"));
  +                    InputStreamReader isr;
  +                    if (manifestEncoding == null) {
  +                        isr = new InputStreamReader(is);
  +                    } else {
  +                        isr = new InputStreamReader(is, manifestEncoding);
  +                    }
  +                    manifest = getManifest(isr);
               } else {
                   manifest = getManifest(file);
               }
  +            } catch (UnsupportedEncodingException e) {
  +                throw new BuildException("Unsupported encoding while reading 
" 
  +                    + "manifest: " + e.getMessage(), e);
  +            }
           } else if (filesetManifestConfig != null &&
                      !filesetManifestConfig.getValue().equals("skip")) {
               // we add this to our group of fileset manifests
  @@ -480,8 +510,13 @@
               try {
                   Manifest newManifest = null;
                   if (is != null) {
  -                    newManifest 
  -                        = getManifest(new InputStreamReader(is, "UTF-8"));
  +                    InputStreamReader isr;
  +                    if (manifestEncoding == null) {
  +                        isr = new InputStreamReader(is);
  +                    } else {
  +                        isr = new InputStreamReader(is, manifestEncoding);
  +                    }
  +                    newManifest = getManifest(isr);
                   } else {
                       newManifest = getManifest(file);
                   }
  @@ -491,6 +526,9 @@
                   } else {
                       filesetManifest.merge(newManifest);
                   }
  +            } catch (UnsupportedEncodingException e) {
  +                throw new BuildException("Unsupported encoding while reading 
" 
  +                    + "manifest: " + e.getMessage(), e);
               } catch (ManifestException e) {
                   log("Manifest in file " + file + " is invalid: "
                       + e.getMessage(), Project.MSG_ERR);
  
  
  
  1.8       +18 -1     
ant/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java
  
  Index: ManifestTask.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -w -u -r1.7 -r1.8
  --- ManifestTask.java 7 Mar 2003 11:23:02 -0000       1.7
  +++ ManifestTask.java 22 Mar 2003 09:39:46 -0000      1.8
  @@ -97,6 +97,11 @@
       private Mode mode;
   
       /**
  +     * The encoding of the manifest file
  +     */
  +    private String encoding;
  +    
  +    /**
        * Helper class for Manifest's mode attribute.
        */
       public static class Mode extends EnumeratedAttribute {
  @@ -149,6 +154,14 @@
       }
   
       /**
  +     * The encoding to use for reading in an existing manifest file
  +     * @param encoding the maniofets file encoding.
  +     */
  +    public void setEncoding(String encoding) {
  +        this.encoding = encoding;
  +    }
  +
  +    /**
        * Update policy: either "update" or "replace"; default is "replace".
        * @param m the mode value - update or replace.
        */
  @@ -175,7 +188,11 @@
               InputStreamReader isr = null;
               try {
                   fis = new FileInputStream(manifestFile);
  +                if (encoding == null) {
                   isr = new InputStreamReader(fis, "UTF-8");
  +                } else {
  +                    isr = new InputStreamReader(fis, encoding);
  +                }
                   current = new Manifest(isr);
               } catch (ManifestException m) {
                   error = new BuildException("Existing manifest " + 
manifestFile
  
  
  

Reply via email to