From: Joey Hess Date: Fri, 6 Mar 2020 15:57:15 +0000 (-0400) Subject: mostly finished with createDirectoryUnder conversion X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~126^2~32 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7f992ef59c4d2e7b221079bc5663f977f91fbe25;p=git-annex.git mostly finished with createDirectoryUnder conversion Remaining things needing converted are in the assistant, and Annex.Ssh. Every other remaining call to createDirectoryIfMissing True has been audited and is not relevant. The ones in Build/ of course don't get included in the program. Others included eg, Remote.Tahoe and Config.Files which both write to dotfiles under the home directory. --- diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index 68ad7f0c34..de393fa669 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -20,6 +20,7 @@ import qualified Command.Add import Annex.Content import Annex.Ingest import Annex.CheckIgnore +import Annex.Perms import Annex.UUID import Annex.YoutubeDl import Logs.Web @@ -168,7 +169,7 @@ performRemote addunlockedmatcher r o uri file sz = ifAnnexed (toRawFilePath file downloadRemoteFile :: AddUnlockedMatcher -> Remote -> DownloadOptions -> URLString -> FilePath -> Maybe Integer -> Annex (Maybe Key) downloadRemoteFile addunlockedmatcher r o uri file sz = checkCanAdd file $ do let urlkey = Backend.URL.fromUrl uri sz - liftIO $ createDirectoryIfMissing True (parentDir file) + createWorkTreeDirectory (parentDir file) ifM (Annex.getState Annex.fast <||> pure (relaxedOption o)) ( do addWorkTree addunlockedmatcher (Remote.uuid r) loguri file urlkey Nothing @@ -271,7 +272,7 @@ downloadWeb addunlockedmatcher o url urlinfo file = ) normalfinish tmp = checkCanAdd file $ do showDestinationFile file - liftIO $ createDirectoryIfMissing True (parentDir file) + createWorkTreeDirectory (parentDir file) finishDownloadWith addunlockedmatcher tmp webUUID url file tryyoutubedl tmp -- Ask youtube-dl what filename it will download @@ -357,7 +358,7 @@ downloadWith' downloader dummykey u url afile = tmp <- fromRepo $ gitAnnexTmpObjectLocation dummykey ok <- Transfer.notifyTransfer Transfer.Download url $ Transfer.download u dummykey afile Transfer.stdRetry $ \p -> do - liftIO $ createDirectoryIfMissing True (parentDir tmp) + createAnnexDirectory (parentDir tmp) downloader tmp p if ok then return (Just tmp) @@ -389,9 +390,9 @@ addWorkTree addunlockedmatcher u url file key mtmp = case mtmp of Nothing -> go Just tmp -> do -- Move to final location for large file check. - pruneTmpWorkDirBefore tmp $ \_ -> liftIO $ do - createDirectoryIfMissing True (takeDirectory file) - renameFile tmp file + pruneTmpWorkDirBefore tmp $ \_ -> do + createWorkTreeDirectory (takeDirectory file) + liftIO $ renameFile tmp file largematcher <- largeFilesMatcher large <- checkFileMatcher largematcher file if large @@ -438,7 +439,7 @@ nodownloadWeb addunlockedmatcher o url urlinfo file nodownloadWeb' :: AddUnlockedMatcher -> URLString -> Key -> FilePath -> Annex (Maybe Key) nodownloadWeb' addunlockedmatcher url key file = checkCanAdd file $ do showDestinationFile file - liftIO $ createDirectoryIfMissing True (parentDir file) + createWorkTreeDirectory (parentDir file) addWorkTree addunlockedmatcher webUUID url file key Nothing return (Just key) diff --git a/Command/Fix.hs b/Command/Fix.hs index 31ec91e586..5affc0590c 100644 --- a/Command/Fix.hs +++ b/Command/Fix.hs @@ -94,7 +94,7 @@ fixSymlink file link = do mtime <- catchMaybeIO $ modificationTimeHiRes <$> getSymbolicLinkStatus file #endif - createDirectoryIfMissing True (parentDir file) + createWorkTreeDirectory (parentDir file) removeFile file createSymbolicLink link file #if ! defined(mingw32_HOST_OS) diff --git a/Command/FromKey.hs b/Command/FromKey.hs index f3e7487272..5becd3b810 100644 --- a/Command/FromKey.hs +++ b/Command/FromKey.hs @@ -13,6 +13,7 @@ import Command import qualified Annex.Queue import Annex.Content import Annex.WorkTree +import Annex.Perms import qualified Annex import qualified Backend.URL @@ -85,7 +86,7 @@ perform key file = lookupFileNotHidden (toRawFilePath file) >>= \case ( hasothercontent , do link <- calcRepo $ gitAnnexLink file key - liftIO $ createDirectoryIfMissing True (parentDir file) + createWorkTreeDirectory (parentDir file) liftIO $ createSymbolicLink link file Annex.Queue.addCommand "add" [Param "--"] [file] next $ return True diff --git a/Command/Fsck.hs b/Command/Fsck.hs index ead4c4f102..5d9d109856 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -219,7 +219,7 @@ fixLink key file = do go want have | want /= fromRawFilePath (fromInternalGitPath have) = do showNote "fixing link" - liftIO $ createDirectoryIfMissing True (parentDir (fromRawFilePath file)) + liftIO $ createWorkTreeDirectory (parentDir (fromRawFilePath file)) liftIO $ removeFile (fromRawFilePath file) addAnnexLink want file | otherwise = noop diff --git a/Command/FuzzTest.hs b/Command/FuzzTest.hs index 855d8c07d3..6bd1a0e1a8 100644 --- a/Command/FuzzTest.hs +++ b/Command/FuzzTest.hs @@ -13,6 +13,7 @@ import Command import qualified Annex import qualified Git.Config import Config +import Annex.Perms import Utility.ThreadScheduler import Utility.DiskFree import Git.Types (fromConfigKey) @@ -172,10 +173,10 @@ instance Arbitrary FuzzAction where ] runFuzzAction :: FuzzAction -> Annex () -runFuzzAction (FuzzAdd (FuzzFile f)) = liftIO $ do - createDirectoryIfMissing True $ parentDir f - n <- getStdRandom random :: IO Int - writeFile f $ show n ++ "\n" +runFuzzAction (FuzzAdd (FuzzFile f)) = do + createWorkTreeDirectory (parentDir f) + n <- liftIO (getStdRandom random :: IO Int) + liftIO $ writeFile f $ show n ++ "\n" runFuzzAction (FuzzDelete (FuzzFile f)) = liftIO $ nukeFile f runFuzzAction (FuzzMove (FuzzFile src) (FuzzFile dest)) = liftIO $ rename src dest diff --git a/Command/Import.hs b/Command/Import.hs index 69b535644a..5447df5bff 100644 --- a/Command/Import.hs +++ b/Command/Import.hs @@ -25,6 +25,7 @@ import Annex.FileMatcher import Annex.Ingest import Annex.InodeSentinal import Annex.Import +import Annex.Perms import Annex.RemoteTrackingBranch import Utility.InodeCache import Logs.Location @@ -176,12 +177,12 @@ startLocal addunlockedmatcher largematcher mode (srcfile, destfile) = importfilechecked ld k = do -- Move or copy the src file to the dest file. -- The dest file is what will be ingested. - liftIO $ createDirectoryIfMissing True (parentDir destfile) + createWorkTreeDirectory (parentDir destfile) liftIO $ if mode == Duplicate || mode == SkipDuplicates then void $ copyFileExternal CopyAllMetaData srcfile destfile else moveFile srcfile destfile -- Get the inode cache of the dest file. It should be - -- weakly the same as the origianlly locked down file's + -- weakly the same as the originally locked down file's -- inode cache. (Since the file may have been copied, -- its inodes may not be the same.) newcache <- withTSDelta $ liftIO . genInodeCache destfile' diff --git a/Database/Init.hs b/Database/Init.hs index 3744de6582..c66fe43acf 100644 --- a/Database/Init.hs +++ b/Database/Init.hs @@ -10,7 +10,6 @@ module Database.Init where import Annex.Common import Annex.Perms import Utility.FileMode -import Utility.Directory import Database.Persist.Sqlite import Control.Monad.IO.Class (liftIO) diff --git a/Git/Repair.hs b/Git/Repair.hs index 66e68117f3..10ea6a8ddc 100644 --- a/Git/Repair.hs +++ b/Git/Repair.hs @@ -245,8 +245,9 @@ explodePackedRefsFile r = do nukeFile f where makeref (sha, ref) = do - let dest = fromRawFilePath (localGitDir r) fromRef ref - createDirectoryIfMissing True (parentDir dest) + let gitd = fromRawFilePath (localGitDir r) + let dest = gitd fromRef ref + createDirectoryUnder gitd (parentDir dest) unlessM (doesFileExist dest) $ writeFile dest (fromRef sha) diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs index a50d949d26..6416a18d5b 100644 --- a/Remote/GCrypt.hs +++ b/Remote/GCrypt.hs @@ -49,6 +49,7 @@ import qualified Remote.Helper.Ssh as Ssh import Utility.Metered import Annex.UUID import Annex.Ssh +import Annex.Perms import qualified Remote.Rsync import qualified Remote.Directory import Utility.Rsync @@ -283,7 +284,7 @@ setupRepo gcryptid r - which is needed for direct rsync of objects to work. -} rsyncsetup = Remote.Rsync.withRsyncScratchDir $ \tmp -> do - liftIO $ createDirectoryIfMissing True $ tmp objectDir + createAnnexDirectory (tmp objectDir) dummycfg <- liftIO dummyRemoteGitConfig (rsynctransport, rsyncurl, _) <- rsyncTransport r dummycfg let tmpconfig = tmp "config" @@ -368,7 +369,7 @@ store' repo r rsyncopts | not $ Git.repoIsUrl repo = byteStorer $ \k b p -> guardUsable repo (return False) $ liftIO $ do let tmpdir = Git.repoLocation repo "tmp" fromRawFilePath (keyFile k) - void $ tryIO $ createDirectoryIfMissing True tmpdir + void $ tryIO $ createDirectoryUnder (Git.repoLocation repo) tmpdir let tmpf = tmpdir fromRawFilePath (keyFile k) meteredWriteFile p tmpf b let destdir = parentDir $ gCryptLocation repo k diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs index b19bbbe78b..04d01e60a3 100644 --- a/Remote/Rsync.hs +++ b/Remote/Rsync.hs @@ -27,6 +27,7 @@ import Config.Cost import Annex.Content import Annex.UUID import Annex.Ssh +import Annex.Perms import Remote.Helper.Special import Remote.Helper.Messages import Remote.Helper.ExportImport @@ -218,7 +219,7 @@ store o k src meterupdate = storeGeneric o meterupdate basedest populatedest storeGeneric :: RsyncOpts -> MeterUpdate -> FilePath -> (FilePath -> Annex Bool) -> Annex Bool storeGeneric o meterupdate basedest populatedest = withRsyncScratchDir $ \tmp -> do let dest = tmp basedest - liftIO $ createDirectoryIfMissing True $ parentDir dest + createAnnexDirectory (parentDir dest) ok <- populatedest dest ps <- sendParams if ok diff --git a/Upgrade/V1.hs b/Upgrade/V1.hs index 88a3494484..ddf54aa123 100644 --- a/Upgrade/V1.hs +++ b/Upgrade/V1.hs @@ -17,6 +17,7 @@ import qualified Data.ByteString.Lazy as L import Annex.Common import Annex.Content import Annex.Link +import Annex.Perms import Types.Key import Logs.Presence import qualified Annex.Queue @@ -115,7 +116,7 @@ moveLocationLogs = do dest <- fromRepo $ logFile2 k dir <- fromRepo Upgrade.V2.gitStateDir let f = dir l - liftIO $ createDirectoryIfMissing True (parentDir dest) + createWorkTreeDirectory (parentDir dest) -- could just git mv, but this way deals with -- log files that are not checked into git, -- as well as merging with already upgraded