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