diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-12-15 20:42:35 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-12-15 20:42:35 -0400 |
commit | 968e98a38c201ac1a3cd0ff1453ced078ed320a4 (patch) | |
tree | 223d7d4232306efd1738fae40cd06854f75959ee /Utility | |
parent | 653f36dbcca2596af06ef226b7623f9190b4b483 (diff) |
bring back some deleted functions that git-repair uses
Diffstat (limited to 'Utility')
-rw-r--r-- | Utility/FileMode.hs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Utility/FileMode.hs b/Utility/FileMode.hs index 1e9b63483..efef5fa25 100644 --- a/Utility/FileMode.hs +++ b/Utility/FileMode.hs @@ -27,12 +27,24 @@ import Utility.Exception {- Applies a conversion function to a file's mode. -} modifyFileMode :: FilePath -> (FileMode -> FileMode) -> IO () -modifyFileMode f convert = do +modifyFileMode f convert = void $ modifyFileMode' f convert + +modifyFileMode' :: FilePath -> (FileMode -> FileMode) -> IO FileMode +modifyFileMode' f convert = do s <- getFileStatus f let old = fileMode s let new = convert old when (new /= old) $ setFileMode f new + return old + +{- Runs an action after changing a file's mode, then restores the old mode. -} +withModifiedFileMode :: FilePath -> (FileMode -> FileMode) -> IO a -> IO a +withModifiedFileMode file convert a = bracket setup cleanup go + where + setup = modifyFileMode' file convert + cleanup oldmode = modifyFileMode file (const oldmode) + go _ = a {- Adds the specified FileModes to the input mode, leaving the rest - unchanged. -} |