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.
This commit is contained in:
parent
3b5f722130
commit
56f6923ccb
7 changed files with 127 additions and 66 deletions
|
@ -7,19 +7,13 @@
|
|||
|
||||
module Command.Init where
|
||||
|
||||
import Control.Monad.State (liftIO)
|
||||
import Control.Monad (when, unless)
|
||||
import System.Directory
|
||||
import Control.Monad (when)
|
||||
|
||||
import Command
|
||||
import qualified Annex
|
||||
import qualified Git
|
||||
import qualified Branch
|
||||
import UUID
|
||||
import Version
|
||||
import Messages
|
||||
import Types
|
||||
import Utility
|
||||
import Init
|
||||
|
||||
command :: [Command]
|
||||
command = [standaloneCommand "init" paramDesc seek
|
||||
|
@ -39,34 +33,8 @@ start ws = do
|
|||
|
||||
perform :: String -> CommandPerform
|
||||
perform description = do
|
||||
Branch.create
|
||||
initialize
|
||||
g <- Annex.gitRepo
|
||||
u <- getUUID g
|
||||
setVersion
|
||||
describeUUID u description
|
||||
unless (Git.repoIsLocalBare g) $
|
||||
gitPreCommitHookWrite g
|
||||
next $ return True
|
||||
|
||||
{- 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
|
||||
|
||||
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"
|
||||
|
|
|
@ -12,13 +12,11 @@ import System.Directory
|
|||
import System.Exit
|
||||
|
||||
import Command
|
||||
import Messages
|
||||
import Types
|
||||
import Utility
|
||||
import qualified Git
|
||||
import qualified Annex
|
||||
import qualified Command.Unannex
|
||||
import qualified Command.Init
|
||||
import Init
|
||||
import qualified Branch
|
||||
import Content
|
||||
import Locations
|
||||
|
@ -47,7 +45,7 @@ perform = next cleanup
|
|||
cleanup :: CommandCleanup
|
||||
cleanup = do
|
||||
g <- Annex.gitRepo
|
||||
gitPreCommitHookUnWrite g
|
||||
uninitialize
|
||||
mapM_ removeAnnex =<< getKeysPresent
|
||||
liftIO $ removeDirectoryRecursive (gitAnnexDir g)
|
||||
-- avoid normal shutdown
|
||||
|
@ -55,14 +53,3 @@ cleanup = do
|
|||
liftIO $ do
|
||||
Git.run g "branch" [Param "-D", Param Branch.name]
|
||||
exitSuccess
|
||||
|
||||
gitPreCommitHookUnWrite :: Git.Repo -> Annex ()
|
||||
gitPreCommitHookUnWrite repo = do
|
||||
let hook = Command.Init.preCommitHook repo
|
||||
whenM (liftIO $ doesFileExist hook) $ do
|
||||
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."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue