summaryrefslogtreecommitdiff
path: root/Annex
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-02-15 16:37:57 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-02-15 16:37:57 -0400
commit186732d10740fec3b29751a6076c60148e3479f7 (patch)
treea218c74c1f9fefe14a23beabc2ca46e5f4afc158 /Annex
parentecd610e955e0cfa5c88535039f434ea2a299068c (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!
Diffstat (limited to 'Annex')
-rw-r--r--Annex/Content.hs10
-rw-r--r--Annex/Content/Direct.hs7
2 files changed, 10 insertions, 7 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)