azubi-0.1.0.0: src/Azubi/Commands/Git.hs
module Azubi.Commands.Git where
import Azubi.Core.Command
import Azubi.Commands.Existance
import Azubi.Commands.File
import System.FilePath
data Repository = Git { repo :: String
, folder :: String
, options :: [GitOptions]}
data GitOptions = Branch String
| Recursive
instance Existance Repository where
doExists (Git repo folder options) con =
[Dependency{
body = bodyCommands
, dependency = [IfCommand{
testCommand = BoolCommand $ "-d " ++ folder
, thenCommand = []
, elseCommand = (exists (Directory parentFolder) con)
++ [ InfoMsg $ "clone git repository " ++ repo ++ " to folder " ++ folder
, ShellCommand $ unwords $ ["git", "clone"] ++ gitOptions ++ [repo, folder] ]
}]
}]
where
parentFolder = takeDirectory folder
gitOptions = concat $ map (\opt -> case opt of
Recursive -> ["--recursive"]
_ -> []
) options
bodyCommands = concat $ map (\opt -> case opt of
Branch branch -> [ ShellCommand $ "cd " ++ folder
, ShellCommand $ "git checkout " ++ branch]
_ -> []
) options
notExists (Git _ folder _) con = notExists (Directory folder) con