fix local dropping to not require extra locking of copies, but only that the local copy be locked for removal

This commit is contained in:
Joey Hess 2015-10-09 15:48:02 -04:00
parent 1043880432
commit 6a72045707
Failed to extract signature
12 changed files with 73 additions and 49 deletions

View file

@ -13,7 +13,8 @@ module Annex.Content (
inAnnexSafe,
inAnnexCheck,
lockContentShared,
lockContentExclusive,
lockContentForRemoval,
ContentRemovalLock,
getViaTmp,
getViaTmp',
checkDiskSpaceToGet,
@ -192,14 +193,12 @@ lockContentShared key a = lockContentUsing lock key $ do
lock = winLocker lockShared
#endif
newtype ContentLockExclusive = ContentLockExclusive Key
{- Exclusively locks content, while performing an action that
- might remove it.
-}
lockContentExclusive :: Key -> (ContentLockExclusive -> Annex a) -> Annex a
lockContentExclusive key a = lockContentUsing lock key $
a (ContentLockExclusive key)
lockContentForRemoval :: Key -> (ContentRemovalLock -> Annex a) -> Annex a
lockContentForRemoval key a = lockContentUsing lock key $
a (ContentRemovalLock key)
where
#ifndef mingw32_HOST_OS
{- Since content files are stored with the write bit disabled, have
@ -547,8 +546,8 @@ cleanObjectLoc key cleaner = do
- In direct mode, deletes the associated files or files, and replaces
- them with symlinks.
-}
removeAnnex :: ContentLockExclusive -> Annex ()
removeAnnex (ContentLockExclusive key) = withObjectLoc key remove removedirect
removeAnnex :: ContentRemovalLock -> Annex ()
removeAnnex (ContentRemovalLock key) = withObjectLoc key remove removedirect
where
remove file = cleanObjectLoc key $ do
secureErase file