cli: fix opts parsing regressions from feb
Since commit 7aab544, "-f -" before the command broke command
detection, causing spurious "no such option" errors (and breaking
about 70 functional tests which neither I nor travis noticed).
This commit is contained in:
parent
c6f1371251
commit
25cd65442a
@ -167,12 +167,13 @@ moveFlagsAfterCommand args = moveArgs $ ensureDebugHasArg args
|
|||||||
_ -> as
|
_ -> as
|
||||||
|
|
||||||
-- -h ..., --version ...
|
-- -h ..., --version ...
|
||||||
moveArgs (f:a:as) | isMovableNoArgFlag f = (moveArgs $ a:as) ++ [f]
|
moveArgs (f:a:as) | isMovableNoArgFlag f = (moveArgs $ a:as) ++ [f]
|
||||||
-- -f FILE ..., --alias ALIAS ...
|
-- -f FILE ..., --alias ALIAS ...
|
||||||
moveArgs (f:v:a:as) | isMovableReqArgFlag f
|
moveArgs (f:v:a:as) | isMovableReqArgFlag f, isValue v = (moveArgs $ a:as) ++ [f,v]
|
||||||
, not (take 1 v == "-") = (moveArgs $ a:as) ++ [f,v]
|
|
||||||
-- -fFILE ..., --alias=ALIAS ...
|
-- -fFILE ..., --alias=ALIAS ...
|
||||||
moveArgs (fv:a:as) | isMovableReqArgFlagAndValue fv = (moveArgs $ a:as) ++ [fv]
|
moveArgs (fv:a:as) | isMovableReqArgFlagAndValue fv = (moveArgs $ a:as) ++ [fv]
|
||||||
|
-- -f(missing arg)
|
||||||
|
moveArgs (f:a:as) | isMovableReqArgFlag f, not (isValue a) = (moveArgs $ a:as) ++ [f]
|
||||||
-- anything else
|
-- anything else
|
||||||
moveArgs as = as
|
moveArgs as = as
|
||||||
|
|
||||||
@ -185,6 +186,10 @@ isMovableReqArgFlagAndValue ('-':'-':a:as) = case break (== '=') (a:as) of (f:fs
|
|||||||
isMovableReqArgFlagAndValue ('-':shortflag:_:_) = [shortflag] `elem` reqargflagstomove
|
isMovableReqArgFlagAndValue ('-':shortflag:_:_) = [shortflag] `elem` reqargflagstomove
|
||||||
isMovableReqArgFlagAndValue _ = False
|
isMovableReqArgFlagAndValue _ = False
|
||||||
|
|
||||||
|
isValue "-" = True
|
||||||
|
isValue ('-':_) = False
|
||||||
|
isValue _ = True
|
||||||
|
|
||||||
flagstomove = inputflags ++ helpflags
|
flagstomove = inputflags ++ helpflags
|
||||||
noargflagstomove = concatMap flagNames $ filter ((==FlagNone).flagInfo) flagstomove
|
noargflagstomove = concatMap flagNames $ filter ((==FlagNone).flagInfo) flagstomove
|
||||||
reqargflagstomove = -- filter (/= "debug") $
|
reqargflagstomove = -- filter (/= "debug") $
|
||||||
|
|||||||
@ -122,12 +122,12 @@ hledger --daily register
|
|||||||
>>>=1
|
>>>=1
|
||||||
|
|
||||||
# 12. help and input flags can go before command
|
# 12. help and input flags can go before command
|
||||||
hledger -f /dev/null --alias somealiases --rules-file -? -h --help --version --debug 1 register --daily
|
hledger -f /dev/null --alias somealiases --rules-file -h --help --version --debug 1 register --daily
|
||||||
>>> /^hledger \[COMMAND\]/
|
>>> /^hledger \[COMMAND\]/
|
||||||
>>>=0
|
>>>=0
|
||||||
|
|
||||||
# 13. or after it, and spaces in options are optional
|
# 13. or after it, and spaces in options are optional
|
||||||
hledger register -f/dev/null --alias=somealiases --rules-file -? -h --help --version --debug 1 --daily
|
hledger register -f/dev/null --alias=somealiases --rules-file -h --help --version --debug 1 --daily
|
||||||
>>> /^register \[OPTIONS\]/
|
>>> /^register \[OPTIONS\]/
|
||||||
>>>=0
|
>>>=0
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user