check hook executability

This commit is contained in:
Joey Hess 2012-03-14 12:17:38 -04:00
parent caf97fcffd
commit 95a1f6b2ac
2 changed files with 15 additions and 2 deletions

10
Git.hs
View file

@ -32,9 +32,11 @@ import qualified Data.Map as M
import Data.Char
import Network.URI (uriPath, uriScheme, unEscapeString)
import System.Directory
import System.Posix.Files
import Common
import Git.Types
import Utility.FileMode
{- User-visible description of a git repo. -}
repoDescribe :: Repo -> String
@ -111,8 +113,12 @@ gitDir repo
hookPath :: String -> Repo -> IO (Maybe FilePath)
hookPath script repo = do
let hook = gitDir repo </> "hooks" </> script
ok <- doesFileExist hook
return $ if ok then Just hook else Nothing
e <- doesFileExist hook
if e
then do
m <- fileMode <$> getFileStatus hook
return $ if isExecutable m then Just hook else Nothing
else return Nothing
{- Path to a repository's --work-tree, that is, its top.
-