diff options
author | 2012-02-15 11:13:13 -0400 | |
---|---|---|
committer | 2012-02-15 11:14:19 -0400 | |
commit | 52c5b164d8dee3761b6ad96e3d636f862a2344e3 (patch) | |
tree | 71ef23b51d9bea9361cadec70db135f6bd60152d /Annex | |
parent | c26db2625934e315163077d19d814bc71df7ef6e (diff) |
Added a annex.queuesize setting
useful when adding hundreds of thousands of files on a system with plenty
of memory.
git add gets quite slow in such a large repository, so if the system has
more than the ~32 mb of memory the queue can use by default, it's a useful
optimisation to increase the queue size, in order to decrease the number
of times git add is run.
Diffstat (limited to 'Annex')
-rw-r--r-- | Annex/Queue.hs | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/Annex/Queue.hs b/Annex/Queue.hs index f611cf02e..df6ba12a2 100644 --- a/Annex/Queue.hs +++ b/Annex/Queue.hs @@ -12,30 +12,42 @@ module Annex.Queue ( ) where import Common.Annex -import Annex +import Annex hiding (new) import qualified Git.Queue +import qualified Git.Config {- Adds a git command to the queue. -} add :: String -> [CommandParam] -> [FilePath] -> Annex () add command params files = do - q <- getState repoqueue + q <- get 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 + q <- get when (Git.Queue.full q) $ flush False {- Runs (and empties) the queue. -} flush :: Bool -> Annex () flush silent = do - q <- getState repoqueue + q <- get unless (0 == Git.Queue.size q) $ do unless silent $ showSideAction "Recording state in git" q' <- inRepo $ Git.Queue.flush q store q' +get :: Annex Git.Queue.Queue +get = maybe new return =<< getState repoqueue + +new :: Annex Git.Queue.Queue +new = do + q <- Git.Queue.new <$> fromRepo queuesize + store q + return q + where + queuesize r = readish =<< Git.Config.getMaybe "annex.queuesize" r + store :: Git.Queue.Queue -> Annex () -store q = changeState $ \s -> s { repoqueue = q } +store q = changeState $ \s -> s { repoqueue = Just q } |