aboutsummaryrefslogtreecommitdiff
path: root/Annex/Queue.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-10-04 00:40:47 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-10-04 00:59:08 -0400
commitcfe21e85e7fba61ac588e210f2a9b75f8d081f42 (patch)
tree3237aa5460cb38254a44a6462c83db3c2276c229 /Annex/Queue.hs
parentff21fd4a652cc6516d0e06ab885adf1c93eddced (diff)
rename
Diffstat (limited to 'Annex/Queue.hs')
-rw-r--r--Annex/Queue.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/Annex/Queue.hs b/Annex/Queue.hs
new file mode 100644
index 000000000..8d0a32bec
--- /dev/null
+++ b/Annex/Queue.hs
@@ -0,0 +1,42 @@
+{- git-annex command queue
+ -
+ - Copyright 2011 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Annex.Queue (
+ add,
+ flush,
+ flushWhenFull
+) where
+
+import Annex.Common
+import Annex
+import qualified Git.Queue
+
+{- Adds a git command to the queue. -}
+add :: String -> [CommandParam] -> [FilePath] -> Annex ()
+add command params files = do
+ q <- getState repoqueue
+ store $ Git.Queue.add q command params files
+
+{- Runs the queue if it is full. Should be called periodically. -}
+flushWhenFull :: Annex ()
+flushWhenFull = do
+ q <- getState repoqueue
+ when (Git.Queue.full q) $ flush False
+
+{- Runs (and empties) the queue. -}
+flush :: Bool -> Annex ()
+flush silent = do
+ q <- getState repoqueue
+ unless (0 == Git.Queue.size q) $ do
+ unless silent $
+ showSideAction "Recording state in git"
+ g <- gitRepo
+ q' <- liftIO $ Git.Queue.flush g q
+ store q'
+
+store :: Git.Queue.Queue -> Annex ()
+store q = changeState $ \s -> s { repoqueue = q }