summaryrefslogtreecommitdiff
path: root/Command/Uninit.hs
blob: 1a4e9b0d718edcd23b8df9adb6edf9a70d31a9ec (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{- 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 Control.Monad (when)
import System.Directory

import Command
import Messages
import Types
import Utility
import qualified GitRepo as Git
import qualified Annex
import qualified Command.Unannex
import qualified Command.Init

command :: [Command]
command = [Command "uninit" paramPath seek 
        "de-initialize git-annex and clean out repository"]

seek :: [CommandSeek]
seek = [withAll withFilesInGit Command.Unannex.start, withNothing start]

start :: CommandStartNothing
start = do
	showStart "uninit" ""
	return $ Just $ perform

perform :: CommandPerform
perform = do
	g <- Annex.gitRepo

	gitPreCommitHookUnWrite g
	liftIO $ gitAttributesUnWrite g

	return $ Just $ return True

gitPreCommitHookUnWrite :: Git.Repo -> Annex ()
gitPreCommitHookUnWrite repo = do
	let hook = Command.Init.preCommitHook repo
	hookexists <- liftIO $ doesFileExist hook
	when hookexists $ 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."

gitAttributesUnWrite :: Git.Repo -> IO ()
gitAttributesUnWrite repo = do
	let attributes = Git.attributes repo
	attrexists <- doesFileExist attributes
	when attrexists $ do
		c <- readFileStrict attributes
		writeFile attributes $ unlines $
			filter (/= Command.Init.attrLine) $ lines c