diff options
author | Joey Hess <joey@kitenet.net> | 2014-08-04 09:00:57 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-08-04 09:01:40 -0400 |
commit | f2213b0cb0b21dbbc651b4c869e85d7fd7f839bd (patch) | |
tree | 3963e284c771ffa7e7fb94ce6a185ea53cb3ca9e /Remote/Directory.hs | |
parent | 05bbd868072b293022b06354c990f5d8e674c0b6 (diff) |
gcrypt: fix removal of key that does not exist
Generalized code from Remote.Directory and reused it.
Test suite now passes for local gcrypt repos.
Diffstat (limited to 'Remote/Directory.hs')
-rw-r--r-- | Remote/Directory.hs | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/Remote/Directory.hs b/Remote/Directory.hs index db141e01a..3b54ad200 100644 --- a/Remote/Directory.hs +++ b/Remote/Directory.hs @@ -7,7 +7,7 @@ {-# LANGUAGE CPP #-} -module Remote.Directory (remote) where +module Remote.Directory (remote, removeDirGeneric) where import qualified Data.ByteString.Lazy as L import qualified Data.Map as M @@ -152,7 +152,20 @@ retrieveCheap _ _ _ _ = return False #endif remove :: FilePath -> Key -> Annex Bool -remove d k = liftIO $ do +remove d k = liftIO $ removeDirGeneric d (storeDir d k) + +{- Removes the directory, which must be located under the topdir. + - + - Succeeds even on directories and contents that do not have write + - permission. + - + - If the directory does not exist, succeeds as long as the topdir does + - exist. If the topdir does not exist, fails, because in this case the + - remote is not currently accessible and probably still has the content + - we were supposed to remove from it. + -} +removeDirGeneric :: FilePath -> FilePath -> IO Bool +removeDirGeneric topdir dir = do void $ tryIO $ allowWrite dir #ifdef mingw32_HOST_OS {- Windows needs the files inside the directory to be writable @@ -162,14 +175,9 @@ remove d k = liftIO $ do ok <- catchBoolIO $ do removeDirectoryRecursive dir return True - {- Removing the subdirectory will fail if it doesn't exist. - - But, we want to succeed in that case, as long as the directory - - remote's top-level directory does exist. -} if ok then return ok - else doesDirectoryExist d <&&> (not <$> doesDirectoryExist dir) - where - dir = storeDir d k + else doesDirectoryExist topdir <&&> (not <$> doesDirectoryExist dir) checkPresent :: FilePath -> ChunkConfig -> Key -> Annex (Either String Bool) checkPresent d (LegacyChunks _) k = Legacy.checkPresent d locations k |