You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2008/06/13 17:08:57 UTC

svn commit: r667565 - in /commons/proper/cli/branches/cli-1.x/src: java/org/apache/commons/cli/CommandLine.java java/org/apache/commons/cli/Parser.java test/org/apache/commons/cli/BugsTest.java

Author: ebourg
Date: Fri Jun 13 08:08:56 2008
New Revision: 667565

URL: http://svn.apache.org/viewvc?rev=667565&view=rev
Log:
Restored the CLI 1.0 behavior regarding repeated options and the number of arguments per option (CLI-137)

Modified:
    commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/CommandLine.java
    commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/Parser.java
    commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/BugsTest.java

Modified: commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/CommandLine.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/CommandLine.java?rev=667565&r1=667564&r2=667565&view=diff
==============================================================================
--- commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/CommandLine.java (original)
+++ commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/CommandLine.java Fri Jun 13 08:08:56 2008
@@ -17,12 +17,11 @@
 package org.apache.commons.cli;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Set;
-import java.util.HashSet;
 
 /** 
  * <p>Represents list of arguments parsed against
@@ -47,7 +46,7 @@
     private List args = new LinkedList();
 
     /** the processed options */
-    private Set options = new HashSet();
+    private List options = new ArrayList();
 
     /** Map of unique options for ease to get complete list of options */
 //    private Set allOptions = new HashSet();
@@ -149,15 +148,19 @@
      */
     public String[] getOptionValues(String opt)
     {
-        Option key = resolveOption( opt );
+        List values = new ArrayList();
 
-        if (options.contains(key))
+        for ( Iterator it = options.iterator(); it.hasNext(); )
         {
-            return key.getValues();
+            Option option = (Option) it.next();
+            if (opt.equals(option.getOpt()) || opt.equals( option.getLongOpt()))
+            {
+                values.addAll(option.getValuesList());
+            }
         }
 
-        return null;
-        }
+        return values.isEmpty() ? null : (String[]) values.toArray(new String[values.size()]);
+    }
 
     /**
      * <p>Retrieves the option object given the long or short option as a String</p>
@@ -318,4 +321,4 @@
         // return the array
         return (Option[]) processed.toArray(optionsArray);
     }
-}
\ No newline at end of file
+}

Modified: commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/Parser.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/Parser.java?rev=667565&r1=667564&r2=667565&view=diff
==============================================================================
--- commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/Parser.java (original)
+++ commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/Parser.java Fri Jun 13 08:08:56 2008
@@ -396,7 +396,7 @@
         }
         
         // get the option represented by arg
-        final Option opt = getOptions().getOption(arg);
+        Option opt = (Option) getOptions().getOption(arg).clone();
 
         // if the option is a required option remove the option from
         // the requiredOptions list

Modified: commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/BugsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/BugsTest.java?rev=667565&r1=667564&r2=667565&view=diff
==============================================================================
--- commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/BugsTest.java (original)
+++ commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/BugsTest.java Fri Jun 13 08:08:56 2008
@@ -22,6 +22,7 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Properties;
 
 import junit.framework.TestCase;
@@ -31,8 +32,7 @@
     public void test11457() throws Exception
     {
         Options options = new Options();
-        options.addOption(OptionBuilder.withLongOpt("verbose")
-                .create());
+        options.addOption(OptionBuilder.withLongOpt("verbose").create());
         String[] args = new String[]{"--verbose"};
 
         CommandLineParser parser = new PosixParser();
@@ -44,12 +44,8 @@
     public void test11458() throws Exception
     {
         Options options = new Options();
-        options.addOption( OptionBuilder.withValueSeparator( '=' )
-                           .hasArgs()
-                           .create( 'D' ) );
-        options.addOption( OptionBuilder.withValueSeparator( ':' )
-                           .hasArgs()
-                           .create( 'p' ) );
+        options.addOption( OptionBuilder.withValueSeparator( '=' ).hasArgs().create( 'D' ) );
+        options.addOption( OptionBuilder.withValueSeparator( ':' ).hasArgs().create( 'p' ) );
         String[] args = new String[] { "-DJAVA_HOME=/opt/java" , "-pfile1:file2:file3" };
 
         CommandLineParser parser = new PosixParser();
@@ -107,10 +103,8 @@
     {
         // Posix 
         Options options = new Options();
-        options.addOption( OptionBuilder.hasOptionalArg()
-                           .create( 'a' ) );
-        options.addOption( OptionBuilder.hasArg()
-                           .create( 'b' ) );
+        options.addOption( OptionBuilder.hasOptionalArg().create( 'a' ) );
+        options.addOption( OptionBuilder.hasArg().create( 'b' ) );
         String[] args = new String[] { "-a", "-bvalue" };
 
         CommandLineParser parser = new PosixParser();
@@ -120,10 +114,8 @@
 
         // GNU
         options = new Options();
-        options.addOption( OptionBuilder.hasOptionalArg()
-                           .create( 'a' ) );
-        options.addOption( OptionBuilder.hasArg()
-                           .create( 'b' ) );
+        options.addOption( OptionBuilder.hasOptionalArg().create( 'a' ) );
+        options.addOption( OptionBuilder.hasArg().create( 'b' ) );
         args = new String[] { "-a", "-b", "value" };
 
         parser = new GnuParser();
@@ -227,12 +219,9 @@
     public void test13666() throws Exception
     {
         Options options = new Options();
-        Option dir = OptionBuilder.withDescription( "dir" )
-                                       .hasArg()
-                                       .create( 'd' );
+        Option dir = OptionBuilder.withDescription( "dir" ).hasArg().create( 'd' );
         options.addOption( dir );
         
-        
         final PrintStream oldSystemOut = System.out;
         try
         {
@@ -279,29 +268,35 @@
         boolean exception = false;
 
         String[] args = new String[] {  };
-        try {
-            CommandLine line = parser.parse( opts, args );
+        try
+        {
+            CommandLine line = parser.parse(opts, args);
         }
-        catch( ParseException exp ) {
+        catch (ParseException exp)
+        {
             exception = true;
         }
 
-        if( !exception ) {
-            fail( "Expected exception not caught.");
+        if (!exception)
+        {
+            fail("Expected exception not caught.");
         }
 
         exception = false;
 
         args = new String[] { "-s" };
-        try {
-            CommandLine line = parser.parse( opts, args );
+        try
+        {
+            CommandLine line = parser.parse(opts, args);
         }
-        catch( ParseException exp ) {
+        catch (ParseException exp)
+        {
             exception = true;
         }
 
-        if( !exception ) {
-            fail( "Expected exception not caught.");
+        if (!exception)
+        {
+            fail("Expected exception not caught.");
         }
 
         exception = false;
@@ -328,7 +323,8 @@
         }
     }
 
-    public void test14786() throws Exception {
+    public void test14786() throws Exception
+    {
         Option o = OptionBuilder.isRequired().withDescription("test").create("test");
         Options opts = new Options();
         opts.addOption(o);
@@ -342,23 +338,25 @@
         assertTrue( line.hasOption( "test" ) );
     }
 
-    public void test15046() throws Exception {
+    public void test15046() throws Exception
+    {
         CommandLineParser parser = new PosixParser();
-        final String[] CLI_ARGS = new String[] {"-z", "c"};
-        Option option = new Option("z", "timezone", true, 
-                                   "affected option");
-        Options cliOptions = new Options();
-        cliOptions.addOption(option);
-        parser.parse(cliOptions, CLI_ARGS);
-		
+        String[] CLI_ARGS = new String[] {"-z", "c"};
+
+        Options options = new Options();
+        options.addOption(new Option("z", "timezone", true, "affected option"));
+
+        parser.parse(options, CLI_ARGS);
+        
         //now add conflicting option
-        cliOptions.addOption("c", "conflict", true, "conflict option");
-        CommandLine line = parser.parse(cliOptions, CLI_ARGS);
-        assertEquals( option.getValue(), "c" );
+        options.addOption("c", "conflict", true, "conflict option");
+        CommandLine line = parser.parse(options, CLI_ARGS);
+        assertEquals( line.getOptionValue('z'), "c" );
         assertTrue( !line.hasOption("c") );
     }
 
-    public void test15648() throws Exception {
+    public void test15648() throws Exception
+    {
         CommandLineParser parser = new PosixParser();
         final String[] args = new String[] { "-m", "\"Two Words\"" };
         Option m = OptionBuilder.hasArgs().create("m");
@@ -368,7 +366,8 @@
         assertEquals( "Two Words", line.getOptionValue( "m" ) );
     }
 
-    public void test27635() {
+    public void test27635()
+    {
         Option help = new Option("h", "help", false, "print this message");
         Option version = new Option("v", "version", false, "print version information");
         Option newRun = new Option("n", "new", false, "Create NLT cache entries only for new items");
@@ -436,7 +435,8 @@
                 ,out.toString());
     }
     
-    public void test31148() throws ParseException {
+    public void test31148() throws ParseException
+    {
         Option multiArgOption = new Option("o","option with multiple args");
         multiArgOption.setArgs(1);
         
@@ -453,7 +453,8 @@
         assertEquals("ovalue",cl.getOptionValue('o'));
     }
     
-    public void test21215() {
+    public void test21215()
+    {
         Options options = new Options();
         HelpFormatter formatter = new HelpFormatter();
         String SEP = System.getProperty("line.separator");
@@ -470,7 +471,8 @@
                 ,out.toString());
     }
     
-    public void test19383() {
+    public void test19383()
+    {
         Options options = new Options();
         options.addOption(new Option("a","aaa",false,"aaaaaaa"));
         options.addOption(new Option(null,"bbb",false,"bbbbbbb"));