git-annex/Command/Uninit.hs

68 lines
1.7 KiB
Haskell
Raw Normal View History

2010-12-03 04:33:41 +00:00
{- git-annex command
-
- Copyright 2010 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.Uninit where
import Control.Monad.State (liftIO)
import System.Directory
2011-07-04 19:50:30 +00:00
import System.Exit
2010-12-03 04:33:41 +00:00
import Command
import Messages
import Types
import Utility
import qualified Git
2010-12-03 04:33:41 +00:00
import qualified Annex
import qualified Command.Unannex
import qualified Command.Init
2011-07-04 19:50:30 +00:00
import qualified Branch
import Content
2011-07-04 19:55:03 +00:00
import Locations
2010-12-03 04:33:41 +00:00
command :: [Command]
command = [repoCommand "uninit" paramPath seek
"de-initialize git-annex and clean out repository"]
seek :: [CommandSeek]
seek = [withFilesInGit startUnannex, withNothing start]
startUnannex :: CommandStartString
startUnannex file = do
-- Force fast mode before running unannex. This way, if multiple
-- files link to a key, it will be left in the annex and hardlinked
-- to by each.
Annex.changeState $ \s -> s { Annex.fast = True }
Command.Unannex.start file
2010-12-03 04:33:41 +00:00
start :: CommandStartNothing
2011-07-04 19:50:30 +00:00
start = next perform
2010-12-03 04:33:41 +00:00
perform :: CommandPerform
2011-07-04 19:50:30 +00:00
perform = next cleanup
cleanup :: CommandCleanup
cleanup = do
2010-12-03 04:33:41 +00:00
g <- Annex.gitRepo
gitPreCommitHookUnWrite g
mapM_ removeAnnex =<< getKeysPresent
liftIO $ removeDirectoryRecursive (gitAnnexDir g)
-- avoid normal shutdown
2011-07-04 19:50:30 +00:00
saveState
liftIO $ Git.run g "branch" [Param "-D", Param Branch.name]
liftIO $ exitSuccess
2010-12-03 04:33:41 +00:00
gitPreCommitHookUnWrite :: Git.Repo -> Annex ()
gitPreCommitHookUnWrite repo = do
let hook = Command.Init.preCommitHook repo
whenM (liftIO $ doesFileExist hook) $ do
2010-12-03 04:33:41 +00:00
c <- liftIO $ readFile hook
if c == Command.Init.preCommitScript
then liftIO $ removeFile hook
else warning $ "pre-commit hook (" ++ hook ++
") contents modified; not deleting." ++
" Edit it to remove call to git annex."