Index: src/main/org/apache/tools/ant/Main.java =================================================================== --- src/main/org/apache/tools/ant/Main.java (revision 904751) +++ src/main/org/apache/tools/ant/Main.java (working copy) @@ -18,13 +18,18 @@ package org.apache.tools.ant; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.PrintStream; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -345,8 +350,11 @@ throw new BuildException(msg); } } else if (arg.equals("-buildfile") || arg.equals("-file") - || arg.equals("-f")) { - i = handleArgBuildFile(args, i); + || arg.equals("-f")) { + i = handleArgBuildFile(args, i); + } else if (arg.equals("-buildurl") || arg.equals("-url") + || arg.equals("-u")) { + i = handleArgBuildURL(args, i); } else if (arg.equals("-listener")) { i = handleArgListener(args, i); } else if (arg.startsWith("-D")) { @@ -496,6 +504,39 @@ return pos; } + + /** Handle the -buildurl, -url, -u argument */ + private int handleArgBuildURL(String[] args, int pos) { + try { + URL url = new URL(args[++pos]); + + buildFile = File.createTempFile("ant", null); + buildFile.deleteOnExit(); + + // Download buildFile contents + + BufferedWriter out = new BufferedWriter(new FileWriter(buildFile)); + + BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); + String str; + while ((str = in.readLine()) != null) { + out.write(str); + out.write("\n"); + } + in.close(); + out.close(); + + } catch (ArrayIndexOutOfBoundsException aioobe) { + throw new BuildException( + "You must specify a buildfile when using the -buildfile argument"); + } catch (MalformedURLException e) { + throw new BuildException("Malformed URL provided - " + e.getMessage(), e); + } catch (IOException e) { + throw new BuildException("Could not do file operation - " + e.getMessage(), e); + } + return pos; + } + /** Handle -listener argument */ private int handleArgListener(String[] args, int pos) { try { @@ -947,6 +988,9 @@ msg.append(" -buildfile use given buildfile" + lSep); msg.append(" -file ''" + lSep); msg.append(" -f ''" + lSep); + msg.append(" -buildurl download and use buildfile from given url " + lSep); + msg.append(" -url ''" + lSep); + msg.append(" -u ''" + lSep); msg.append(" -D= use value for given property" + lSep); msg.append(" -keep-going, -k execute all targets that do not depend" + lSep); msg.append(" on failed target(s)" + lSep);