diff --git a/build.xml b/build.xml index 826366526..18f897505 100644 --- a/build.xml +++ b/build.xml @@ -842,6 +842,7 @@ @@ -922,7 +923,8 @@ - + diff --git a/src/etc/testcases/taskdefs/manifest.xml b/src/etc/testcases/taskdefs/manifest.xml index 148f05804..a4e320178 100644 --- a/src/etc/testcases/taskdefs/manifest.xml +++ b/src/etc/testcases/taskdefs/manifest.xml @@ -100,9 +100,25 @@ + + + + + + + + + + + + + + + + - + diff --git a/src/main/org/apache/tools/ant/taskdefs/Manifest.java b/src/main/org/apache/tools/ant/taskdefs/Manifest.java index 6864b4195..4ff51bb01 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Manifest.java +++ b/src/main/org/apache/tools/ant/taskdefs/Manifest.java @@ -544,6 +544,7 @@ public class Manifest extends Task { public Manifest() { mode = new Mode(); mode.setValue("replace"); + manifestVersion = null; } /** @@ -613,7 +614,9 @@ public class Manifest extends Task { * to the Manifest spec. */ public void merge(Manifest other) throws ManifestException { - manifestVersion = other.manifestVersion; + if (other.manifestVersion != null) { + manifestVersion = other.manifestVersion; + } mainSection.merge(other.mainSection); for (Enumeration e = other.sections.keys(); e.hasMoreElements();) { String sectionName = (String)e.nextElement(); diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java index 1eadbbe92..49937a466 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java @@ -55,6 +55,8 @@ package org.apache.tools.ant.taskdefs; import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.util.Date; import org.apache.tools.ant.BuildFileTest; @@ -192,5 +194,46 @@ public class ManifestTest extends BuildFileTest { executeTarget("test14"); } + /** + * file attribute for manifest task is required. + */ + public void testNoFile() { + expectBuildException("testNoFile", "file is required"); + } + /** + * replace changes Manifest-Version from 2.0 to 1.0 + */ + public void testReplace() throws IOException, ManifestException { + executeTarget("testReplace"); + Manifest mf = getManifest(); + assertNotNull(mf); + assertEquals(Manifest.getDefaultManifest(), mf); + } + + /** + * update keeps the Manifest-Version and adds a new attribute Foo + */ + public void testUpdate() throws IOException, ManifestException { + executeTarget("testUpdate"); + Manifest mf = getManifest(); + assertNotNull(mf); + assertTrue(!Manifest.getDefaultManifest().equals(mf)); + String mfAsString = mf.toString(); + assertNotNull(mfAsString); + assertTrue(mfAsString.startsWith("Manifest-Version: 2.0")); + assertTrue(mfAsString.indexOf("Foo: Bar") > -1); + } + + /** + * Reads mftest.mf. + */ + private Manifest getManifest() throws IOException, ManifestException { + FileReader r = new FileReader("src/etc/testcases/taskdefs/mftest.mf"); + try { + return new Manifest(r); + } finally { + r.close(); + } + } }