From ae84c3efc9f9469f6af3009f56f08581475ee062 Mon Sep 17 00:00:00 2001 From: Index Int Date: Sat, 9 May 2015 01:11:40 +0300 Subject: [PATCH] Return updated permissions from `chmod` --- src/Turtle/Prelude.hs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Turtle/Prelude.hs b/src/Turtle/Prelude.hs index f892bf9..b36d4e4 100644 --- a/src/Turtle/Prelude.hs +++ b/src/Turtle/Prelude.hs @@ -180,7 +180,7 @@ import Control.Concurrent.Async (Async, withAsync, wait, concurrently) import Control.Concurrent (threadDelay) import Control.Exception (bracket, throwIO) import Control.Foldl (FoldM(..), list) -import Control.Monad (liftM, msum) +import Control.Monad (liftM, msum, when) import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Managed (Managed, managed) #ifdef mingw32_HOST_OS @@ -593,11 +593,21 @@ touch file = do > chmod executable "foo.txt" -- chmod u+x foo.txt > chmod nonwritable "foo.txt" -- chmod u-x foo.txt -} -chmod :: MonadIO io => (Permissions -> Permissions) -> FilePath -> io () +chmod + :: MonadIO io + => (Permissions -> Permissions) + -- ^ Permissions update function + -> FilePath + -- ^ Path + -> io (Bool, Permissions) + -- ^ Updated permissions chmod modifyPermissions path = liftIO (do let path' = deslash (Filesystem.encodeString path) permissions <- Directory.getPermissions path' - Directory.setPermissions path' (modifyPermissions permissions) ) + let permissions' = modifyPermissions permissions + changed = permissions /= permissions' + when changed (Directory.setPermissions path' permissions') + return (changed, permissions') ) readable, nonreadable :: Permissions -> Permissions readable = Directory.setOwnerReadable True