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 2008/11/03 17:40:42 UTC
svn commit: r710101 - in
/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs: Ear.java Jar.java
War.java Zip.java
Author: bodewig
Date: Mon Nov 3 08:40:42 2008
New Revision: 710101
URL: http://svn.apache.org/viewvc?rev=710101&view=rev
Log:
make sure log messages to get emmitted twice in double-pass mode. PR 39426.
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Ear.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Jar.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/War.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Ear.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Ear.java?rev=710101&r1=710100&r2=710101&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Ear.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Ear.java Mon Nov 3 08:40:42 2008
@@ -130,7 +130,7 @@
if (deploymentDescriptor != null
|| !FILE_UTILS.fileNameEquals(deploymentDescriptor, file)
|| descriptorAdded) {
- log("Warning: selected " + archiveType
+ logOnFirstPass("Warning: selected " + archiveType
+ " files include a " + XML_DESCRIPTOR_PATH + " which will"
+ " be ignored (please use appxml attribute to "
+ archiveType + " task)",
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=710101&r1=710100&r2=710101&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 Mon Nov 3 08:40:42 2008
@@ -632,11 +632,11 @@
long lastModified, File fromArchive, int mode)
throws IOException {
if (MANIFEST_NAME.equalsIgnoreCase(vPath)) {
- if (!doubleFilePass || skipWriting) {
+ if (isFirstPass()) {
filesetManifest(fromArchive, is);
}
} else if (INDEX_NAME.equalsIgnoreCase(vPath) && index) {
- log("Warning: selected " + archiveType
+ logOnFirstPass("Warning: selected " + archiveType
+ " files include a " + INDEX_NAME + " which will"
+ " be replaced by a newly generated one.", Project.MSG_WARN);
} else {
@@ -671,7 +671,7 @@
} else if (filesetManifestConfig != null
&& !filesetManifestConfig.getValue().equals("skip")) {
// we add this to our group of fileset manifests
- log("Found manifest to merge in file " + file,
+ logOnFirstPass("Found manifest to merge in file " + file,
Project.MSG_VERBOSE);
try {
@@ -754,13 +754,13 @@
try {
originalManifest = getManifestFromJar(zipFile);
if (originalManifest == null) {
- log("Updating jar since the current jar has no manifest",
+ logOnFirstPass("Updating jar since the current jar has no manifest",
Project.MSG_VERBOSE);
needsUpdate = true;
} else {
Manifest mf = createManifest();
if (!mf.equals(originalManifest)) {
- log("Updating jar since jar manifest has changed",
+ logOnFirstPass("Updating jar since jar manifest has changed",
Project.MSG_VERBOSE);
needsUpdate = true;
}
@@ -801,9 +801,11 @@
}
if (emptyBehavior.equals("skip")) {
+ if (!skipWriting) {
log("Warning: skipping " + archiveType + " archive "
+ zipFile + " because no files were included.",
Project.MSG_WARN);
+ }
return true;
} else if (emptyBehavior.equals("fail")) {
throw new BuildException("Cannot create " + archiveType
@@ -814,8 +816,10 @@
ZipOutputStream zOut = null;
try {
+ if (!skipWriting) {
log("Building MANIFEST-only jar: "
+ getDestFile().getAbsolutePath());
+ }
zOut = new ZipOutputStream(new FileOutputStream(getDestFile()));
zOut.setEncoding(getEncoding());
@@ -894,7 +898,7 @@
if (strict.getValue().equalsIgnoreCase("fail")) {
throw new BuildException(message.toString(), getLocation());
} else {
- log(message.toString(), strict.getLogLevel());
+ logOnFirstPass(message.toString(), strict.getLogLevel());
}
}
}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/War.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/War.java?rev=710101&r1=710100&r2=710101&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/War.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/War.java Mon Nov 3 08:40:42 2008
@@ -188,7 +188,7 @@
addFile = false;
//check to see if we warn or not
if (!FILE_UTILS.fileNameEquals(addedWebXmlFile, file)) {
- log("Warning: selected " + archiveType
+ logOnFirstPass("Warning: selected " + archiveType
+ " files include a second " + XML_DESCRIPTOR_PATH
+ " which will be ignored.\n"
+ "The duplicate entry is at " + file + '\n'
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java?rev=710101&r1=710100&r2=710101&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java Mon Nov 3 08:40:42 2008
@@ -93,9 +93,37 @@
protected Hashtable addedDirs = new Hashtable();
private Vector addedFiles = new Vector();
+ /**
+ * If this flag is true, execute() will run most operations twice,
+ * the first time with {@link #skipWriting skipWriting} set to
+ * true and the second time with setting it to false.
+ *
+ * <p>The only situation in Ant's current code base where this is
+ * ever going to be true is if the jar task has been configured
+ * with a filesetmanifest other than "skip".</p>
+ */
protected boolean doubleFilePass = false;
+ /**
+ * whether the methods should just perform some sort of dry-run.
+ *
+ * <p>Will only ever be true in the first pass if the task
+ * performs two passes because {@link #doubleFilePass
+ * doubleFilePass} is true.</p>
+ */
protected boolean skipWriting = false;
+ /**
+ * Whether this is the first time the archive building methods are invoked.
+ *
+ * @return true if either {@link #doubleFilePass doubleFilePass}
+ * is false or {@link #skipWriting skipWriting} is true.
+ *
+ * @since Ant 1.8.0
+ */
+ protected final boolean isFirstPass() {
+ return !doubleFilePass || skipWriting;
+ }
+
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
// CheckStyle:VisibilityModifier ON
@@ -502,7 +530,9 @@
String action = doUpdate ? "Updating " : "Building ";
- log(action + archiveType + ": " + zipFile.getAbsolutePath());
+ if (!skipWriting) {
+ log(action + archiveType + ": " + zipFile.getAbsolutePath());
+ }
ZipOutputStream zOut = null;
try {
@@ -673,7 +703,7 @@
// we don't need to update if the original file doesn't exist
if (doUpdate && !zipFile.exists()) {
doUpdate = false;
- log("ignoring update attribute as " + archiveType
+ logOnFirstPass("ignoring update attribute as " + archiveType
+ " doesn't exist.", Project.MSG_DEBUG);
}
}
@@ -683,14 +713,14 @@
// Add the files found in groupfileset to fileset
for (int i = 0; i < groupfilesets.size(); i++) {
- log("Processing groupfileset ", Project.MSG_VERBOSE);
+ logOnFirstPass("Processing groupfileset ", Project.MSG_VERBOSE);
FileSet fs = (FileSet) groupfilesets.elementAt(i);
FileScanner scanner = fs.getDirectoryScanner(getProject());
String[] files = scanner.getIncludedFiles();
File basedir = scanner.getBasedir();
for (int j = 0; j < files.length; j++) {
- log("Adding file " + files[j] + " to fileset",
+ logOnFirstPass("Adding file " + files[j] + " to fileset",
Project.MSG_VERBOSE);
ZipFileSet zf = new ZipFileSet();
zf.setProject(getProject());
@@ -958,8 +988,10 @@
// In this case using java.util.zip will not work
// because it does not permit a zero-entry archive.
// Must create it manually.
- log("Note: creating empty " + archiveType + " archive " + zipFile,
- Project.MSG_INFO);
+ if (!skipWriting) {
+ log("Note: creating empty " + archiveType + " archive " + zipFile,
+ Project.MSG_INFO);
+ }
OutputStream os = null;
try {
os = new FileOutputStream(zipFile);
@@ -1120,11 +1152,11 @@
if (emptyBehavior.equals("skip")) {
if (doUpdate) {
- log(archiveType + " archive " + zipFile
+ logOnFirstPass(archiveType + " archive " + zipFile
+ " not updated because no new files were included.",
Project.MSG_VERBOSE);
} else {
- log("Warning: skipping " + archiveType + " archive "
+ logOnFirstPass("Warning: skipping " + archiveType + " archive "
+ zipFile + " because no files were included.",
Project.MSG_WARN);
}
@@ -1425,7 +1457,7 @@
int mode, ZipExtraField[] extra)
throws IOException {
if (doFilesonly) {
- log("skipping directory " + vPath + " for file-only archive",
+ logOnFirstPass("skipping directory " + vPath + " for file-only archive",
Project.MSG_VERBOSE);
return;
}
@@ -1435,7 +1467,7 @@
return;
}
- log("adding directory " + vPath, Project.MSG_VERBOSE);
+ logOnFirstPass("adding directory " + vPath, Project.MSG_VERBOSE);
addedDirs.put(vPath, vPath);
if (!skipWriting) {
@@ -1483,7 +1515,7 @@
if (entries.contains(vPath)) {
if (duplicate.equals("preserve")) {
- log(vPath + " already added, skipping", Project.MSG_INFO);
+ logOnFirstPass(vPath + " already added, skipping", Project.MSG_INFO);
return;
} else if (duplicate.equals("fail")) {
throw new BuildException("Duplicate file " + vPath
@@ -1491,11 +1523,11 @@
+ "attribute is 'fail'.");
} else {
// duplicate equal to add, so we continue
- log("duplicate file " + vPath
+ logOnFirstPass("duplicate file " + vPath
+ " found, adding.", Project.MSG_VERBOSE);
}
} else {
- log("adding entry " + vPath, Project.MSG_VERBOSE);
+ logOnFirstPass("adding entry " + vPath, Project.MSG_VERBOSE);
}
entries.put(vPath, vPath);
@@ -1712,7 +1744,7 @@
if (!orig[i].isDirectory()) {
v.addElement(orig[i]);
} else {
- log("Ignoring directory " + orig[i].getName()
+ logOnFirstPass("Ignoring directory " + orig[i].getName()
+ " as only files will be added.", Project.MSG_VERBOSE);
}
}
@@ -1726,6 +1758,18 @@
}
/**
+ * Logs a message at the given output level, but only if this is
+ * the {@link #isFirstPass first pass}.
+ *
+ * @since Ant 1.8.0
+ */
+ protected void logOnFirstPass(String msg, int level) {
+ if (isFirstPass()) {
+ log(msg, level);
+ }
+ }
+
+ /**
* Possible behaviors when a duplicate file is added:
* "add", "preserve" or "fail"
*/