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 = (Char -> Bool) -> String -> String forall a. (a -> Bool) -> [a] -> [a] takeWhile (Char -> Char -> Bool forall a. Eq a => a -> a -> Bool /= Char '\n') (String -> String) -> IO String -> IO String 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 = (Char -> Bool) -> String -> String forall a. (a -> Bool) -> [a] -> [a] takeWhile (Char -> Char -> Bool forall a. Eq a => a -> a -> Bool /= Char '\n') (String -> String) -> IO String -> IO String 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 = (Char -> Bool) -> String -> String forall a. (a -> Bool) -> [a] -> [a] takeWhile (Char -> Char -> Bool forall a. Eq a => a -> a -> Bool /= Char '\n') (String -> String) -> IO String -> IO String 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 = Bool -> IO Bool -> IO Bool forall (m :: * -> *) a. MonadCatch m => a -> m a -> m a catchDefaultIO Bool False (IO Bool -> IO Bool) -> IO Bool -> IO Bool forall a b. (a -> b) -> a -> b $ do [String] rs <- String -> [String] lines (String -> [String]) -> IO String -> IO [String] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "remote"] Bool -> IO Bool forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (Bool -> IO Bool) -> Bool -> IO Bool forall a b. (a -> b) -> a -> b $ String remotename String -> [String] -> Bool forall a. Eq a => a -> [a] -> Bool 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 = Maybe String -> IO (Maybe String) -> IO (Maybe String) forall (m :: * -> *) a. MonadCatch m => a -> m a -> m a catchDefaultIO Maybe String forall a. Maybe a Nothing (IO (Maybe String) -> IO (Maybe String)) -> IO (Maybe String) -> IO (Maybe String) forall a b. (a -> b) -> a -> b $ [String] -> Maybe String forall a. [a] -> Maybe a headMaybe ([String] -> Maybe String) -> (String -> [String]) -> String -> Maybe String forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> [String] lines (String -> Maybe String) -> IO String -> IO (Maybe String) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> [String] -> IO String readProcess String "git" [String "config", String "remote." String -> String -> String forall a. [a] -> [a] -> [a] ++ String remotename String -> String -> String 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 = String -> Version forall {a}. Read a => String -> [a] extract (String -> Version) -> IO String -> IO Version 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] _) -> (String -> Maybe a) -> [String] -> [a] forall a b. (a -> Maybe b) -> [a] -> [b] mapMaybe String -> Maybe a forall a. Read a => String -> Maybe a readish ([String] -> [a]) -> [String] -> [a] forall a b. (a -> b) -> a -> b $ (Char -> Bool) -> String -> [String] forall a. (a -> Bool) -> [a] -> [[a]] segment (Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char '.') (String -> [String]) -> String -> [String] forall a b. (a -> b) -> a -> b $ [String] -> String unwords ([String] -> String) -> [String] -> String forall a b. (a -> b) -> a -> b $ Int -> [String] -> [String] forall a. Int -> [a] -> [a] drop Int 2 ([String] -> [String]) -> [String] -> [String] forall a b. (a -> b) -> a -> b $ String -> [String] words String l