diff options
author | Joey Hess <joey@kitenet.net> | 2013-02-15 16:37:57 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-02-15 16:37:57 -0400 |
commit | 186732d10740fec3b29751a6076c60148e3479f7 (patch) | |
tree | a218c74c1f9fefe14a23beabc2ca46e5f4afc158 | |
parent | ecd610e955e0cfa5c88535039f434ea2a299068c (diff) |
Revert "Clean up direct mode cache and mapping info when dropping keys."
This reverts commit f797939d15a2b414e62b28ccb0bd9e5b77978d76.
This was buggy, it caused the direct mode cache to be lost when dropping
keys, so when the file is gotten back, it's stored in indirect mode.
Note to self: Do not attempt bug fixes at 6 am!
-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]] |