bodewig     2003/04/02 22:41:51

  Modified:    .        WHATSNEW
               src/main/org/apache/tools/ant/taskdefs Jar.java
  Log:
  Improve standards compliance of created index.
  
  PR: 16972
  
  Revision  Changes    Path
  1.387     +3 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.386
  retrieving revision 1.387
  diff -u -r1.386 -r1.387
  --- WHATSNEW  2 Apr 2003 16:01:15 -0000       1.386
  +++ WHATSNEW  3 Apr 2003 06:41:50 -0000       1.387
  @@ -84,6 +84,9 @@
   
   * <jar index="on"> could include multiple index lists.  Bugzilla 10262.
   
  +* The index created by <jar> didn't conform to the spec as it didn't
  +  include the top-level entries.  Bugzilla Report 16972.
  +
   Other changes:
   --------------
   * Shipped XML parser is now Xerces 2.4.0
  
  
  
  1.74      +28 -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.73
  retrieving revision 1.74
  diff -u -r1.73 -r1.74
  --- Jar.java  2 Apr 2003 16:01:15 -0000       1.73
  +++ Jar.java  3 Apr 2003 06:41:51 -0000       1.74
  @@ -67,6 +67,7 @@
   import java.io.PrintWriter;
   import java.io.Reader;
   import java.util.Enumeration;
  +import java.util.Vector;
   import java.util.zip.ZipEntry;
   import java.util.zip.ZipFile;
   import org.apache.tools.ant.BuildException;
  @@ -145,12 +146,24 @@
        */
       private boolean createEmpty = false;
   
  +    /**
  +     * Stores all files that are in the root of the archive (i.e. that
  +     * have a name that doesn't contain a slash) so they can get
  +     * listed in the index.
  +     *
  +     * Will not be filled unless the user has asked for an index.
  +     *
  +     * @since Ant 1.6
  +     */
  +    private Vector rootEntries;
  +
       /** constructor */
       public Jar() {
           super();
           archiveType = "jar";
           emptyBehavior = "create";
           setEncoding("UTF8");
  +        rootEntries = new Vector();
       }
   
       /**
  @@ -458,6 +471,11 @@
               writer.println(dir);
           }
   
  +        enum = rootEntries.elements();
  +        while (enum.hasMoreElements()) {
  +            writer.println(enum.nextElement());
  +        }
  +
           writer.flush();
           ByteArrayInputStream bais =
               new ByteArrayInputStream(baos.toByteArray());
  @@ -480,6 +498,9 @@
                   + " files include a META-INF/INDEX.LIST which will"
                   + " be replaced by a newly generated one.", 
Project.MSG_WARN);
           } else {
  +            if (index && vPath.indexOf("/") == -1) {
  +                rootEntries.addElement(vPath);
  +            }
               super.zipFile(is, zOut, vPath, lastModified, fromArchive, mode);
           }
       }
  @@ -663,13 +684,13 @@
           super.cleanUp();
   
           // we want to save this info if we are going to make another pass
  -        if (! doubleFilePass || (doubleFilePass && ! skipWriting))
  -            {
  -                manifest = null;
  -                configuredManifest = savedConfiguredManifest;
  -                filesetManifest = null;
  -                originalManifest = null;
  -            }
  +        if (! doubleFilePass || (doubleFilePass && ! skipWriting)) {
  +            manifest = null;
  +            configuredManifest = savedConfiguredManifest;
  +            filesetManifest = null;
  +            originalManifest = null;
  +        }
  +        rootEntries.removeAllElements();
       }
   
       /**
  
  
  

Reply via email to