summaryrefslogtreecommitdiff
path: root/Propellor/Property/GitHome.hs
blob: 400586e2595c806d08f29f1f33d03be83d138a4f (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
module Propellor.Property.GitHome where

import Propellor.Common
import qualified Propellor.Property.Apt as Apt
import Propellor.Property.User

{- | Clones Joey Hess's git home directory, and runs its fixups script. -}
installedFor :: UserName -> Property
installedFor user = check (not <$> hasGitDir user) $ 
	Property ("githome " ++ user) (go =<< homedir user)
		`requires` Apt.installed ["git", "myrepos"]
  where
 	go Nothing = noChange
	go (Just home) = do
		let tmpdir = home </> "githome"
		ok <- boolSystem "git" [Param "clone", Param url, Param tmpdir]
			<&&> (and <$> moveout tmpdir home)
			<&&> (catchBoolIO $ removeDirectory tmpdir >> return True)
			<&&> boolSystem "su" [Param "-c", Param "cd; rm -rf .aptitude/ .bashrc .profile; mr checkout; bin/fixups", Param user]
		return $ if ok then MadeChange else FailedChange
	moveout tmpdir home = do
		fs <- dirContents tmpdir
		forM fs $ \f -> boolSystem "mv" [File f, File home]
	url = "git://git.kitenet.net/joey/home"

hasGitDir :: UserName -> IO Bool
hasGitDir user = go =<< homedir user
  where
	go Nothing = return False
	go (Just home) = doesDirectoryExist (home </> ".git")