diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-07-31 16:00:13 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-07-31 16:01:54 -0400 |
commit | dbe6b403da47172346b2536b50a379e6d9b76e31 (patch) | |
tree | 2e1db476752b4431578d61c57e1851cd5def2629 /Annex/Action.hs | |
parent | 9a01e2699598ab7affd7c19058bb2a6dad6d3a16 (diff) |
Improve shutdown due to --time-limit, especially for fsck
* Perform a clean shutdown when --time-limit is reached.
This includes running queued git commands, and cleanup actions normally
run when a command is finished.
* fsck: Commit incremental fsck database when --time-limit is reached.
Previously, some of the last files fscked did not make it into the
database when using --time-limit.
Note that this changes Annex.addCleanup hooks, to run after --time-limit
expires. Fsck was using such a hook to clean up after a
--incremental-schedule, and that shouldn't run when --time-limit exipires
it. So, instead, moved that cleanup code to be run by cleanupIncremental.
Resulted in some data type juggling.
Diffstat (limited to 'Annex/Action.hs')
-rw-r--r-- | Annex/Action.hs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Annex/Action.hs b/Annex/Action.hs new file mode 100644 index 000000000..f59c9c2f4 --- /dev/null +++ b/Annex/Action.hs @@ -0,0 +1,35 @@ +{- git-annex actions + - + - Copyright 2010-2015 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Action where + +import qualified Data.Map as M +#ifndef mingw32_HOST_OS +import System.Posix.Signals +#endif + +import Common.Annex +import qualified Annex +import Annex.Content + +{- Actions to perform each time ran. -} +startup :: Annex () +startup = +#ifndef mingw32_HOST_OS + liftIO $ void $ installHandler sigINT Default Nothing +#else + return () +#endif + +{- Cleanup actions. -} +shutdown :: Bool -> Annex () +shutdown nocommit = do + saveState nocommit + sequence_ =<< M.elems <$> Annex.getState Annex.cleanup + liftIO reapZombies -- zombies from long-running git processes |