diff options
Diffstat (limited to 'CmdLine/Batch.hs')
-rw-r--r-- | CmdLine/Batch.hs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/CmdLine/Batch.hs b/CmdLine/Batch.hs index 57823b67b..ce9127975 100644 --- a/CmdLine/Batch.hs +++ b/CmdLine/Batch.hs @@ -12,15 +12,13 @@ import Command data BatchMode = Batch | NoBatch -batchOption :: Parser BatchMode -batchOption = flag NoBatch Batch +parseBatchOption :: Parser BatchMode +parseBatchOption = 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. +-- 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. @@ -29,7 +27,7 @@ batchable handler parser paramdesc = batchseeker <$> batchparser where batchparser = (,,) <$> parser - <*> batchOption + <*> parseBatchOption <*> cmdParams paramdesc batchseeker (opts, NoBatch, params) = mapM_ (go NoBatch opts) params @@ -52,3 +50,13 @@ batchable handler parser paramdesc = batchseeker <$> batchparser batchBadInput :: BatchMode -> Annex () batchBadInput NoBatch = liftIO exitFailure batchBadInput Batch = liftIO $ putStrLn "" + +-- Reads lines of batch mode input and passes to the action to handle. +batchSeek :: (String -> Annex ()) -> Annex () +batchSeek a = do + mp <- liftIO $ catchMaybeIO getLine + case mp of + Nothing -> return () + Just p -> do + a p + batchSeek a |