summaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Command')
-rw-r--r--Command/Fsck.hs25
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