You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by um...@apache.org on 2002/11/21 22:47:53 UTC
cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs Jar.java Zip.java
umagesh 2002/11/21 13:47:53
Modified: . WHATSNEW
docs/manual/CoreTasks jar.html
src/main/org/apache/tools/ant/taskdefs Jar.java Zip.java
Log:
The filesetmanifest attribute of <jar> has been reenabled.
PR: 13296
Submitted by: bdeitte@macromedia.com (Brian Deitte)
Revision Changes Path
1.326 +2 -0 jakarta-ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
retrieving revision 1.325
retrieving revision 1.326
diff -u -r1.325 -r1.326
--- WHATSNEW 21 Nov 2002 21:35:40 -0000 1.325
+++ WHATSNEW 21 Nov 2002 21:47:52 -0000 1.326
@@ -61,6 +61,8 @@
Other changes:
--------------
+* The filesetmanifest attribute of <jar> has been reenabled.
+
* The start and end tokens for <translate> may now be longer than a
single character.
1.20 +6 -0 jakarta-ant/docs/manual/CoreTasks/jar.html
Index: jar.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/manual/CoreTasks/jar.html,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- jar.html 9 Jul 2002 21:05:51 -0000 1.19
+++ jar.html 21 Nov 2002 21:47:52 -0000 1.20
@@ -120,6 +120,12 @@
<td valign="top" align="center">No</td>
</tr>
<tr>
+ <td valign="top">filesetmanifest</td>
+ <td valign="top">behavior when a Manifest is found in a zipfileset or zipgroupfileset file is found. Valid values are "skip", "merge", and "mergewithoutmain". "merge" will merge all of the manifests together, and merge this into any other specified manifests. "mergewithoutmain" merges everything but the Main section of the manifests. Default value is "skip".
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
<td valign="top">update</td>
<td valign="top">indicates whether to update or overwrite
the destination file if it already exists.</td>
1.57 +22 -20 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.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- Jar.java 23 Oct 2002 09:34:05 -0000 1.56
+++ Jar.java 21 Nov 2002 21:47:52 -0000 1.57
@@ -103,11 +103,6 @@
private FilesetManifestConfig filesetManifestConfig;
/**
- * Whether to create manifest file on finalizeOutputStream?
- */
- private boolean manifestOnFinalize = true;
-
- /**
* whether to merge the main section of fileset manifests;
* value is true if filesetmanifest is 'merge'
*/
@@ -243,12 +238,16 @@
*
* @param config setting for found manifest behavior.
*/
- /*
public void setFilesetmanifest(FilesetManifestConfig config) {
filesetManifestConfig = config;
mergeManifestsMain = "merge".equals(config.getValue());
+
+ if (filesetManifestConfig != null
+ && ! filesetManifestConfig.getValue().equals("skip")) {
+
+ doubleFilePass = true;
+ }
}
- */
/**
* Adds a zipfileset to include in the META-INF directory.
@@ -263,16 +262,15 @@
protected void initZipOutputStream(ZipOutputStream zOut)
throws IOException, BuildException {
- if (filesetManifestConfig == null
- || filesetManifestConfig.getValue().equals("skip")) {
- manifestOnFinalize = false;
+
+ if (! skipWriting) {
Manifest jarManifest = createManifest();
writeManifest(zOut, jarManifest);
}
}
private Manifest createManifest()
- throws IOException, BuildException {
+ throws BuildException {
try {
Manifest finalManifest = Manifest.getDefaultManifest();
@@ -332,10 +330,6 @@
protected void finalizeZipOutputStream(ZipOutputStream zOut)
throws IOException, BuildException {
- if (manifestOnFinalize) {
- Manifest jarManifest = createManifest();
- writeManifest(zOut, jarManifest);
- }
if (index) {
createIndexList(zOut);
@@ -402,7 +396,9 @@
protected void zipFile(File file, ZipOutputStream zOut, String vPath)
throws IOException {
if ("META-INF/MANIFEST.MF".equalsIgnoreCase(vPath)) {
- filesetManifest(file, null);
+ if (! doubleFilePass || (doubleFilePass && skipWriting)) {
+ filesetManifest(file, null);
+ }
} else {
super.zipFile(file, zOut, vPath);
}
@@ -415,7 +411,9 @@
long lastModified, File file)
throws IOException {
if ("META-INF/MANIFEST.MF".equalsIgnoreCase(vPath)) {
- filesetManifest(file, is);
+ if (! doubleFilePass || (doubleFilePass && skipWriting)) {
+ filesetManifest(file, is);
+ }
} else {
super.zipFile(is, zOut, vPath, lastModified, null);
}
@@ -539,9 +537,13 @@
protected void cleanUp() {
super.cleanUp();
- manifest = null;
- configuredManifest = savedConfiguredManifest;
- filesetManifest = null;
+ // we want to save this info if we are going to make another pass
+ if (! doubleFilePass || (doubleFilePass && ! skipWriting))
+ {
+ manifest = null;
+ configuredManifest = savedConfiguredManifest;
+ filesetManifest = null;
+ }
}
/**
1.84 +89 -67 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Zip.java
Index: Zip.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Zip.java,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -r1.83 -r1.84
--- Zip.java 25 Jul 2002 15:21:06 -0000 1.83
+++ Zip.java 21 Nov 2002 21:47:53 -0000 1.84
@@ -115,6 +115,10 @@
protected Hashtable addedDirs = new Hashtable();
private Vector addedFiles = new Vector();
+ protected boolean doubleFilePass = false;
+ protected boolean skipWriting = false;
+
+
/**
* true when we are adding new files into the Zip file, as opposed
* to adding back the unchanged files
@@ -272,6 +276,20 @@
* validate and build
*/
public void execute() throws BuildException {
+
+ if (doubleFilePass) {
+ skipWriting = true;
+ executeMain();
+ skipWriting = false;
+ executeMain();
+ }
+ else {
+ executeMain();
+ }
+ }
+
+ public void executeMain() throws BuildException {
+
if (baseDir == null && filesets.size() == 0
&& groupfilesets.size() == 0 && "zip".equals(archiveType)) {
throw new BuildException("basedir attribute must be set, "
@@ -690,21 +708,23 @@
log("adding directory " + vPath, Project.MSG_VERBOSE);
addedDirs.put(vPath, vPath);
- ZipEntry ze = new ZipEntry (vPath);
- if (dir != null && dir.exists()) {
- ze.setTime(dir.lastModified());
- } else {
- ze.setTime(System.currentTimeMillis());
- }
- ze.setSize (0);
- ze.setMethod (ZipEntry.STORED);
- // This is faintly ridiculous:
- ze.setCrc (EMPTY_CRC);
+ if (! skipWriting) {
+ ZipEntry ze = new ZipEntry (vPath);
+ if (dir != null && dir.exists()) {
+ ze.setTime(dir.lastModified());
+ } else {
+ ze.setTime(System.currentTimeMillis());
+ }
+ ze.setSize (0);
+ ze.setMethod (ZipEntry.STORED);
+ // This is faintly ridiculous:
+ ze.setCrc (EMPTY_CRC);
- // this is 040775 | MS-DOS directory flag in reverse byte order
- ze.setExternalAttributes(0x41FD0010L);
+ // this is 040775 | MS-DOS directory flag in reverse byte order
+ ze.setExternalAttributes(0x41FD0010L);
- zOut.putNextEntry (ze);
+ zOut.putNextEntry (ze);
+ }
}
protected void zipFile(InputStream in, ZipOutputStream zOut, String vPath,
@@ -730,61 +750,63 @@
entries.put(vPath, vPath);
- ZipEntry ze = new ZipEntry(vPath);
- ze.setTime(lastModified);
+ if (! skipWriting) {
+ ZipEntry ze = new ZipEntry(vPath);
+ ze.setTime(lastModified);
+
+ /*
+ * XXX ZipOutputStream.putEntry expects the ZipEntry to know its
+ * size and the CRC sum before you start writing the data when using
+ * STORED mode.
+ *
+ * This forces us to process the data twice.
+ *
+ * I couldn't find any documentation on this, just found out by try
+ * and error.
+ */
+ if (!doCompress) {
+ long size = 0;
+ CRC32 cal = new CRC32();
+ if (!in.markSupported()) {
+ // Store data into a byte[]
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+
+ byte[] buffer = new byte[8 * 1024];
+ int count = 0;
+ do {
+ size += count;
+ cal.update(buffer, 0, count);
+ bos.write(buffer, 0, count);
+ count = in.read(buffer, 0, buffer.length);
+ } while (count != -1);
+ in = new ByteArrayInputStream(bos.toByteArray());
- /*
- * XXX ZipOutputStream.putEntry expects the ZipEntry to know its
- * size and the CRC sum before you start writing the data when using
- * STORED mode.
- *
- * This forces us to process the data twice.
- *
- * I couldn't find any documentation on this, just found out by try
- * and error.
- */
- if (!doCompress) {
- long size = 0;
- CRC32 cal = new CRC32();
- if (!in.markSupported()) {
- // Store data into a byte[]
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
- byte[] buffer = new byte[8 * 1024];
- int count = 0;
- do {
- size += count;
- cal.update(buffer, 0, count);
- bos.write(buffer, 0, count);
- count = in.read(buffer, 0, buffer.length);
- } while (count != -1);
- in = new ByteArrayInputStream(bos.toByteArray());
-
- } else {
- in.mark(Integer.MAX_VALUE);
- byte[] buffer = new byte[8 * 1024];
- int count = 0;
- do {
- size += count;
- cal.update(buffer, 0, count);
- count = in.read(buffer, 0, buffer.length);
- } while (count != -1);
- in.reset();
- }
- ze.setSize(size);
- ze.setCrc(cal.getValue());
- }
-
- zOut.putNextEntry(ze);
-
- byte[] buffer = new byte[8 * 1024];
- int count = 0;
- do {
- if (count != 0) {
- zOut.write(buffer, 0, count);
- }
- count = in.read(buffer, 0, buffer.length);
- } while (count != -1);
+ } else {
+ in.mark(Integer.MAX_VALUE);
+ byte[] buffer = new byte[8 * 1024];
+ int count = 0;
+ do {
+ size += count;
+ cal.update(buffer, 0, count);
+ count = in.read(buffer, 0, buffer.length);
+ } while (count != -1);
+ in.reset();
+ }
+ ze.setSize(size);
+ ze.setCrc(cal.getValue());
+ }
+
+ zOut.putNextEntry(ze);
+
+ byte[] buffer = new byte[8 * 1024];
+ int count = 0;
+ do {
+ if (count != 0) {
+ zOut.write(buffer, 0, count);
+ }
+ count = in.read(buffer, 0, buffer.length);
+ } while (count != -1);
+ }
addedFiles.addElement(vPath);
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>