summaryrefslogtreecommitdiff
path: root/CmdLine
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-12-21 12:57:13 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-12-21 12:57:13 -0400
commit98194e4c61466ec9175e65af557b6130be81617d (patch)
treec58dfeb2d7c50548a1328948a5f23e9563c4e643 /CmdLine
parent4e7b407c066a46002011b99c7621c3a7cc3d7622 (diff)
addurl: Added --batch option.
Diffstat (limited to 'CmdLine')
-rw-r--r--CmdLine/Batch.hs20
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