You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2010/08/07 22:43:21 UTC

svn commit: r983308 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/taskdefs/Jar.java src/tests/antunit/taskdefs/jar-test.xml

Author: bodewig
Date: Sat Aug  7 20:43:21 2010
New Revision: 983308

URL: http://svn.apache.org/viewvc?rev=983308&view=rev
Log:
<jar doesn't merge manifests that come from zipfilesets with prefix.  PR 49605

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Jar.java
    ant/core/trunk/src/tests/antunit/taskdefs/jar-test.xml

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=983308&r1=983307&r2=983308&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Sat Aug  7 20:43:21 2010
@@ -115,6 +115,10 @@ Fixed bugs:
    files matched.
    Bugzilla Report 49594.
 
+ * <jar filesetmanifest="merge"> didn't work for manifests added via
+   <zipfileset>s that used the prefix or fullpath attributes.
+   Bugzilla Report 49605.
+
 Other changes:
 --------------
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Jar.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Jar.java?rev=983308&r1=983307&r2=983308&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Jar.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Jar.java Sat Aug  7 20:43:21 2010
@@ -46,6 +46,7 @@ import java.util.zip.ZipFile;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Manifest.Section;
+import org.apache.tools.ant.types.ArchiveFileSet;
 import org.apache.tools.ant.types.EnumeratedAttribute;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.Path;
@@ -1176,6 +1177,18 @@ public class Jar extends Zip {
             }
             for (int j = 0; j < resources[0].length; j++) {
                 String name = resources[0][j].getName().replace('\\', '/');
+                if (rcs[i] instanceof ArchiveFileSet) {
+                    ArchiveFileSet afs = (ArchiveFileSet) rcs[i];
+                    if (!"".equals(afs.getFullpath(getProject()))) {
+                        name = afs.getFullpath(getProject());
+                    } else if (!"".equals(afs.getPrefix(getProject()))) {
+                        String prefix = afs.getPrefix(getProject());
+                        if (!prefix.endsWith("/") && !prefix.endsWith("\\")) {
+                            prefix += "/";
+                        }
+                        name = prefix + name;
+                    }
+                }
                 if (name.equalsIgnoreCase(MANIFEST_NAME)) {
                     manifests[i] = new Resource[] {resources[0][j]};
                     break;

Modified: ant/core/trunk/src/tests/antunit/taskdefs/jar-test.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/jar-test.xml?rev=983308&r1=983307&r2=983308&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/jar-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/jar-test.xml Sat Aug  7 20:43:21 2010
@@ -207,4 +207,23 @@
     <au:assertResourceContains value="Test: Header"
                                resource="${output}/META-INF/MANIFEST.MF"/>
   </target>
+
+  <target name="testZipfilesetMerge"
+          description="https://issues.apache.org/bugzilla/show_bug.cgi?id=49605">
+    <mkdir dir="${input}"/>
+    <mkdir dir="${output}"/>
+    <echo file="${input}/MANIFEST.MF">Manifest-Version: 1.0
+Main-Class: MyClass
+
+</echo>
+    <jar destfile="${input}/manifesttest.jar"
+         filesetmanifest="merge">
+      <zipfileset file="${input}/MANIFEST.MF" prefix="META-INF"/>
+    </jar>
+    <unjar src="${input}/manifesttest.jar" dest="${output}"/>
+    <au:assertFileExists file="${output}/META-INF/MANIFEST.MF"/>
+    <au:assertResourceContains value="Main-Class: MyClass"
+                               resource="${output}/META-INF/MANIFEST.MF"/>
+  </target>
+
 </project>