Author: maartenc
Date: Mon Oct 20 15:26:49 2008
New Revision: 706432

URL: http://svn.apache.org/viewvc?rev=706432&view=rev
Log:
FIX: Support for passing arbitrary arguments to the -main invoked class when 
using the standalone mode is severely limited (IVY-952) (thanks to Patrick 
Woodworth)

Modified:
    ant/ivy/core/trunk/CHANGES.txt
    ant/ivy/core/trunk/src/java/org/apache/ivy/util/cli/CommandLineParser.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/MainTest.java

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=706432&r1=706431&r2=706432&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Mon Oct 20 15:26:49 2008
@@ -108,6 +108,7 @@
 - FIX: pre-resolve-dependency event doesn't export branch information 
(IVY-941) (thanks to Jaroslaw Wypychowski)
 - FIX: cachefileset produces an empty fileset when the cache refers to libs in 
directories that only have the root directory in common (IVY-948) (thanks to 
Chris Wood)
 - FIX: Extra Attributes specified in the Dependency's Module Descriptor are 
not available to resolvers (IVY-929) (thanks to Scott Hebert)
+- FIX: Support for passing arbitrary arguments to the -main invoked class when 
using the standalone mode is severely limited (IVY-952) (thanks to Patrick 
Woodworth)
 
    2.0.0-rc1
 =====================================

Modified: 
ant/ivy/core/trunk/src/java/org/apache/ivy/util/cli/CommandLineParser.java
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/util/cli/CommandLineParser.java?rev=706432&r1=706431&r2=706432&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/util/cli/CommandLineParser.java 
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/util/cli/CommandLineParser.java 
Mon Oct 20 15:26:49 2008
@@ -54,22 +54,34 @@
     
     public CommandLine parse(String[] args) throws ParseException {
         CommandLine line = new CommandLine();
-        for (ListIterator iterator = Arrays.asList(args).listIterator(); 
iterator.hasNext();) {
+        
+        int index = args.length;
+        ListIterator iterator = Arrays.asList(args).listIterator();
+        while (iterator.hasNext()) {
             String arg = (String) iterator.next();
-            if (arg.startsWith("-")) {
-                Option option = (Option) options.get(arg.substring(1));
-                if (option == null) {
-                    throw new ParseException("Unrecognized option: " + arg);
-                }
-                line.addOptionValues(arg.substring(1), option.parse(iterator));
-            } else {
-                // left over args
-                int index = iterator.previousIndex() + 1;
-                String[] leftOverArgs = new String[args.length - index];
-                System.arraycopy(args, index, leftOverArgs, 0, 
leftOverArgs.length);
-                line.setLeftOverArgs(leftOverArgs);
+            if ("--".equals(arg)) {
+                // skip this argument and stop looping
+                index = iterator.nextIndex();
+                break;
+            }
+
+            if (!arg.startsWith("-")) {
+                index = iterator.previousIndex();
+                break;
             }
+            
+            Option option = (Option) options.get(arg.substring(1));
+            if (option == null) {
+                throw new ParseException("Unrecognized option: " + arg);
+            }
+            line.addOptionValues(arg.substring(1), option.parse(iterator));
         }
+        
+        // left over args
+        String[] leftOverArgs = new String[args.length - index];
+        System.arraycopy(args, index, leftOverArgs, 0, leftOverArgs.length);
+        line.setLeftOverArgs(leftOverArgs);
+
         return line;
     }
 

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/MainTest.java
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/MainTest.java?rev=706432&r1=706431&r2=706432&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/MainTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/MainTest.java Mon Oct 20 
15:26:49 2008
@@ -20,6 +20,7 @@
 import java.io.File;
 
 import org.apache.ivy.util.CacheCleaner;
+import org.apache.ivy.util.cli.CommandLine;
 import org.apache.ivy.util.cli.ParseException;
 
 import junit.framework.TestCase;
@@ -84,6 +85,48 @@
         });
         assertTrue(new File("build/cache/org1/mod1.2/ivy-2.0.xml").exists());
     }
+    
+    public void testExtraParams1() throws Exception {
+        String[] params = new String[] {
+                "-settings", "test/repositories/ivysettings.xml",
+                "-confs", "default",
+                "-ivy", "test/repositories/1/org1/mod1.1/ivys/ivy-1.0.xml",
+                "foo1", "foo2"
+        };
+        CommandLine line = Main.getParser().parse(params);
+        String[] leftOver = line.getLeftOverArgs();
+        assertNotNull(leftOver);
+        assertEquals(2, leftOver.length);
+        assertEquals("foo1", leftOver[0]);
+        assertEquals("foo2", leftOver[1]);
+    }
+
+    public void testExtraParams2() throws Exception {
+        String[] params = new String[] {
+                "-settings", "test/repositories/ivysettings.xml",
+                "-confs", "default",
+                "-ivy", "test/repositories/1/org1/mod1.1/ivys/ivy-1.0.xml",
+                "--", "foo1", "foo2"
+        };
+        CommandLine line = Main.getParser().parse(params);
+        String[] leftOver = line.getLeftOverArgs();
+        assertNotNull(leftOver);
+        assertEquals(2, leftOver.length);
+        assertEquals("foo1", leftOver[0]);
+        assertEquals("foo2", leftOver[1]);
+    }
+
+    public void testExtraParams3() throws Exception {
+        String[] params = new String[] {
+                "-settings", "test/repositories/ivysettings.xml",
+                "-confs", "default",
+                "-ivy", "test/repositories/1/org1/mod1.1/ivys/ivy-1.0.xml"
+        };
+        CommandLine line = Main.getParser().parse(params);
+        String[] leftOver = line.getLeftOverArgs();
+        assertNotNull(leftOver);
+        assertEquals(0, leftOver.length);
+    }
 
     private void run(String[] args) throws Exception {
         Main.run(Main.getParser(), args);


Reply via email to