diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs index 8304e04c1a..e7c2114b6f 100644 --- a/Annex/Ssh.hs +++ b/Annex/Ssh.hs @@ -154,8 +154,11 @@ sshConnectionCachingParams socketfile = sshSocketDirEnv :: String sshSocketDirEnv = "GIT_ANNEX_SSH_SOCKET_DIR" -{- ssh connection caching creates sockets, so will not work on a - - crippled filesystem. -} +{- Returns the directory where ssh connection caching sockets can be + - stored. + - + - The directory will be created if it does not exist. + -} sshCacheDir :: Annex (Maybe FilePath) sshCacheDir = eitherToMaybe <$> sshCacheDir' @@ -169,7 +172,10 @@ sshCacheDir' = Just tmpdir -> liftIO $ catchMsgIO $ usetmpdir tmpdir - , Right <$> fromRepo gitAnnexSshDir + , do + d <- fromRepo gitAnnexSshDir + createAnnexDirectory d + return (Right d) ) , return (Left "annex.sshcaching is not set to true") ) @@ -221,7 +227,6 @@ prepSocket socketfile sshhost sshparams = do -- Cleanup at shutdown. Annex.addCleanup SshCachingCleanup sshCleanup - liftIO $ createDirectoryIfMissing True $ parentDir socketfile let socketlock = socket2lock socketfile Annex.getState Annex.concurrency >>= \case diff --git a/Assistant/Threads/Merger.hs b/Assistant/Threads/Merger.hs index 82802fbb29..ac9435122a 100644 --- a/Assistant/Threads/Merger.hs +++ b/Assistant/Threads/Merger.hs @@ -26,8 +26,9 @@ import qualified Command.Sync mergeThread :: NamedThread mergeThread = namedThread "Merger" $ do g <- liftAnnex gitRepo - let dir = fromRawFilePath (Git.localGitDir g) "refs" - liftIO $ createDirectoryIfMissing True dir + let gitd = fromRawFilePath (Git.localGitDir g) + let dir = gitd "refs" + liftIO $ createDirectoryUnder gitd dir let hook a = Just <$> asIO2 (runHandler a) changehook <- hook onChange errhook <- hook onErr diff --git a/Assistant/Threads/TransferWatcher.hs b/Assistant/Threads/TransferWatcher.hs index 181cb10f55..e4316ffcd2 100644 --- a/Assistant/Threads/TransferWatcher.hs +++ b/Assistant/Threads/TransferWatcher.hs @@ -15,6 +15,7 @@ import Logs.Transfer import Utility.DirWatcher import Utility.DirWatcher.Types import qualified Remote +import Annex.Perms import Control.Concurrent import qualified Data.Map as M @@ -24,7 +25,7 @@ import qualified Data.Map as M transferWatcherThread :: NamedThread transferWatcherThread = namedThread "TransferWatcher" $ do dir <- liftAnnex $ gitAnnexTransferDir <$> gitRepo - liftIO $ createDirectoryIfMissing True dir + liftAnnex $ createAnnexDirectory dir let hook a = Just <$> asIO2 (runHandler a) addhook <- hook onAdd delhook <- hook onDel diff --git a/Assistant/WebApp/Configurators/Edit.hs b/Assistant/WebApp/Configurators/Edit.hs index 59d8d61247..c82fbe248f 100644 --- a/Assistant/WebApp/Configurators/Edit.hs +++ b/Assistant/WebApp/Configurators/Edit.hs @@ -41,6 +41,7 @@ import Remote.Helper.Encryptable (extractCipher, parseEncryptionConfig) import Types.Crypto import Utility.Gpg import Annex.UUID +import Annex.Perms import Assistant.Ssh import Config import Config.GitConfig @@ -246,9 +247,9 @@ checkAssociatedDirectory cfg (Just r) = do repoconfig <- M.lookup (Remote.uuid r) <$> readRemoteLog case repoGroup cfg of RepoGroupStandard gr -> case associatedDirectory repoconfig gr of - Just d -> inRepo $ \g -> - createDirectoryIfMissing True $ - fromRawFilePath (Git.repoPath g) d + Just d -> do + top <- fromRawFilePath <$> fromRepo Git.repoPath + createWorkTreeDirectory (top d) Nothing -> noop _ -> noop diff --git a/CHANGELOG b/CHANGELOG index b7b81c227a..cd41f23c8f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ git-annex (8.20200227) UNRELEASED; urgency=medium + * Improve behavior when a directory git-annex is writing to gets + unmounted. Previously it could in some cases re-create the mount point + and directory tree, and even write object contents to the wrong disk. * Bugfix: Don't ignore --debug when it is followed by -c. * whereis: If a remote fails to report on urls where a key is located, display a warning, rather than giving up and not displaying diff --git a/doc/todo/stop_using_createDirectoryIfMissing_True.mdwn b/doc/todo/stop_using_createDirectoryIfMissing_True.mdwn index 3faca053f3..f82555a47d 100644 --- a/doc/todo/stop_using_createDirectoryIfMissing_True.mdwn +++ b/doc/todo/stop_using_createDirectoryIfMissing_True.mdwn @@ -28,3 +28,5 @@ point, which can be either .git/annex or the top of the worktree depending on what's being done. --[[Joey]] [[!tag confirmed]] + +> [[fixed|done]], all relevant calls have been converted. --[[Joey]]