You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2010/10/06 01:01:34 UTC
svn commit: r1004851 - in /commons/proper/exec/trunk/src: changes/
main/java/org/apache/commons/exec/environment/
main/java/org/apache/commons/exec/launcher/ test/scripts/
Author: sebb
Date: Tue Oct 5 23:01:33 2010
New Revision: 1004851
URL: http://svn.apache.org/viewvc?rev=1004851&view=rev
Log:
Fix up OpenVMS implementation to use symbols rather than logicals.
Seems more in keeping with other OSes, and environment updates work better.
Modified:
commons/proper/exec/trunk/src/changes/changes.xml
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
commons/proper/exec/trunk/src/test/scripts/environment.dcl
commons/proper/exec/trunk/src/test/scripts/test.dcl
Modified: commons/proper/exec/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/changes/changes.xml?rev=1004851&r1=1004850&r2=1004851&view=diff
==============================================================================
--- commons/proper/exec/trunk/src/changes/changes.xml (original)
+++ commons/proper/exec/trunk/src/changes/changes.xml Tue Oct 5 23:01:33 2010
@@ -24,6 +24,9 @@
</properties>
<body>
<release version="1.1-SNAPSHOT" date="as in SVN" description="Maintenance Release">
+ <action dev="sebb" type="fix" date="2010-10-05" >
+ OpenVMS now uses symbols instead of logicals for environment variables.
+ </action>
<action dev="sgoeschl" type="add" date="2010-09-21" >
Adding 'Argument' class and quote the arguments after expansion.
</action>
Modified: commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java?rev=1004851&r1=1004850&r2=1004851&view=diff
==============================================================================
--- commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java (original)
+++ commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java Tue Oct 5 23:01:33 2010
@@ -20,7 +20,6 @@ package org.apache.commons.exec.environm
import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import org.apache.commons.exec.CommandLine;
@@ -34,17 +33,13 @@ public class OpenVmsProcessingEnvironmen
/**
* Find the list of environment variables for this process.
*
- * @return a amp containing the environment variables
+ * @return a map containing the environment variables
* @throws IOException the operation failed
*/
protected Map createProcEnvironment() throws IOException {
if (procEnvironment == null) {
- procEnvironment = new HashMap();
-
BufferedReader in = runProcEnvCommand();
-
- procEnvironment = addVMSLogicals(procEnvironment, in);
- return procEnvironment;
+ procEnvironment = addVMSenvironmentVariables(new HashMap(), in);
}
return procEnvironment;
@@ -58,61 +53,34 @@ public class OpenVmsProcessingEnvironmen
*/
protected CommandLine getProcEnvCommand() {
CommandLine commandLine = new CommandLine("show");
- commandLine.addArgument("logical");
+ commandLine.addArgument("symbol/global"); // the parser assumes symbols are global
+ commandLine.addArgument("*");
return commandLine;
}
/**
* 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 (,).
+ * symbols from <code>in</code> and adds them to <code>environment</code>.
+ * <code>in</code> is expected to be the output of "SHOW SYMBOL/GLOBAL *".
*
* @param environment the current environment
* @param in the reader from the process to determine VMS env variables
* @return the updated environment
* @throws IOException operation failed
*/
- private Map addVMSLogicals(final Map environment,
+ private Map addVMSenvironmentVariables(final Map environment,
final BufferedReader in) throws IOException {
String line;
- HashMap logicals = new HashMap();
- String logName = null, logValue = null, newLogName;
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);
- }
+ final String SEP = "=="; // global symbol separator
+ int sepidx = line.indexOf(SEP);
+ if (sepidx > 0){
+ String name = line.substring(0, sepidx).trim();
+ String value = line.substring(sepidx+SEP.length()).trim();
+ value = value.substring(1,value.length()-1); // drop enclosing quotes
+ environment.put(name,value);
}
}
- // Since we "look ahead" before adding, there's one last env var.
- if (logName != null) {
- logicals.put(logName, logValue);
- }
-
- for (Iterator i = logicals.entrySet().iterator(); i.hasNext();) {
- String logical = (String) ((Map.Entry) i.next()).getKey();
- environment.put(logical, logicals.get(logical));
- }
return environment;
}
}
Modified: commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java?rev=1004851&r1=1004850&r2=1004851&view=diff
==============================================================================
--- commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java (original)
+++ commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java Tue Oct 5 23:01:33 2010
@@ -83,16 +83,30 @@ public class VmsCommandLauncher extends
try {
out = new PrintWriter(new FileWriter(script.getAbsolutePath(),true));
- // add the environment as logicals to the DCL script
+ // add the environment as global symbols for the DCL script
if (env != null) {
Set entries = env.entrySet();
for (Iterator iter = entries.iterator(); iter.hasNext();) {
Entry entry = (Entry) iter.next();
- out.print("$ DEFINE/NOLOG ");
+ out.print("$ ");
out.print(entry.getKey());
- out.print(" \"");
- out.print(entry.getValue());
+ out.print(" == "); // define as global symbol
+ out.println('\"');
+ String value = (String) entry.getValue();
+ // Any embedded " values need to be doubled
+ if (value.indexOf('\"') > 0){
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ if (c == '\"') {
+ sb.append('\"');
+ }
+ sb.append(c);
+ }
+ value=sb.toString();
+ }
+ out.print(value);
out.println('\"');
}
}
Modified: commons/proper/exec/trunk/src/test/scripts/environment.dcl
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/scripts/environment.dcl?rev=1004851&r1=1004850&r2=1004851&view=diff
==============================================================================
--- commons/proper/exec/trunk/src/test/scripts/environment.dcl (original)
+++ commons/proper/exec/trunk/src/test/scripts/environment.dcl Tue Oct 5 23:01:33 2010
@@ -19,4 +19,4 @@ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$!
$! print the "environment" variables
$!
-$ show logical
\ No newline at end of file
+$ show symbol *
\ No newline at end of file
Modified: commons/proper/exec/trunk/src/test/scripts/test.dcl
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/scripts/test.dcl?rev=1004851&r1=1004850&r2=1004851&view=diff
==============================================================================
--- commons/proper/exec/trunk/src/test/scripts/test.dcl (original)
+++ commons/proper/exec/trunk/src/test/scripts/test.dcl Tue Oct 5 23:01:33 2010
@@ -20,7 +20,6 @@ $!
$! print the given environment variable and command line parameter
$! since this is verified by the regression test
$!
-$ ENV_VAR=f$trnlnm("TEST_ENV_VAR")
-$ write sys$output "FOO.''ENV_VAR'.''P1'"
+$ write sys$output "FOO.''TEST_ENV_VAR'.''P1'"
$!
$ exit 1 ! normal exit
\ No newline at end of file