diff options
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Fsck.hs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Command/Fsck.hs b/Command/Fsck.hs index 353fcb7b6..6f45cfabc 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -27,6 +27,9 @@ import Utility.FileMode import Config import qualified Option import Types.Key +import System.Posix.Types +import System.Posix.Files +import Data.Bits def :: [Command] def = [withOptions options $ command "fsck" paramPaths seek @@ -318,3 +321,25 @@ badContentRemote remote key = do Remote.logStatus remote key InfoMissing return $ (if ok then "dropped from " else "failed to drop from ") ++ Remote.name remote + +isSticky :: String -> IO Bool +isSticky f = do + fs <- getFileStatus f + let mode = fileMode fs + return $ 0/= mode .&. 512 + +setSticky :: String -> IO FileMode +setSticky f = do + fs <- getFileStatus f + let mode = fileMode fs + let newmode = mode .|. 512 + setFileMode f newmode + return newmode + +updateMetadata :: Key -> Annex Bool +updateMetadata key = do + file <- inRepo $ gitAnnexLocation key + let parent = parentDir file + liftIO $ touchFile parent + liftIO $ setSticky parent + return True |