bodewig     2003/01/17 04:50:28

  Modified:    .        Tag: ANT_15_BRANCH WHATSNEW
               src/etc/testcases/taskdefs Tag: ANT_15_BRANCH jar.xml
               src/main/org/apache/tools/ant/taskdefs Tag: ANT_15_BRANCH
                        Jar.java
               src/testcases/org/apache/tools/ant/taskdefs Tag:
                        ANT_15_BRANCH JarTest.java
  Log:
  merge fix for bug 12651 from HEAD
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.263.2.111 +1 -0      jakarta-ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
  retrieving revision 1.263.2.110
  retrieving revision 1.263.2.111
  diff -u -r1.263.2.110 -r1.263.2.111
  --- WHATSNEW  16 Jan 2003 12:08:00 -0000      1.263.2.110
  +++ WHATSNEW  17 Jan 2003 12:50:27 -0000      1.263.2.111
  @@ -61,6 +61,7 @@
     it to once again accept URLs. This should not affect current FIle based 
usage
     unless you are extending the Signjar task.
   
  +* <jar update="true"> would remove the original manifest.
   
   Other changes:
   --------------
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.1   +21 -3     jakarta-ant/src/etc/testcases/taskdefs/jar.xml
  
  Index: jar.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/etc/testcases/taskdefs/jar.xml,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- jar.xml   8 Jan 2002 09:46:26 -0000       1.4
  +++ jar.xml   17 Jan 2003 12:50:27 -0000      1.4.2.1
  @@ -2,6 +2,9 @@
   
   <project name="jar-test" basedir="." default="test1">
   
  +  <property name="tmp.jar" location="tmp.jar"/>
  +  <property name="tmp.dir" location="jartmp"/>
  +
     <target name="test1">
       <jar/>
     </target>
  @@ -22,7 +25,7 @@
   
     <target name="test4">
      <jar
  -     destfile="tmp.jar"
  +     destfile="${tmp.jar}"
        basedir="."
        includes="jar.xml"
       />
  @@ -31,14 +34,29 @@
     <!-- This test is to make sure upToDate is working -->
     <target name="test5">
       <jar
  -     destfile="tmp.jar"
  +     destfile="${tmp.jar}"
        basedir="."
        includes="jar.xml"
       />
     </target>
   
  +  <target name="testManifestStaysIntact">
  +    <mkdir dir="${tmp.dir}"/>
  +    <manifest file="${tmp.dir}/manifest">
  +      <attribute name="Foo" value="bar"/>
  +    </manifest>
  +    <jar destfile="${tmp.jar}" basedir="." includes="jar.xml"
  +         manifest="${tmp.dir}/manifest"/>
  +    <sleep seconds="3"/>
  +    <touch file="jar.xml"/>
  +    <jar destfile="${tmp.jar}" basedir="." includes="jar.xml"
  +         update="true"/>
  +    <unjar src="${tmp.jar}" dest="${tmp.dir}"/>
  +  </target>    
  +
     <target name="cleanup">
  -    <delete file="tmp.jar" />
  +    <delete file="${tmp.jar}" />
  +    <delete dir="${tmp.dir}"/>
     </target>
   
   </project>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.51.2.12 +56 -18    
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Jar.java
  
  Index: Jar.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Jar.java,v
  retrieving revision 1.51.2.11
  retrieving revision 1.51.2.12
  diff -u -r1.51.2.11 -r1.51.2.12
  --- Jar.java  19 Jul 2002 18:36:25 -0000      1.51.2.11
  +++ Jar.java  17 Jan 2003 12:50:28 -0000      1.51.2.12
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2000-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -72,7 +72,8 @@
   import java.io.OutputStreamWriter;
   import java.io.InputStreamReader;
   import java.util.Enumeration;
  -
  +import java.util.zip.ZipEntry;
  +import java.util.zip.ZipFile;
   
   /**
    * Creates a JAR archive.
  @@ -97,6 +98,12 @@
       /**  merged manifests added through filesets */
       private Manifest filesetManifest;
   
  +    /** 
  +     * Manifest of original archive, will be set to null if not in
  +     * update mode.
  +     */
  +    private Manifest originalManifest;
  +
       /**
        *  whether to merge fileset manifests;
        *  value is true if filesetmanifest is 'merge' or 'mergewithoutmain'
  @@ -152,6 +159,36 @@
       }
   
       /**
  +     * Override to get hold of the original Manifest (if present and
  +     * only if updating ...
  +     *
  +     * @since Ant 1.5.2
  +     */
  +    public void setDestFile(File jarFile) {
  +        super.setDestFile(jarFile);
  +        if (jarFile.exists()) {
  +            try {
  +                ZipFile zf = new ZipFile(jarFile);
  +
  +                // must not use getEntry as "well behaving" applications
  +                // must accept the manifest in any capitalization
  +                Enumeration enum = zf.entries();
  +                while (enum.hasMoreElements()) {
  +                    ZipEntry ze = (ZipEntry) enum.nextElement();
  +                    if 
(ze.getName().equalsIgnoreCase("META-INF/MANIFEST.MF")) {
  +                        originalManifest = 
  +                            getManifest(new InputStreamReader(zf
  +                                                         
.getInputStream(ze)));
  +                    }
  +                }
  +            } catch (Throwable t) {
  +                log("error while reading original manifest: " + 
t.getMessage(),
  +                    Project.MSG_WARN);
  +            }
  +        }
  +    }
  +
  +    /**
        * Set whether or not to create an index list for classes.
        * This may speed up classloading in some cases.
        */
  @@ -275,6 +312,10 @@
       private Manifest createManifest()
           throws IOException, BuildException {
           try {
  +            if (!isInUpdateMode()) {
  +                originalManifest = null;
  +            }
  +
               Manifest finalManifest = Manifest.getDefaultManifest();
   
               if (manifest == null) {
  @@ -282,24 +323,21 @@
                       // if we haven't got the manifest yet, attempt to
                       // get it now and have manifest be the final merge
                       manifest = getManifest(manifestFile);
  -                    finalManifest.merge(filesetManifest);
  -                    finalManifest.merge(configuredManifest);
  -                    finalManifest.merge(manifest, !mergeManifestsMain);
  -                } else if (configuredManifest != null) {
  -                    // configuredManifest is the final merge
  -                    finalManifest.merge(filesetManifest);
  -                    finalManifest.merge(configuredManifest,
  -                                        !mergeManifestsMain);
  -                } else if (filesetManifest != null) {
  -                    // filesetManifest is the final (and only) merge
  -                    finalManifest.merge(filesetManifest, 
!mergeManifestsMain);
                   }
  -            } else {
  -                // manifest is the final merge
  -                finalManifest.merge(filesetManifest);
  -                finalManifest.merge(configuredManifest);
  -                finalManifest.merge(manifest, !mergeManifestsMain);
               }
  +
  +            /*
  +             * Precedence: manifestFile wins over inline manifest,
  +             * over manifests read from the filesets over the original
  +             * manifest.
  +             *
  +             * merge with null argument is a no-op
  +             */
  +
  +            finalManifest.merge(originalManifest);
  +            finalManifest.merge(filesetManifest);
  +            finalManifest.merge(configuredManifest);
  +            finalManifest.merge(manifest, !mergeManifestsMain);
   
               return finalManifest;
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.8.2.1   +13 -7     
jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/JarTest.java
  
  Index: JarTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/JarTest.java,v
  retrieving revision 1.8
  retrieving revision 1.8.2.1
  diff -u -r1.8 -r1.8.2.1
  --- JarTest.java      10 Jan 2002 10:13:12 -0000      1.8
  +++ JarTest.java      17 Jan 2003 12:50:28 -0000      1.8.2.1
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2000-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -54,7 +54,9 @@
   
   package org.apache.tools.ant.taskdefs;
   
  +import java.io.IOException;
   import java.io.File;
  +import java.io.FileReader;
   import java.util.Date;
   import org.apache.tools.ant.BuildFileTest;
   
  @@ -63,7 +65,6 @@
    */
   public class JarTest extends BuildFileTest {
   
  -    private static long jarModifiedDate;
       private static String tempJar = "tmp.jar";
   
       public JarTest(String name) {
  @@ -94,12 +95,17 @@
           executeTarget("test4");
           File jarFile = new File(getProjectDir(), tempJar);
           assertTrue(jarFile.exists());
  -        jarModifiedDate = jarFile.lastModified();
       }
   
  -    public void XXXtest5() {
  -        executeTarget("test5");
  -        File jarFile = new File(getProjectDir(), tempJar);
  -        assertEquals(jarModifiedDate, jarFile.lastModified());
  +    public void testManifestStaysIntact() 
  +        throws IOException, ManifestException {
  +        executeTarget("testManifestStaysIntact");
  +        Manifest mf1 = 
  +            new Manifest(new FileReader(getProject()
  +                                        .resolveFile("jartmp/manifest")));
  +        Manifest mf2 = 
  +            new Manifest(new FileReader(getProject()
  +                                        
.resolveFile("jartmp/META-INF/MANIFEST.MF")));
  +        assertEquals(mf1, mf2);
       }
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to