From d49e9f6a744c490cf4374039fde26c0eb57dc675 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 11 Jul 2015 20:43:45 -0400 Subject: converted ContentLocation, ExampleKey, LookupKey --- CmdLine/Batch.hs | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'CmdLine/Batch.hs') diff --git a/CmdLine/Batch.hs b/CmdLine/Batch.hs index 24f942978..57823b67b 100644 --- a/CmdLine/Batch.hs +++ b/CmdLine/Batch.hs @@ -10,29 +10,42 @@ module CmdLine.Batch where import Common.Annex import Command -batchOption :: Option -batchOption = flagOption [] "batch" "enable batch mode" - data BatchMode = Batch | NoBatch + +batchOption :: Parser BatchMode +batchOption = flag NoBatch Batch + ( long "batch" + <> help "enable batch mode" + ) + type Batchable t = BatchMode -> t -> CommandStart -- A Batchable command can run in batch mode, or not. -- In batch mode, one line at a time is read, parsed, and a reply output to -- stdout. In non batch mode, the command's parameters are parsed and -- a reply output for each. -batchable :: ((t -> CommandStart) -> CmdParams -> CommandSeek) -> Batchable t -> CmdParams -> CommandSeek -batchable seeker starter params = ifM (getOptionFlag batchOption) - ( batchloop - , seeker (starter NoBatch) params - ) +batchable :: (opts -> String -> Annex Bool) -> Parser opts -> CmdParamsDesc -> CommandParser +batchable handler parser paramdesc = batchseeker <$> batchparser where - batchloop = do + batchparser = (,,) + <$> parser + <*> batchOption + <*> cmdParams paramdesc + + batchseeker (opts, NoBatch, params) = mapM_ (go NoBatch opts) params + batchseeker (opts, Batch, _) = batchloop opts + + batchloop opts = do mp <- liftIO $ catchMaybeIO getLine case mp of Nothing -> return () Just p -> do - seeker (starter Batch) [p] - batchloop + go Batch opts p + batchloop opts + + go batchmode opts p = + unlessM (handler opts p) $ + batchBadInput batchmode -- bad input is indicated by an empty line in batch mode. In non batch -- mode, exit on bad input. -- cgit v1.2.3