git.iko.soy/typeable/gitrev
on master help sign in
use rev-parse to find repo root

Fix adapted from @snoyberg in #11

commite1f286709fbe1b9bd50fcdc1b4206daec26f2bbb authorAdam C. Foltzer <acfoltzer@galois.com> dateThu 16 Mar 2017, 19:14 (10 years ago) parenta0cd8fe
1 file changed+14−4
src/Development/GitRev.hs+14−4
src/Development/GitRev.hs+14−4
@@ -89,11 +89,11 @@ runGit args def useIdx = do
8989 ExitFailure _ -> return def
9090 else return def
9191
92−-- | Determine where our git directory is, in case we're in a
92+-- | Determine where our @.git@ directory is, in case we're in a
9393-- submodule.
94−getGitDirectory :: IO FilePath
95−getGitDirectory = do
96− pwd <- getCurrentDirectory
94+getDotGit :: IO FilePath
95+getDotGit = do
96+ pwd <- getGitRoot
9797 let dotGit = pwd </> ".git"
9898 oops = return dotGit -- it's gonna fail, that's fine
9999 isDir <- doesDirectoryExist dotGit
@@ -109,6 +109,16 @@ getGitDirectory = do
109109 else oops
110110 _ -> oops
111111
112+-- | Get the root directory of the Git repo.
113+getGitRoot :: IO FilePath
114+getGitRoot = do
115+ pwd <- getCurrentDirectory
116+ (code, out, err) <-
117+ readProcessWithExitCode "git" ["rev-parse", "--show-toplevel"] ""
118+ case code of
119+ ExitSuccess -> return $ takeWhile (/= '\n') out
120+ ExitFailure _ -> return pwd -- later steps will fail, that's fine
121+
112122-- | Type to flag if the git index is used or not in a call to runGit
113123data IndexUsed = IdxUsed -- ^ The git index is used
114124 | IdxNotUsed -- ^ The git index is /not/ used