From cadc1988629458fc861ac27e036417a311ecc255 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 3 Mar 2013 14:07:13 -0400 Subject: better prevention of auto repack Looking through the git sources (documentation is unclear), it seems commit doesn't ever trigger git-gc, mostly fetching and merging seems to. I cannot easily override the setting in all those places, so instead set gc.auto in git config when initializing a repository with the assistant. This does mean that the user cannot set gc.auto=0 and completely avoid repacks, as the assistant does it daily. But, it only does it after there are 100x the default number of loose objects, so this is probably not going to be too annoying. --- Assistant/Threads/Committer.hs | 3 +-- Assistant/Threads/SanityChecker.hs | 13 +++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'Assistant') diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs index 75976ee3c..99d01b580 100644 --- a/Assistant/Threads/Committer.hs +++ b/Assistant/Threads/Committer.hs @@ -82,8 +82,7 @@ commitStaged = do Right _ -> do direct <- isDirect let params = nomessage $ catMaybes - [ Just $ Param "-c", Just $ Param "gc.auto=0" - , Just $ Param "commit" + [ Just $ Param "commit" , Just $ Param "--quiet" {- In indirect mode, avoid running the - usual git-annex pre-commit hook; diff --git a/Assistant/Threads/SanityChecker.hs b/Assistant/Threads/SanityChecker.hs index 806441058..906167ca8 100644 --- a/Assistant/Threads/SanityChecker.hs +++ b/Assistant/Threads/SanityChecker.hs @@ -15,6 +15,7 @@ import Assistant.DaemonStatus import Assistant.Alert import qualified Git.LsFiles import qualified Git.Command +import qualified Git.Config import Utility.ThreadScheduler import qualified Assistant.Threads.Watcher as Watcher import Utility.LogFile @@ -85,8 +86,16 @@ dailyCheck = do liftIO $ void cleanup {- Allow git-gc to run once per day. More frequent gc is avoided - - to avoid slowing things down. -} - void $ liftIO $ Git.Command.runBool [Param "gc", Param "--auto"] g + - by default to avoid slowing things down. Only run repacks when 100x + - the usual number of loose objects are present; we tend + - to have a lot of small objects and they should not be a + - significant size. -} + when (Git.Config.getMaybe "gc.auto" g == Just "0") $ + liftIO $ void $ Git.Command.runBool + [ Param "-c", Param "gc.auto=670000" + , Param "gc" + , Param "--auto" + ] g return True where -- cgit v1.2.3