module Propellor.Git where import Utility.Process import Utility.Exception import Utility.Directory import Utility.Misc import Utility.PartialPrelude import Data.Maybe import Control.Applicative import Prelude getCurrentBranch :: IO String getCurrentBranch :: IO String getCurrentBranch = forall a. (a -> Bool) -> [a] -> [a] takeWhile (forall a. Eq a => a -> a -> Bool /= Char '\n') forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "symbolic-ref", String "--short", String "HEAD"] getCurrentBranchRef :: IO String getCurrentBranchRef :: IO String getCurrentBranchRef = forall a. (a -> Bool) -> [a] -> [a] takeWhile (forall a. Eq a => a -> a -> Bool /= Char '\n') forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "symbolic-ref", String "HEAD"] getCurrentGitSha1 :: String -> IO String getCurrentGitSha1 :: String -> IO String getCurrentGitSha1 String branchref = forall a. (a -> Bool) -> [a] -> [a] takeWhile (forall a. Eq a => a -> a -> Bool /= Char '\n') forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "show-ref", String "--hash", String branchref] hasOrigin :: IO Bool hasOrigin :: IO Bool hasOrigin = String -> IO Bool hasRemote String "origin" hasRemote :: String -> IO Bool hasRemote :: String -> IO Bool hasRemote String remotename = forall (m :: * -> *) a. MonadCatch m => a -> m a -> m a catchDefaultIO Bool False forall a b. (a -> b) -> a -> b $ do [String] rs <- String -> [String] lines forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "remote"] forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ String remotename forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool `elem` [String] rs remoteUrl :: String -> IO (Maybe String) remoteUrl :: String -> IO (Maybe String) remoteUrl String remotename = forall (m :: * -> *) a. MonadCatch m => a -> m a -> m a catchDefaultIO forall a. Maybe a Nothing forall a b. (a -> b) -> a -> b $ forall a. [a] -> Maybe a headMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> [String] lines forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "config", String "remote." forall a. [a] -> [a] -> [a] ++ String remotename forall a. [a] -> [a] -> [a] ++ String ".url"] hasGitRepo :: IO Bool hasGitRepo :: IO Bool hasGitRepo = String -> IO Bool doesFileExist String ".git/HEAD" type Version = [Int] gitVersion :: IO Version gitVersion :: IO Version gitVersion = forall {a}. Read a => String -> [a] extract forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "--version"] where extract :: String -> [a] extract String s = case String -> [String] lines String s of [] -> [] (String l:[String] _) -> forall a b. (a -> Maybe b) -> [a] -> [b] mapMaybe forall a. Read a => String -> Maybe a readish forall a b. (a -> b) -> a -> b $ forall a. (a -> Bool) -> [a] -> [[a]] segment (forall a. Eq a => a -> a -> Bool == Char '.') forall a b. (a -> b) -> a -> b $ [String] -> String unwords forall a b. (a -> b) -> a -> b $ forall a. Int -> [a] -> [a] drop Int 2 forall a b. (a -> b) -> a -> b $ String -> [String] words String l