From 95a1f6b2accca9b7c6a6c30c92380dc0de57d3a0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 14 Mar 2012 12:17:38 -0400 Subject: check hook executability --- Git.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Git.hs') diff --git a/Git.hs b/Git.hs index 043cda5ea..9b7dccfeb 100644 --- a/Git.hs +++ b/Git.hs @@ -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. - -- cgit v1.2.3