diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-02-12 15:33:05 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-02-12 15:33:44 -0400 |
commit | 329267cb2b11da52956a86d9caec5225251a5ac1 (patch) | |
tree | ad86509598b515ed0529afc9f02c8076311f0004 /Git | |
parent | 15b68af5e7897d5747d21174ecaa682b69b90865 (diff) |
avoid unncessary IO
Diffstat (limited to 'Git')
-rw-r--r-- | Git/Config.hs | 7 | ||||
-rw-r--r-- | Git/Construct.hs | 15 | ||||
-rw-r--r-- | Git/CurrentRepo.hs | 4 |
3 files changed, 12 insertions, 14 deletions
diff --git a/Git/Config.hs b/Git/Config.hs index 15109319a..44e0ad9a9 100644 --- a/Git/Config.hs +++ b/Git/Config.hs @@ -66,10 +66,9 @@ global = do home <- myHomeDir ifM (doesFileExist $ home </> ".gitconfig") ( do - repo <- Git.Construct.fromUnknown - repo' <- withHandle StdoutHandle createProcessSuccess p $ - hRead repo - return $ Just repo' + repo <- withHandle StdoutHandle createProcessSuccess p $ + hRead (Git.Construct.fromUnknown) + return $ Just repo , return Nothing ) where diff --git a/Git/Construct.hs b/Git/Construct.hs index a0632a223..5b206054b 100644 --- a/Git/Construct.hs +++ b/Git/Construct.hs @@ -19,8 +19,8 @@ module Git.Construct ( fromRemotes, fromRemoteLocation, repoAbsPath, - newFrom, checkForRepo, + newFrom, ) where #ifndef mingw32_HOST_OS @@ -48,7 +48,7 @@ fromCwd = getCurrentDirectory >>= seekUp Nothing -> case upFrom dir of Nothing -> return Nothing Just d -> seekUp d - Just loc -> Just <$> newFrom loc + Just loc -> pure $ Just $ newFrom loc {- Local Repo constructor, accepts a relative or absolute path. -} fromPath :: FilePath -> IO Repo @@ -62,7 +62,7 @@ fromAbsPath dir | otherwise = error $ "internal error, " ++ dir ++ " is not absolute" where - ret = newFrom . LocalUnknown + ret = pure . newFrom . LocalUnknown {- Git always looks for "dir.git" in preference to - to "dir", even if dir ends in a "/". -} canondir = dropTrailingPathSeparator dir @@ -90,13 +90,13 @@ fromUrl url fromUrlStrict :: String -> IO Repo fromUrlStrict url | startswith "file://" url = fromAbsPath $ unEscapeString $ uriPath u - | otherwise = newFrom $ Url u + | otherwise = pure $ newFrom $ Url u where u = fromMaybe bad $ parseURI url bad = error $ "bad url " ++ url {- Creates a repo that has an unknown location. -} -fromUnknown :: IO Repo +fromUnknown :: Repo fromUnknown = newFrom Unknown {- Converts a local Repo into a remote repo, using the reference repo @@ -223,8 +223,8 @@ checkForRepo dir = gitdirprefix = "gitdir: " gitSignature file = doesFileExist $ dir </> file -newFrom :: RepoLocation -> IO Repo -newFrom l = return Repo +newFrom :: RepoLocation -> Repo +newFrom l = Repo { location = l , config = M.empty , fullconfig = M.empty @@ -234,4 +234,3 @@ newFrom l = return Repo , gitGlobalOpts = [] } - diff --git a/Git/CurrentRepo.hs b/Git/CurrentRepo.hs index 9de00034b..dab4ad21b 100644 --- a/Git/CurrentRepo.hs +++ b/Git/CurrentRepo.hs @@ -50,8 +50,8 @@ get = do configure (Just d) _ = do absd <- absPath d curr <- getCurrentDirectory - r <- newFrom $ Local { gitdir = absd, worktree = Just curr } - Git.Config.read r + Git.Config.read $ newFrom $ + Local { gitdir = absd, worktree = Just curr } configure Nothing Nothing = error "Not in a git repository." addworktree w r = changelocation r $ |