implement withGlobalOptions, and convert Find
This commit is contained in:
		
					parent
					
						
							
								7af0893abd
							
						
					
				
			
			
				commit
				
					
						5cc882a35e
					
				
			
		
					 6 changed files with 44 additions and 24 deletions
				
			
		|  | @ -31,7 +31,6 @@ import Annex.Content | ||||||
| import Annex.Environment | import Annex.Environment | ||||||
| import Command | import Command | ||||||
| import Types.Messages | import Types.Messages | ||||||
| import CmdLine.GlobalSetter |  | ||||||
| 
 | 
 | ||||||
| {- Runs the passed command line. -} | {- Runs the passed command line. -} | ||||||
| dispatch :: Bool -> CmdParams -> [Command] -> [Parser GlobalSetter] -> [(String, String)] -> IO Git.Repo -> String -> String -> IO () | dispatch :: Bool -> CmdParams -> [Command] -> [Parser GlobalSetter] -> [(String, String)] -> IO Git.Repo -> String -> String -> IO () | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ import qualified Command.AddUnused | ||||||
| import qualified Command.Unlock | import qualified Command.Unlock | ||||||
| import qualified Command.Lock | import qualified Command.Lock | ||||||
| import qualified Command.PreCommit | import qualified Command.PreCommit | ||||||
| --import qualified Command.Find | import qualified Command.Find | ||||||
| --import qualified Command.FindRef | --import qualified Command.FindRef | ||||||
| --import qualified Command.Whereis | --import qualified Command.Whereis | ||||||
| --import qualified Command.List | --import qualified Command.List | ||||||
|  | @ -183,7 +183,7 @@ cmds = | ||||||
| --	, Command.Unused.cmd | --	, Command.Unused.cmd | ||||||
| --	, Command.DropUnused.cmd | --	, Command.DropUnused.cmd | ||||||
| 	, Command.AddUnused.cmd | 	, Command.AddUnused.cmd | ||||||
| --	, Command.Find.cmd | 	, Command.Find.cmd | ||||||
| --	, Command.FindRef.cmd | --	, Command.FindRef.cmd | ||||||
| --	, Command.Whereis.cmd | --	, Command.Whereis.cmd | ||||||
| --	, Command.List.cmd | --	, Command.List.cmd | ||||||
|  |  | ||||||
|  | @ -200,8 +200,8 @@ fileMatchingOptions' = | ||||||
| 		"match files smaller than a size" | 		"match files smaller than a size" | ||||||
| 	] | 	] | ||||||
| 
 | 
 | ||||||
| parseCombiningOptions :: Parser [GlobalSetter] | combiningOptions :: Parser [GlobalSetter] | ||||||
| parseCombiningOptions =  | combiningOptions =  | ||||||
| 	many $ longopt "not" "negate next option" | 	many $ longopt "not" "negate next option" | ||||||
| 		<|> longopt "and" "both previous and next option must match" | 		<|> longopt "and" "both previous and next option must match" | ||||||
| 		<|> longopt "or" "either previous or next option must match" | 		<|> longopt "or" "either previous or next option must match" | ||||||
|  | @ -211,8 +211,8 @@ parseCombiningOptions = | ||||||
| 	longopt o h = globalFlag (Limit.addToken o) ( long o <> help h ) | 	longopt o h = globalFlag (Limit.addToken o) ( long o <> help h ) | ||||||
| 	shortopt o h = globalFlag (Limit.addToken [o]) ( short o <> help h) | 	shortopt o h = globalFlag (Limit.addToken [o]) ( short o <> help h) | ||||||
| 
 | 
 | ||||||
| parseJsonOption :: Parser GlobalSetter | jsonOption :: Parser GlobalSetter | ||||||
| parseJsonOption = globalFlag (Annex.setOutput JSONOutput) | jsonOption = globalFlag (Annex.setOutput JSONOutput) | ||||||
| 	( long "json" <> short 'j' | 	( long "json" <> short 'j' | ||||||
| 	<> help "enable JSON output" | 	<> help "enable JSON output" | ||||||
| 	) | 	) | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								Command.hs
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								Command.hs
									
										
									
									
									
								
							|  | @ -13,6 +13,7 @@ module Command ( | ||||||
| 	noCommit, | 	noCommit, | ||||||
| 	noMessages, | 	noMessages, | ||||||
| 	withOptions, | 	withOptions, | ||||||
|  | 	withGlobalOptions, | ||||||
| 	next, | 	next, | ||||||
| 	stop, | 	stop, | ||||||
| 	stopUnless, | 	stopUnless, | ||||||
|  | @ -33,6 +34,7 @@ import Checks as ReExported | ||||||
| import CmdLine.Usage as ReExported | import CmdLine.Usage as ReExported | ||||||
| import CmdLine.Action as ReExported | import CmdLine.Action as ReExported | ||||||
| import CmdLine.Option as ReExported | import CmdLine.Option as ReExported | ||||||
|  | import CmdLine.GlobalSetter as ReExported | ||||||
| import CmdLine.GitAnnex.Options as ReExported | import CmdLine.GitAnnex.Options as ReExported | ||||||
| import Options.Applicative as ReExported hiding (command) | import Options.Applicative as ReExported hiding (command) | ||||||
| 
 | 
 | ||||||
|  | @ -78,6 +80,19 @@ noRepo a c = c { cmdnorepo = Just (a (cmdparamdesc c)) } | ||||||
| withOptions :: [Option] -> Command -> Command | withOptions :: [Option] -> Command -> Command | ||||||
| withOptions o c = c { cmdoptions = cmdoptions c ++ o } | withOptions o c = c { cmdoptions = cmdoptions c ++ o } | ||||||
| 
 | 
 | ||||||
|  | {- Adds global options to a command's option parser, and modifies its seek | ||||||
|  |  - option to first run actions for them. | ||||||
|  |  -} | ||||||
|  | withGlobalOptions :: [Parser GlobalSetter] -> Command -> Command | ||||||
|  | withGlobalOptions os c = c { cmdparser = apply <$> mixin (cmdparser c) } | ||||||
|  |   where | ||||||
|  | 	mixin p = (,)  | ||||||
|  | 		<$> p | ||||||
|  | 		<*> combineGlobalSetters os | ||||||
|  | 	apply (seek, globalsetters) = do | ||||||
|  | 		void $ getParsed globalsetters | ||||||
|  | 		seek | ||||||
|  | 
 | ||||||
| {- For start and perform stages to indicate what step to run next. -} | {- For start and perform stages to indicate what step to run next. -} | ||||||
| next :: a -> Annex (Maybe a) | next :: a -> Annex (Maybe a) | ||||||
| next a = return $ Just a | next a = return $ Just a | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ import Common.Annex | ||||||
| import Command | import Command | ||||||
| import CmdLine.Batch | import CmdLine.Batch | ||||||
| import qualified Utility.Format | import qualified Utility.Format | ||||||
| import Command.Find (formatOption, getFormat, showFormatted, keyVars) | import Command.Find (FindOptions(..), showFormatted, keyVars) | ||||||
| import Types.Key | import Types.Key | ||||||
| 
 | 
 | ||||||
| cmd :: Command | cmd :: Command | ||||||
|  |  | ||||||
|  | @ -14,7 +14,6 @@ import Common.Annex | ||||||
| import Command | import Command | ||||||
| import Annex.Content | import Annex.Content | ||||||
| import Limit | import Limit | ||||||
| import qualified Annex |  | ||||||
| import qualified Utility.Format | import qualified Utility.Format | ||||||
| import Utility.DataUnits | import Utility.DataUnits | ||||||
| import Types.Key | import Types.Key | ||||||
|  | @ -22,27 +21,34 @@ import Types.Key | ||||||
| cmd :: Command | cmd :: Command | ||||||
| cmd = withOptions annexedMatchingOptions $ mkCommand $ | cmd = withOptions annexedMatchingOptions $ mkCommand $ | ||||||
| 	command "find" SectionQuery "lists available files" | 	command "find" SectionQuery "lists available files" | ||||||
| 		paramPaths (withParams seek) | 		paramPaths (seek <$$> optParser) | ||||||
| 
 | 
 | ||||||
| mkCommand :: Command -> Command | mkCommand :: Command -> Command | ||||||
| mkCommand = noCommit . noMessages . withOptions [formatOption, print0Option, jsonOption] | mkCommand = noCommit . noMessages . withGlobalOptions [jsonOption] | ||||||
| 
 | 
 | ||||||
| formatOption :: Option | data FindOptions = FindOptions | ||||||
| formatOption = fieldOption [] "format" paramFormat "control format of output" | 	{ findThese :: CmdParams | ||||||
|  | 	, formatOption :: Maybe Utility.Format.Format | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| getFormat :: Annex (Maybe Utility.Format.Format) | optParser :: CmdParamsDesc -> Parser FindOptions | ||||||
| getFormat = getOptionField formatOption $ return . fmap Utility.Format.gen | optParser desc = FindOptions | ||||||
|  | 	<$> cmdParams desc | ||||||
|  | 	<*> optional parseFormatOption | ||||||
| 
 | 
 | ||||||
| print0Option :: Option | parseFormatOption :: Parser Utility.Format.Format | ||||||
| print0Option = Option [] ["print0"] (NoArg set) | parseFormatOption =  | ||||||
| 	"terminate output with null" | 	option (Utility.Format.gen <$> str) | ||||||
|   where | 		( long "format" <> metavar paramFormat | ||||||
| 	set = Annex.setField (optionName formatOption) "${file}\0" | 		<> help "control format of output" | ||||||
|  | 		) | ||||||
|  | 	<|> flag' (Utility.Format.gen "${file}\0") | ||||||
|  | 		( long "print0" | ||||||
|  | 		<> help "output filenames terminated with nulls" | ||||||
|  | 		) | ||||||
| 
 | 
 | ||||||
| seek :: CmdParams -> CommandSeek | seek :: FindOptions -> CommandSeek | ||||||
| seek ps = do | seek o = withFilesInGit (whenAnnexed $ start (formatOption o)) (findThese o) | ||||||
| 	format <- getFormat |  | ||||||
| 	withFilesInGit (whenAnnexed $ start format) ps |  | ||||||
| 
 | 
 | ||||||
| start :: Maybe Utility.Format.Format -> FilePath -> Key -> CommandStart | start :: Maybe Utility.Format.Format -> FilePath -> Key -> CommandStart | ||||||
| start format file key = do | start format file key = do | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Joey Hess
				Joey Hess