From: Joey Hess Date: Wed, 16 Dec 2015 00:42:35 +0000 (-0400) Subject: bring back some deleted functions that git-repair uses X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~320^2~218 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=25bc6ea6d8d6b980a69c69aeee844c5cd4401c5c;p=git-annex.git bring back some deleted functions that git-repair uses --- diff --git a/Utility/FileMode.hs b/Utility/FileMode.hs index 1e9b634836..efef5fa258 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. -}