summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Content.hs10
-rw-r--r--Annex/Content/Direct.hs7
-rw-r--r--Command/Drop.hs5
-rw-r--r--doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn3
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]]