as well. Added -debug and Project.MSG_DEBUG to make -verbose less verbose. Many messages really rather belong into a DEBUG category. Submitted by: Jason Dillon <jason@planet57.com> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268009 13f79535-47bb-0310-9956-ffa450edef68master
@@ -79,6 +79,12 @@ on log output. | |||
* project specific help can now be obtained with the -projecthelp option. | |||
* Added a -debug option to make -verbose less verbose (and more useful) | |||
* Ant will now search for a file named build.xml in the parent directory | |||
and above (towards the root of the filesystem) if you didn't specify | |||
-buildfile and there is no build.xml in the current directory. | |||
Fixed bugs: | |||
----------- | |||
@@ -25,7 +25,7 @@ | |||
<li>Dave Walend (<a href="mailto:dwalend@cs.tufts.edu">dwalend@cs.tufts.edu</a>)</li> | |||
</ul> | |||
<p>Version 1.2 - 2000/09/15</p> | |||
<p>Version 1.2 - 2000/09/19</p> | |||
<hr> | |||
<h2>Table of Contents</h2> | |||
@@ -166,10 +166,13 @@ shell script necessary to run execs on Unix.</p> | |||
<h2><a name="running">Running Ant</a></h2> | |||
<p>Running Ant is simple, when you installed it as described in the previous | |||
section. Just type <code>ant</code>.</p> | |||
<p>When nothing is specified, Ant looks for a <code>build.xml</code> file in the | |||
current directory. When found, it uses that file as a buildfile. To make Ant use | |||
another buildfile, use the commandline option <i>-buildfile <file></i>, | |||
where <i><file></i> is the buildfile you want to use.</p> | |||
<p>When nothing is specified, Ant looks for a <code>build.xml</code> | |||
file in the current directory. When found, it uses that file as a | |||
buildfile, otherwise it searches in the parent directory and so on | |||
until the root of the filesystem has been reached. To make Ant use | |||
another buildfile, use the commandline option <i>-buildfile | |||
<file></i>, where <i><file></i> is the buildfile you want | |||
to use.</p> | |||
<p>You can also set properties which override properties specified in the | |||
buildfile (see the <a href="#property">property task</a>). | |||
This can be done with the <i>-D<property>=<value></i> | |||
@@ -192,6 +195,7 @@ Options: | |||
-version print the version information and exit | |||
-quiet be extra quiet | |||
-verbose be extra verbose | |||
-debug print debugging information | |||
-emacs produce logging information without adornments | |||
-logfile <file> use given file for log | |||
-logger <classname> the class which is to perform logging | |||
@@ -72,11 +72,14 @@ import java.util.*; | |||
public class Main { | |||
/** The default build file name */ | |||
public static final String DEFAULT_BUILD_FILENAME = "build.xml"; | |||
/** Our current message output status. Follows Project.MSG_XXX */ | |||
private int msgOutputLevel = Project.MSG_INFO; | |||
/** File that we are using for configuration */ | |||
private File buildFile = new File("build.xml"); | |||
private File buildFile; /** null */ | |||
/** Stream that we are using for logging */ | |||
private PrintStream out = System.out; | |||
@@ -128,6 +131,7 @@ public class Main { | |||
System.exit(0); | |||
} | |||
catch(Throwable exc) { | |||
System.err.println(exc.getMessage()); | |||
System.exit(1); | |||
} | |||
} | |||
@@ -150,6 +154,9 @@ public class Main { | |||
} else if (arg.equals("-verbose") || arg.equals("-v")) { | |||
printVersion(); | |||
msgOutputLevel = Project.MSG_VERBOSE; | |||
} else if (arg.equals("-debug")) { | |||
printVersion(); | |||
msgOutputLevel = Project.MSG_DEBUG; | |||
} else if (arg.equals("-logfile") || arg.equals("-l")) { | |||
try { | |||
File logFile = new File(args[i+1]); | |||
@@ -236,8 +243,13 @@ public class Main { | |||
} | |||
// make sure buildfile exists | |||
// if buildFile was not specified on the command line, | |||
// then search for it | |||
if (buildFile == null) { | |||
buildFile = findBuildFile(DEFAULT_BUILD_FILENAME); | |||
} | |||
// make sure buildfile exists | |||
if (!buildFile.exists()) { | |||
System.out.println("Buildfile: " + buildFile + " does not exist!"); | |||
throw new BuildException("Build failed"); | |||
@@ -254,6 +266,77 @@ public class Main { | |||
readyToRun = true; | |||
} | |||
/** | |||
* Helper to get the parent file for a given filename. | |||
* | |||
* <P>Added to simulate File.getParentFile() from JDK 1.2. | |||
* | |||
* @param filename File name | |||
* @return Parent file or null if none | |||
*/ | |||
private File getParentFile(String filename) { | |||
return getParentFile(new File(filename)); | |||
} | |||
/** | |||
* Helper to get the parent file for a given file. | |||
* | |||
* <P>Added to simulate File.getParentFile() from JDK 1.2. | |||
* | |||
* @param file File | |||
* @return Parent file or null if none | |||
*/ | |||
private File getParentFile(File file) { | |||
String filename = file.getAbsolutePath(); | |||
file = new File(filename); | |||
filename = file.getParent(); | |||
if (filename != null && msgOutputLevel >= Project.MSG_VERBOSE) { | |||
System.out.println("Searching in "+filename); | |||
} | |||
return (filename == null) ? null : new File(filename); | |||
} | |||
/** | |||
* Search parent directories for the build file. | |||
* | |||
* <P>Takes the given target as a suffix to append to each | |||
* parent directory in seach of a build file. Once the | |||
* root of the file-system has been reached an exception | |||
* is thrown. | |||
* | |||
* @param suffix Suffix filename to look for in parents. | |||
* @return A handle to the build file | |||
* | |||
* @exception BuildException Failed to locate a build file | |||
*/ | |||
private File findBuildFile(String suffix) throws BuildException { | |||
if (msgOutputLevel >= Project.MSG_INFO) { | |||
System.out.println("Searching for " + suffix + " ..."); | |||
} | |||
File parent = getParentFile(suffix); | |||
File file = new File(parent, suffix); | |||
// check if the target file exists in the current directory | |||
while (!file.exists()) { | |||
// change to parent directory | |||
parent = getParentFile(parent); | |||
// if parent is null, then we are at the root of the fs, | |||
// complain that we can't find the build file. | |||
if (parent == null) { | |||
throw new BuildException("Could not locate a build file!"); | |||
} | |||
// refresh our file handle | |||
file = new File(parent, suffix); | |||
} | |||
return file; | |||
} | |||
/** | |||
* Executes the build. | |||
*/ | |||
@@ -390,6 +473,7 @@ public class Main { | |||
msg.append(" -version print the version information and exit" + lSep); | |||
msg.append(" -quiet be extra quiet" + lSep); | |||
msg.append(" -verbose be extra verbose" + lSep); | |||
msg.append(" -debug print debugging information" + lSep); | |||
msg.append(" -emacs produce logging information without adornments" + lSep); | |||
msg.append(" -logfile <file> use given file for log" + lSep); | |||
msg.append(" -logger <classname> the class which is to perform logging" + lSep); | |||
@@ -76,6 +76,7 @@ public class Project { | |||
public static final int MSG_WARN = 1; | |||
public static final int MSG_INFO = 2; | |||
public static final int MSG_VERBOSE = 3; | |||
public static final int MSG_DEBUG = 4; | |||
// private set of constants to represent the state | |||
// of a DFS of the Target dependencies | |||
@@ -238,13 +239,13 @@ public class Project { | |||
if (null != userProperties.get(name)) | |||
return; | |||
log("Setting project property: " + name + " -> " + | |||
value, MSG_VERBOSE); | |||
value, MSG_DEBUG); | |||
properties.put(name, value); | |||
} | |||
public void setUserProperty(String name, String value) { | |||
log("Setting ro project property: " + name + " -> " + | |||
value, MSG_VERBOSE); | |||
value, MSG_DEBUG); | |||
userProperties.put(name, value); | |||
properties.put(name, value); | |||
} | |||
@@ -294,7 +295,7 @@ public class Project { | |||
public void addFilter(String token, String value) { | |||
if (token == null) return; | |||
log("Setting token to filter: " + token + " -> " | |||
+ value, MSG_VERBOSE); | |||
+ value, MSG_DEBUG); | |||
this.filters.put(token, value); | |||
} | |||
@@ -350,7 +351,7 @@ public class Project { | |||
public void addTaskDefinition(String taskName, Class taskClass) { | |||
String msg = " +User task: " + taskName + " " + taskClass.getName(); | |||
log(msg, MSG_VERBOSE); | |||
log(msg, MSG_DEBUG); | |||
taskClassDefinitions.put(taskName, taskClass); | |||
} | |||
@@ -360,7 +361,7 @@ public class Project { | |||
public void addDataTypeDefinition(String typeName, Class typeClass) { | |||
String msg = " +User datatype: " + typeName + " " + typeClass.getName(); | |||
log(msg, MSG_VERBOSE); | |||
log(msg, MSG_DEBUG); | |||
dataClassDefinitions.put(typeName, typeClass); | |||
} | |||
@@ -416,7 +417,7 @@ public class Project { | |||
*/ | |||
public void addOrReplaceTarget(String targetName, Target target) { | |||
String msg = " +Target: " + targetName; | |||
log(msg, MSG_VERBOSE); | |||
log(msg, MSG_DEBUG); | |||
target.setProject(this); | |||
targets.put(targetName, target); | |||
} | |||
@@ -449,7 +450,7 @@ public class Project { | |||
task.setTaskName(taskType); | |||
String msg = " +Task: " + taskType; | |||
log (msg, MSG_VERBOSE); | |||
log (msg, MSG_DEBUG); | |||
return task; | |||
} catch (Exception e) { | |||
String msg = "Could not create task of type: " | |||
@@ -484,7 +485,7 @@ public class Project { | |||
o = ctor.newInstance(new Object[] {this}); | |||
} | |||
String msg = " +DataType: " + typeName; | |||
log (msg, MSG_VERBOSE); | |||
log (msg, MSG_DEBUG); | |||
return o; | |||
} catch (java.lang.reflect.InvocationTargetException ite) { | |||
Throwable t = ite.getTargetException(); | |||