From 52c5b164d8dee3761b6ad96e3d636f862a2344e3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 15 Feb 2012 11:13:13 -0400 Subject: 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. --- Annex/Queue.hs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'Annex') 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 } -- cgit v1.2.3