bodewig 2003/07/25 07:06:36
Modified: docs/manual/CoreTasks property.html
src/main/org/apache/tools/ant/taskdefs Execute.java
Log:
Add support for OpenVMS logicals as "environment variables".
Submitted by: Knut Wannheden <knut dot wannheden at paranor dot ch>
Revision Changes Path
1.16 +10 -0 ant/docs/manual/CoreTasks/property.html
Index: property.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTasks/property.html,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- property.html 18 Jun 2003 08:10:21 -0000 1.15
+++ property.html 25 Jul 2003 14:06:35 -0000 1.16
@@ -38,6 +38,16 @@
This also holds for properties loaded from a property file.</p>
<p>A list of predefined properties can be found <a
href="../using.html#built-in-props">here</a>.</p>
+
+<h4>OpenVMS Users</h4>
+<p>With the <code>environment</code> attribute this task will load all
defined
+logicals on an OpenVMS system. Logicals with multiple equivalence names get
+mapped to a property whose value is a comma separated list of all equivalence
+names. If a logical is defined in multiple tables, only the most local
+definition is available (the table priority order being PROCESS, JOB, GROUP,
+SYSTEM).
+</p>
+
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
1.60 +60 -1 ant/src/main/org/apache/tools/ant/taskdefs/Execute.java
Index: Execute.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Execute.java,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- Execute.java 25 Jul 2003 12:14:42 -0000 1.59
+++ Execute.java 25 Jul 2003 14:06:36 -0000 1.60
@@ -63,6 +63,8 @@
import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.Vector;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -192,6 +194,11 @@
BufferedReader in =
new BufferedReader(new StringReader(toString(out)));
+ if (Os.isFamily("openvms")) {
+ procEnvironment = addVMSLogicals(procEnvironment, in);
+ return procEnvironment;
+ }
+
String var = null;
String line, lineSep = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
@@ -585,6 +592,58 @@
throw new BuildException("Could not launch " + cmdline[0] + ": "
+ exc, task.getLocation());
}
+ }
+
+ /**
+ * This method is VMS specific and used by getProcEnvironment().
+ *
+ * Parses VMS logicals from <code>in</code> and adds them to
+ * <code>environment</code>. <code>in</code> is expected to be the
+ * output of "SHOW LOGICAL". The method takes care of parsing the output
+ * correctly as well as making sure that a logical defined in multiple
+ * tables only gets added from the highest order table. Logicals with
+ * multiple equivalence names are mapped to a variable with multiple
+ * values separated by a comma (,).
+ */
+ private static Vector addVMSLogicals(Vector environment, BufferedReader
in)
+ throws IOException {
+ HashMap logicals = new HashMap();
+
+ String logName = null, logValue = null, newLogName;
+ String line, lineSep = System.getProperty("line.separator");
+ while ((line = in.readLine()) != null) {
+ // parse the VMS logicals into required format ("VAR=VAL[,VAL2]")
+ if (line.startsWith("\t=")) {
+ // further equivalence name of previous logical
+ if (logName != null) {
+ logValue += "," + line.substring(4, line.length() - 1);
+ }
+ } else if (line.startsWith(" \"")) {
+ // new logical?
+ if (logName != null) {
+ logicals.put(logName, logValue);
+ }
+ int eqIndex = line.indexOf('=');
+ newLogName = line.substring(3, eqIndex - 2);
+ if (logicals.containsKey(newLogName)) {
+ // already got this logical from a higher order table
+ logName = null;
+ } else {
+ logName = newLogName;
+ logValue = line.substring(eqIndex + 3, line.length() -
1);
+ }
+ }
+ }
+ // Since we "look ahead" before adding, there's one last env var.
+ if (logName != null) {
+ logicals.put(logName, logValue);
+ }
+
+ for (Iterator i = logicals.keySet().iterator(); i.hasNext();) {
+ String logical = (String) i.next();
+ environment.add(logical + "=" + logicals.get(logical));
+ }
+ return environment;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]