diff options
-rw-r--r-- | Annex/Content.hs | 10 | ||||
-rw-r--r-- | Annex/Content/Direct.hs | 7 | ||||
-rw-r--r-- | Command/Drop.hs | 5 | ||||
-rw-r--r-- | doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn | 3 |
4 files changed, 11 insertions, 14 deletions
diff --git a/Annex/Content.hs b/Annex/Content.hs index 5abcb2a9e..6ec3368c6 100644 --- a/Annex/Content.hs +++ b/Annex/Content.hs @@ -28,7 +28,6 @@ module Annex.Content ( freezeContent, thawContent, replaceFile, - cleanObjectLoc, ) where import System.IO.Unsafe (unsafeInterleaveIO) @@ -330,12 +329,9 @@ withObjectLoc key indirect direct = ifM isDirect cleanObjectLoc :: Key -> Annex () cleanObjectLoc key = do file <- inRepo $ gitAnnexLocation key - let dir = parentDir file unlessM crippledFileSystem $ - void $ liftIO $ catchMaybeIO $ allowWrite dir - void $ liftIO $ catchMaybeIO $ do - removeDirectoryRecursive dir - liftIO $ removeparents dir (2 :: Int) + void $ liftIO $ catchMaybeIO $ allowWrite $ parentDir file + liftIO $ removeparents file (3 :: Int) where removeparents _ 0 = noop removeparents file n = do @@ -357,8 +353,8 @@ removeAnnex key = withObjectLoc key remove removedirect cleanObjectLoc key removedirect fs = do cache <- recordedInodeCache key + removeInodeCache key mapM_ (resetfile cache) fs - cleanObjectLoc key resetfile cache f = whenM (liftIO $ compareInodeCache f cache) $ do l <- calcGitLink f key top <- fromRepo Git.repoPath diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs index 07edb4dd9..e38fc23ce 100644 --- a/Annex/Content/Direct.hs +++ b/Annex/Content/Direct.hs @@ -15,6 +15,7 @@ module Annex.Content.Direct ( updateInodeCache, writeInodeCache, compareInodeCache, + removeInodeCache, toInodeCache, ) where @@ -119,5 +120,11 @@ writeInodeCache key cache = withInodeCacheFile key $ \f -> do createContentDir f liftIO $ writeFile f $ showInodeCache cache +{- Removes an inode cache. -} +removeInodeCache :: Key -> Annex () +removeInodeCache key = withInodeCacheFile key $ \f -> do + createContentDir f -- also thaws directory + liftIO $ nukeFile f + withInodeCacheFile :: Key -> (FilePath -> Annex a) -> Annex a withInodeCacheFile key a = a =<< inRepo (gitAnnexInodeCache key) diff --git a/Command/Drop.hs b/Command/Drop.hs index 8e5ecc952..f7491deae 100644 --- a/Command/Drop.hs +++ b/Command/Drop.hs @@ -60,10 +60,7 @@ performLocal key numcopies knownpresentremote = lockContent key $ do untrusteduuids <- trustGet UnTrusted let tocheck = Remote.remotesWithoutUUID remotes (trusteduuids'++untrusteduuids) stopUnless (canDropKey key numcopies trusteduuids' tocheck []) $ do - whenM (inAnnex key) $ - removeAnnex key - {- Clean up stale direct mode files that may exist. -} - cleanObjectLoc key + whenM (inAnnex key) $ removeAnnex key next $ cleanupLocal key performRemote :: Key -> Maybe Int -> Remote -> CommandPerform diff --git a/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn b/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn index 8f89c0480..09bfd0c3b 100644 --- a/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn +++ b/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn @@ -56,6 +56,3 @@ What version of git-annex are you using? On what operating system? git-annex: 3.20130124 Debian: sid 2013-02-01 - -> unused being confused by stale data left when switching from direct mode. -> I've made this be cleaned up. [[done]] --[[Joey]] |