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);