From 4b68fea674572410c7c542cf033e2a6636349546 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 22 Jun 2015 16:01:01 -0400 Subject: [PATCH] CLI2: Fixed bug in ::findCommand - If an argument is an exact match for a command ('projects'), it is a command. - If an argument is not an exact match for command ('project'), but is an exact match for an attribute, it is not a command. - If an argument fails the above tests, but canonicalizes to a command, it is a command. --- src/CLI2.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/CLI2.cpp b/src/CLI2.cpp index 4c64fd1e1..8fd4a263d 100644 --- a/src/CLI2.cpp +++ b/src/CLI2.cpp @@ -807,21 +807,24 @@ bool CLI2::findCommand () // task project=foo list // ^cmd ^cmd // ^attribute - if (canonicalize (canonical, "cmd", raw) && - ! exactMatch ("attribute", raw)) - { - a.attribute ("canonical", canonical); - a.tag ("CMD"); + if (exactMatch ("cmd", raw)) + canonical = raw; + else if (exactMatch ("attribute", raw)) + continue; + else if (! canonicalize (canonical, "cmd", raw)) + continue; - bool readOnly = ! exactMatch ("writecmd", canonical); - a.tag (readOnly ? "READCMD" : "WRITECMD"); + a.attribute ("canonical", canonical); + a.tag ("CMD"); - if (context.config.getInteger ("debug.parser") >= 3) - context.debug (dump ("CLI2::analyze findCommand")); + bool readOnly = ! exactMatch ("writecmd", canonical); + a.tag (readOnly ? "READCMD" : "WRITECMD"); - // Stop and indicate command found. - return true; - } + if (context.config.getInteger ("debug.parser") >= 3) + context.debug (dump ("CLI2::analyze findCommand")); + + // Stop and indicate command found. + return true; } // Indicate command not found.