module Propellor.Git.Config where
import Propellor.Git
import Utility.Process
import Utility.Exception
import Utility.SafeCommand
import Utility.Monad
import Control.Monad
import Control.Applicative
import Prelude
getGitConfigValue :: String -> IO (Maybe String)
getGitConfigValue :: String -> IO (Maybe String)
getGitConfigValue String
key = do
Maybe String
value <- forall (m :: * -> *) a. MonadCatch m => m a -> m (Maybe a)
catchMaybeIO forall a b. (a -> b) -> a -> b
$
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
readProcessString
"git" [String
"config", String
key]
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ case Maybe String
value of
Just String
v | Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
v) -> forall a. a -> Maybe a
Just String
v
Maybe String
_ -> forall a. Maybe a
Nothing
getGitConfigBool :: String -> IO Bool
getGitConfigBool :: String -> IO Bool
getGitConfigBool String
key = do
Maybe String
value <- forall (m :: * -> *) a. MonadCatch m => m a -> m (Maybe a)
catchMaybeIO forall a b. (a -> b) -> a -> b
$
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
"config", String
"--bool", String
key]
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ case Maybe String
value of
Just String
"true" -> Bool
True
Maybe String
_ -> Bool
False
setRepoUrl :: String -> IO ()
setRepoUrl :: String -> IO ()
setRepoUrl String
"" = forall (m :: * -> *) a. Monad m => a -> m a
return ()
setRepoUrl String
url = do
String
subcmd <- forall (m :: * -> *) a. Monad m => m Bool -> (m a, m a) -> m a
ifM IO Bool
hasOrigin (forall (f :: * -> *) a. Applicative f => a -> f a
pure String
"set-url", forall (f :: * -> *) a. Applicative f => a -> f a
pure String
"add")
forall (f :: * -> *) a. Functor f => f a -> f ()
void forall a b. (a -> b) -> a -> b
$ String -> [CommandParam] -> IO Bool
boolSystem String
"git" [String -> CommandParam
Param String
"remote", String -> CommandParam
Param String
subcmd, String -> CommandParam
Param String
"origin", String -> CommandParam
Param String
url]
String
branch <- IO String
getCurrentBranch
let branchval :: String -> String
branchval String
s = String
"branch." forall a. [a] -> [a] -> [a]
++ String
branch forall a. [a] -> [a] -> [a]
++ String
"." forall a. [a] -> [a] -> [a]
++ String
s
forall (f :: * -> *) a. Functor f => f a -> f ()
void forall a b. (a -> b) -> a -> b
$ String -> [CommandParam] -> IO Bool
boolSystem String
"git" [String -> CommandParam
Param String
"config", String -> CommandParam
Param (String -> String
branchval String
"remote"), String -> CommandParam
Param String
"origin"]
forall (f :: * -> *) a. Functor f => f a -> f ()
void forall a b. (a -> b) -> a -> b
$ String -> [CommandParam] -> IO Bool
boolSystem String
"git" [String -> CommandParam
Param String
"config", String -> CommandParam
Param (String -> String
branchval String
"merge"), String -> CommandParam
Param forall a b. (a -> b) -> a -> b
$ String
"refs/heads/"forall a. [a] -> [a] -> [a]
++String
branch]
getRepoUrl :: IO (Maybe String)
getRepoUrl :: IO (Maybe String)
getRepoUrl = forall (m :: * -> *) a b.
Monad m =>
(a -> m (Maybe b)) -> [a] -> m (Maybe b)
getM String -> IO (Maybe String)
getGitConfigValue [String]
urls
where
urls :: [String]
urls = [String
"remote.deploy.url", String
"remote.origin.url"]