diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-05-06 13:44:53 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-05-06 13:44:53 -0400 |
commit | 2bbb276e38fb8503daccf7a419336d67c0a23c9c (patch) | |
tree | d796474a8b82bc5e79ae99a40ee93fd81cdf83a7 /CmdLine | |
parent | 582fa3e2f10f1e1064314a8a1d9bb5aa5cf84f92 (diff) |
contentlocation, examinekey, lookupkey: Added --batch mode option.
Diffstat (limited to 'CmdLine')
-rw-r--r-- | CmdLine/Batch.hs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/CmdLine/Batch.hs b/CmdLine/Batch.hs new file mode 100644 index 000000000..836472eb0 --- /dev/null +++ b/CmdLine/Batch.hs @@ -0,0 +1,41 @@ +{- git-annex batch commands + - + - Copyright 2015 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module CmdLine.Batch where + +import Common.Annex +import Command + +batchOption :: Option +batchOption = flagOption [] "batch" "enable batch mode" + +data BatchMode = Batch | NoBatch +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) -> CommandSeek) -> Batchable t -> CommandSeek +batchable seeker starter params = ifM (getOptionFlag batchOption) + ( batchloop + , seeker (starter NoBatch) params + ) + where + batchloop = do + mp <- liftIO $ catchMaybeIO getLine + case mp of + Nothing -> return () + Just p -> do + seeker (starter Batch) [p] + batchloop + +-- bad input is indicated by an empty line in batch mode. In non batch +-- mode, exit on bad input. +batchBadInput :: BatchMode -> Annex () +batchBadInput NoBatch = liftIO exitFailure +batchBadInput Batch = liftIO $ putStrLn "" |