Return updated permissions from chmod
This commit is contained in:
parent
2516940029
commit
ae84c3efc9
1 changed files with 13 additions and 3 deletions
|
@ -180,7 +180,7 @@ import Control.Concurrent.Async (Async, withAsync, wait, concurrently)
|
||||||
import Control.Concurrent (threadDelay)
|
import Control.Concurrent (threadDelay)
|
||||||
import Control.Exception (bracket, throwIO)
|
import Control.Exception (bracket, throwIO)
|
||||||
import Control.Foldl (FoldM(..), list)
|
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.IO.Class (MonadIO(..))
|
||||||
import Control.Monad.Managed (Managed, managed)
|
import Control.Monad.Managed (Managed, managed)
|
||||||
#ifdef mingw32_HOST_OS
|
#ifdef mingw32_HOST_OS
|
||||||
|
@ -593,11 +593,21 @@ touch file = do
|
||||||
> chmod executable "foo.txt" -- chmod u+x foo.txt
|
> chmod executable "foo.txt" -- chmod u+x foo.txt
|
||||||
> chmod nonwritable "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
|
chmod modifyPermissions path = liftIO (do
|
||||||
let path' = deslash (Filesystem.encodeString path)
|
let path' = deslash (Filesystem.encodeString path)
|
||||||
permissions <- Directory.getPermissions 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, nonreadable :: Permissions -> Permissions
|
||||||
readable = Directory.setOwnerReadable True
|
readable = Directory.setOwnerReadable True
|
||||||
|
|
Loading…
Reference in a new issue