diff options
author | 2015-05-12 13:23:22 -0400 | |
---|---|---|
committer | 2015-05-12 13:23:22 -0400 | |
commit | 4d49342612dd441cdc503b5294035fc05a9a5a77 (patch) | |
tree | 435a82d44b5a6aa3df411b36fb9fad2553cc670a /CmdLine/Batch.hs | |
parent | 44a48a19ffeb8085e7ae1f6bf58d5661adaf8a8d (diff) | |
parent | 5cd9e10cde3c06ecc6a97f5f60a9def22f959bd2 (diff) |
Merge branch 'master' into concurrentprogress
Conflicts:
Command/Fsck.hs
Messages.hs
Remote/Directory.hs
Remote/Git.hs
Remote/Helper/Special.hs
Types/Remote.hs
debian/changelog
git-annex.cabal
Diffstat (limited to 'CmdLine/Batch.hs')
-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 "" |