You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2011/01/21 20:58:21 UTC

svn commit: r1061987 - /mahout/trunk/core/src/main/java/org/apache/mahout/driver/MahoutDriver.java

Author: srowen
Date: Fri Jan 21 19:58:21 2011
New Revision: 1061987

URL: http://svn.apache.org/viewvc?rev=1061987&view=rev
Log:
MAHOUT-566 Possible fix; clean up the flow a little bit and make sure that empty args in .props file like "f|foo=", which are useful as booleans, result in "--foo" with no empty arg following

Modified:
    mahout/trunk/core/src/main/java/org/apache/mahout/driver/MahoutDriver.java

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/driver/MahoutDriver.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/driver/MahoutDriver.java?rev=1061987&r1=1061986&r2=1061987&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/driver/MahoutDriver.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/driver/MahoutDriver.java Fri Jan 21 19:58:21 2011
@@ -30,7 +30,6 @@ import org.apache.hadoop.util.ProgramDri
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * General-purpose driver class for Mahout programs.  Utilizes org.apache.hadoop.util.ProgramDriver to run
  * main methods of other classes, but first loads up default properties from a properties file.
@@ -92,6 +91,7 @@ public final class MahoutDriver {
   }
 
   public static void main(String[] args) throws Throwable {
+
     ProgramDriver programDriver = new ProgramDriver();
 
     Properties mainClasses = loadProperties("driver.classes.props");
@@ -110,9 +110,11 @@ public final class MahoutDriver {
       }
       addClass(programDriver, keyString, mainClasses.getProperty(keyString));
     }
+
     if (args.length < 1 || args[0] == null || args[0].equals("-h") || args[0].equals("--help")) {
       programDriver.driver(args);
     }
+
     String progName = args[0];
     if (!foundShortName) {
       addClass(programDriver, progName, progName);
@@ -124,13 +126,14 @@ public final class MahoutDriver {
       log.warn("No " + progName + ".props found on classpath, will use command-line arguments only");
       mainProps = new Properties();
     }
+
     Map<String,String[]> argMap = new HashMap<String,String[]>();
     int i = 0;
     while (i < args.length && args[i] != null) {
       List<String> argValues = new ArrayList<String>();
       String arg = args[i];
       i++;
-      if (arg.length() > 2 && arg.charAt(1) == 'D') { // '-Dkey=value' or '-Dkey=value1,value2,etc' case
+      if (arg.startsWith("-D")) { // '-Dkey=value' or '-Dkey=value1,value2,etc' case
         String[] argSplit = arg.split("=");
         arg = argSplit[0];
         if (argSplit.length == 2) {
@@ -138,16 +141,17 @@ public final class MahoutDriver {
         }
       } else {                                      // '-key [values]' or '--key [values]' case.
         while (i < args.length && args[i] != null) {
-          if (args[i].length() > 0 && args[i].charAt(0) != '-') {
-            argValues.add(args[i]);
-            i++;
-          } else {
+          if (args[i].startsWith("-")) {
             break;
           }
+          argValues.add(args[i]);
+          i++;
         }
       }
       argMap.put(arg, argValues.toArray(new String[argValues.size()]));
     }
+
+    // Add properties from the .props file that are not overridden on the command line
     for (String key : mainProps.stringPropertyNames()) {
       String[] argNamePair = key.split("\\|");
       String shortArg = '-' + argNamePair[0].trim();
@@ -156,25 +160,34 @@ public final class MahoutDriver {
         argMap.put(longArg, new String[] {mainProps.getProperty(key)});
       }
     }
+
+    // Now add command-line args
     List<String> argsList = new ArrayList<String>();
     argsList.add(progName);
-    for (String arg : argMap.keySet()) {
+    for (Map.Entry<String,String[]> entry : argMap.entrySet()) {
+      String arg = entry.getKey();
       if (arg.startsWith("-D")) { // arg is -Dkey - if value for this !isEmpty(), then arg -> -Dkey + "=" + value
-        if (argMap.get(arg).length > 0 && !argMap.get(arg)[0].trim().isEmpty()) {
-          arg += '=' + argMap.get(arg)[0].trim();
+        String[] argValues = entry.getValue();
+        if (argValues.length > 0 && !argValues[0].trim().isEmpty()) {
+          arg += '=' + argValues[0].trim();
         }
         argsList.add(1, arg);
-      }
-      else {
+      } else {
         argsList.add(arg);
-        argsList.addAll(Arrays.asList(argMap.get(arg)));
+        for (String argValue : Arrays.asList(argMap.get(arg))) {
+          if (argValue.length() > 0) {
+            argsList.add(argValue);
+          }
+        }
       }
     }
+
     long start = System.currentTimeMillis();
+
     programDriver.driver(argsList.toArray(new String[argsList.size()]));
-    long finish = System.currentTimeMillis();
+
     if (log.isInfoEnabled()) {
-      log.info("Program took {} ms", (finish - start));
+      log.info("Program took {} ms", System.currentTimeMillis() - start);
     }
   }