diff options
author | Joey Hess <joey@kitenet.net> | 2011-08-17 14:14:43 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-08-17 14:44:31 -0400 |
commit | 56f6923ccbc6fb1932137b53458a4cece47e69b0 (patch) | |
tree | a2c9a949f2c6c5163551a76f4012e7606e3c1463 /Init.hs | |
parent | 3b5f7221305ba6e768711d8326a01b78fb1e4f79 (diff) |
Now "git annex init" only has to be run once
when a git repository is first being created. Clones will automatically
notice that git-annex is in use and automatically perform a basic
initalization. It's still recommended to run "git annex init" in any
clones, to describe them.
Diffstat (limited to 'Init.hs')
-rw-r--r-- | Init.hs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Init.hs b/Init.hs new file mode 100644 index 000000000..41256a953 --- /dev/null +++ b/Init.hs @@ -0,0 +1,69 @@ +{- git-annex repository initialization + - + - Copyright 2010 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Init (initialize, uninitialize) where + +import Control.Monad.State (liftIO) +import Control.Monad (unless) +import System.Directory + +import qualified Annex +import qualified Git +import qualified Branch +import Version +import Messages +import Types +import Utility +import UUID + +initialize :: Annex () +initialize = do + prepUUID + Branch.create + setVersion + g <- Annex.gitRepo + unless (Git.repoIsLocalBare g) $ + gitPreCommitHookWrite g + +uninitialize :: Annex () +uninitialize = do + g <- Annex.gitRepo + gitPreCommitHookUnWrite g + +{- set up a git pre-commit hook, if one is not already present -} +gitPreCommitHookWrite :: Git.Repo -> Annex () +gitPreCommitHookWrite repo = do + exists <- liftIO $ doesFileExist hook + if exists + then warning $ "pre-commit hook (" ++ hook ++ ") already exists, not configuring" + else liftIO $ do + viaTmp writeFile hook preCommitScript + p <- getPermissions hook + setPermissions hook $ p {executable = True} + where + hook = preCommitHook repo + +gitPreCommitHookUnWrite :: Git.Repo -> Annex () +gitPreCommitHookUnWrite repo = do + let hook = preCommitHook repo + whenM (liftIO $ doesFileExist hook) $ do + c <- liftIO $ readFile hook + if c == preCommitScript + then liftIO $ removeFile hook + else warning $ "pre-commit hook (" ++ hook ++ + ") contents modified; not deleting." ++ + " Edit it to remove call to git annex." + +preCommitHook :: Git.Repo -> FilePath +preCommitHook repo = + Git.workTree repo ++ "/" ++ Git.gitDir repo ++ "/hooks/pre-commit" + +preCommitScript :: String +preCommitScript = + "#!/bin/sh\n" ++ + "# automatically configured by git-annex\n" ++ + "git annex pre-commit .\n" |