Test Blame

src/test/java/org/apache/commons/exec/CommandLineTest.java
TagDateBlameLineSource
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  242
    /**
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  243
     * Another  command line parsing puzzle from Kai Hu - as
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  244
     * far as I understand it there is no way to express that
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  245
     * in a one-line command string.
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  246
     */
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  247
    public void testParseComplexCommandLine2() {
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  248
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  249
        String commandline = "./script/jrake cruise:publish_installers "
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  250
            + "INSTALLER_VERSION=unstable_2_1 "
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  251
            + "INSTALLER_PATH=\"/var/lib/ cruise-agent/installers\" "
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  252
            + "INSTALLER_DOWNLOAD_SERVER=\'something\' "
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  253
            + "WITHOUT_HELP_DOC=true";
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  254
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  255
        CommandLine cmdl = CommandLine.parse(commandline);
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  256
        String[] args = cmdl.getArguments();
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  257
        assertEquals(args[0], "cruise:publish_installers");
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  258
        assertEquals(args[1], "INSTALLER_VERSION=unstable_2_1");
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  259
        // assertEquals(args[2], "INSTALLER_PATH=\"/var/lib/ cruise-agent/installers\"");
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  260
        // assertEquals(args[3], "INSTALLER_DOWNLOAD_SERVER='something'");
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  261
        assertEquals(args[4], "WITHOUT_HELP_DOC=true");
  EXEC_1_0_0    Mon Feb 02 06:18:31 JST 2009    6ad70c  262
    }

Found Source Blame

src/main/java/org/apache/commons/exec/util/StringUtils.java
TagDateBlameLineSource
  EXEC_1_0_0_RC1    Sat Jul 19 04:39:05 JST 2008    dcbad9  59
        StringBuffer argBuf = new StringBuffer();
  EXEC_1_0_0_RC1    Sat Jul 19 04:39:05 JST 2008    dcbad9  61
        if (argStr == null || argStr.length() == 0) {
  EXEC_1_0_0_RC1    Sat Jul 19 04:39:05 JST 2008    dcbad9  65
        if (vars == null || vars.size() == 0) {
  EXEC_1_0_0_RC1    Sat Jul 19 04:39:05 JST 2008    dcbad9  66
            return argBuf.append(argStr);
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  163
        return arg.replace(SLASH_CHAR, File.separatorChar).replace(
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  199
        String cleanedArgument = argument.trim();
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  201
        while(cleanedArgument.startsWith(SINGLE_QUOTE) || cleanedArgument.startsWith(DOUBLE_QUOTE)) {
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  204
        while(cleanedArgument.endsWith(SINGLE_QUOTE) || cleanedArgument.endsWith(DOUBLE_QUOTE)) {
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  208
        final StringBuffer buf = new StringBuffer();
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  209
        if (cleanedArgument.indexOf(DOUBLE_QUOTE) > -1) {
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  217
        } else if (cleanedArgument.indexOf(SINGLE_QUOTE) > -1
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  218
                || cleanedArgument.indexOf(" ") > -1) {
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  219
            return buf.append(DOUBLE_QUOTE).append(cleanedArgument).append(
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  220
                    DOUBLE_QUOTE).toString();
  EXEC_1_0_0_RC1    Sat Jul 19 05:25:50 JST 2008    963a84  222
            return cleanedArgument;
src/main/java/org/apache/commons/exec/CommandLine.java
TagDateBlameLineSource
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  37
    private Vector arguments = new Vector();
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  64
        return parse(line, null);
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  79
        if (line == null) {
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  81
        } else if (line.trim().length() == 0) {
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  84
            String[] tmp = translateCommandline(line);
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  86
            CommandLine cl = new CommandLine(tmp[0]);
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  87
            cl.setSubstitutionMap(substitutionMap);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  88
            for (int i = 1; i < tmp.length; i++) {
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  89
                cl.addArgument(tmp[i]);
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  92
            return cl;
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  101
    public CommandLine(String executable) {
  sandbox    Sat Apr 12 01:37:11 JST 2008    7aa110  102
        this.isFile=false;
  sandbox    Sun Mar 12 21:07:59 JST 2006    a3538e  103
        setExecutable(executable);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  104
    }
  sandbox    Wed Dec 05 07:15:42 JST 2007    0b6989  198
        return this.addArgument(argument, true);
  sandbox    Wed Dec 05 07:15:42 JST 2007    0b6989  209
        if (argument == null) {
  sandbox    Wed Dec 05 07:15:42 JST 2007    0b6989  213
        if(handleQuoting) {
  EXEC_1_0_0_RC1    Sat Jul 19 05:23:35 JST 2008    43d166  214
            arguments.add(StringUtils.quoteArgument(argument));
  sandbox    Wed Dec 05 07:15:42 JST 2007    0b6989  220
        return this;
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  229
        String[] result = new String[arguments.size()];
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  230
        result = (String[]) arguments.toArray(result);
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  231
        return this.expandArguments(result);
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  238
        return substitutionMap;
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  247
        this.substitutionMap = substitutionMap;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  248
    }
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  301
        StringBuffer stringBuffer = StringUtils.stringSubstitution(argument, this.getSubstitutionMap(), true);
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  302
        return stringBuffer.toString();
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  312
        String[] result = new String[arguments.length];
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  313
        for(int i=0; i
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  314
            result[i] = this.expandArgument(arguments[i]);
  sandbox    Sat Dec 08 01:38:27 JST 2007    29abee  316
        return result;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  329
        if (toProcess == null || toProcess.length() == 0) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  336
        final int normal = 0;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  337
        final int inQuote = 1;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  338
        final int inDoubleQuote = 2;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  339
        int state = normal;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  340
        StringTokenizer tok = new StringTokenizer(toProcess, "\"\' ", true);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  341
        Vector v = new Vector();
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  342
        StringBuffer current = new StringBuffer();
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  343
        boolean lastTokenHasBeenQuoted = false;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  345
        while (tok.hasMoreTokens()) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  346
            String nextTok = tok.nextToken();
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  347
            switch (state) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  349
                if ("\'".equals(nextTok)) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  350
                    lastTokenHasBeenQuoted = true;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  351
                    state = normal;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  353
                    current.append(nextTok);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  355
                break;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  357
                if ("\"".equals(nextTok)) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  358
                    lastTokenHasBeenQuoted = true;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  359
                    state = normal;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  361
                    current.append(nextTok);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  363
                break;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  365
                if ("\'".equals(nextTok)) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  366
                    state = inQuote;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  367
                } else if ("\"".equals(nextTok)) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  368
                    state = inDoubleQuote;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  369
                } else if (" ".equals(nextTok)) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  370
                    if (lastTokenHasBeenQuoted || current.length() != 0) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  371
                        v.addElement(current.toString());
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  372
                        current = new StringBuffer();
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  375
                    current.append(nextTok);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  377
                lastTokenHasBeenQuoted = false;
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  380
        }
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  382
        if (lastTokenHasBeenQuoted || current.length() != 0) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  383
            v.addElement(current.toString());
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  386
        if (state == inQuote || state == inDoubleQuote) {
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  391
        String[] args = new String[v.size()];
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  392
        v.copyInto(args);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  393
        return args;
  sandbox    Wed Dec 05 07:15:42 JST 2007    0b6989  403
        if (executable == null) {
  sandbox    Wed Dec 05 07:15:42 JST 2007    0b6989  405
        } else if(executable.trim().length() == 0) {
  EXEC_1_0_0_RC1    Sat Jul 19 05:40:44 JST 2008    b95e06  408
            this.executable = StringUtils.fixFileSeparatorChar(executable);
  sandbox    Sun Mar 12 04:18:50 JST 2006    18cb09  410
    }