summaryrefslogtreecommitdiff
path: root/Annex/Hook.hs
blob: 7301a095849cde99c4cebd65d55f59fa00b7c35e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{- git-annex git hooks
 -
 - Note that it's important that the scripts not change, otherwise
 - removing old hooks using an old version of the script would fail.
 -
 - Copyright 2013 Joey Hess <joey@kitenet.net>
 -
 - Licensed under the GNU GPL version 3 or higher.
 -}

module Annex.Hook where

import Common.Annex
import qualified Git.Hook as Git
import Utility.Shell
import Config

preCommitHook :: Git.Hook
preCommitHook = Git.Hook "pre-commit" (mkHookScript "git annex pre-commit .")

mkHookScript :: String -> String
mkHookScript s = unlines
	[ shebang_local
	, "# automatically configured by git-annex"
	, s
	]

hookWrite :: Git.Hook -> Annex ()
hookWrite h = 
	-- cannot have git hooks in a crippled filesystem (no execute bit)
	unlessM crippledFileSystem $
		unlessM (inRepo $ Git.hookWrite h) $
			hookWarning h "already exists, not configuring"

hookUnWrite :: Git.Hook -> Annex ()
hookUnWrite h = unlessM (inRepo $ Git.hookUnWrite h) $
	hookWarning h "contents modified; not deleting. Edit it to remove call to git annex."

hookWarning :: Git.Hook -> String -> Annex ()
hookWarning h msg = do
	r <- gitRepo
	warning $ Git.hookName h ++ " hook (" ++ Git.hookFile h r ++ ") " ++ msg