module Stack2nix.External.VCS.Git
( Command(..), ExternalCmd(..), InternalCmd(..)
, git
) where
import Stack2nix.External.Util (failHard, runCmd, runCmdFrom)
data Command = OutsideRepo ExternalCmd
| InsideRepo FilePath InternalCmd
data ExternalCmd = Clone String FilePath
data InternalCmd = Checkout CommitRef
type CommitRef = String
exe :: String
exe = "git"
git :: Command -> IO ()
git (OutsideRepo cmd) = runExternal cmd
git (InsideRepo dir cmd) = runInternal dir cmd
runExternal :: ExternalCmd -> IO ()
runExternal (Clone uri dir) = do
runCmd exe ["clone", uri, dir] >>= failHard
runInternal :: FilePath -> InternalCmd -> IO ()
runInternal repoDir (Checkout ref) = do
runCmdFrom repoDir exe ["checkout", ref] >>= failHard