summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-11 23:41:12 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-11 23:41:12 -0400
commit107074d6623a687d046615a5034af10be7ff1756 (patch)
treed93f62a7bd148af208eae116ad3cee9cd680bdf6
parent16b551726d9d846a51656b7b1d4736a3b1b438f4 (diff)
fiddle
-rw-r--r--GitRepo.hs26
1 files changed, 15 insertions, 11 deletions
diff --git a/GitRepo.hs b/GitRepo.hs
index 2f9084ff7..2a97e6070 100644
--- a/GitRepo.hs
+++ b/GitRepo.hs
@@ -7,6 +7,7 @@
module GitRepo (
GitRepo,
+ gitRepoFromPath,
gitRepoCurrent,
gitRepoTop,
gitDir,
@@ -35,8 +36,8 @@ data GitRepo = GitRepo {
} deriving (Show, Read, Eq)
{- GitRepo constructor -}
-gitRepo :: FilePath -> IO GitRepo
-gitRepo dir = do
+gitRepoFromPath :: FilePath -> IO GitRepo
+gitRepoFromPath dir = do
b <- isBareRepo dir
let r = GitRepo {
@@ -110,14 +111,17 @@ gitPipeRead repo params =
gitConfigRead :: GitRepo -> IO GitRepo
gitConfigRead repo = do
c <- gitPipeRead repo ["config", "--list"]
- return repo { config = Map.fromList $ parse c }
- where
- parse s = map pair $ lines s
- pair l = (key l, val l)
- key l = (keyval l) !! 0
- val l = join sep $ drop 1 $ keyval l
- keyval l = split sep l :: [String]
- sep = "="
+ return repo { config = gitConfigParse c }
+
+{- Parses git config --list output into a config map. -}
+gitConfigParse :: String -> Map.Map String String
+gitConfigParse s = Map.fromList $ map pair $ lines s
+ where
+ pair l = (key l, val l)
+ key l = (keyval l) !! 0
+ val l = join sep $ drop 1 $ keyval l
+ keyval l = split sep l :: [String]
+ sep = "="
{- Returns a single git config setting, or a default value if not set. -}
gitConfig :: GitRepo -> String -> String -> String
@@ -132,7 +136,7 @@ gitRepoCurrent = do
cwd <- getCurrentDirectory
top <- seekUp cwd isRepoTop
case top of
- (Just dir) -> gitRepo dir
+ (Just dir) -> gitRepoFromPath dir
Nothing -> error "Not in a git repository."
seekUp :: String -> (String -> IO Bool) -> IO (Maybe String)