]> dgit.raspbian.org Git - git-annex.git/commitdiff
RawFilePath conversion for replaceFile
authorJoey Hess <joeyh@joeyh.name>
Wed, 22 Jan 2025 17:37:26 +0000 (13:37 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 22 Jan 2025 17:37:26 +0000 (13:37 -0400)
Sponsored-by: Joshua Antonishen
13 files changed:
Annex/AutoMerge.hs
Annex/Content.hs
Annex/Content/PointerFile.hs
Annex/Ingest.hs
Annex/ReplaceFile.hs
Assistant/Threads/Watcher.hs
Command/Fix.hs
Command/Fsck.hs
Command/Lock.hs
Command/ReKey.hs
Command/Unlock.hs
Logs/File.hs
doc/todo/RawFilePath_conversion.mdwn

index bb43d0593bcbc94051f2d2da0389f15133a2ff12..5d908781520837d1e0c01b435d1b2832653bb46b 100644 (file)
@@ -236,8 +236,9 @@ resolveMerge' unstagedmap (Just us) them inoverlay u = do
                | otherwise = pure f
 
        makesymlink key dest = do
-               l <- calcRepo $ gitAnnexLink (toRawFilePath dest) key
-               unless inoverlay $ replacewithsymlink dest l
+               let rdest = toRawFilePath dest
+               l <- calcRepo $ gitAnnexLink rdest key
+               unless inoverlay $ replacewithsymlink rdest l
                dest' <- toRawFilePath <$> stagefile dest
                stageSymlink dest' =<< hashSymlink l
 
@@ -265,7 +266,7 @@ resolveMerge' unstagedmap (Just us) them inoverlay u = do
                                
                let replacefile isexecutable = case selectwant' (LsFiles.unmergedSha u) of
                        Nothing -> noop
-                       Just sha -> replaceWorkTreeFile item $ \tmp -> do
+                       Just sha -> replaceWorkTreeFile (toRawFilePath item) $ \tmp -> do
                                c <- catObject sha
                                liftIO $ L.writeFile (decodeBS tmp) c
                                when isexecutable $
@@ -280,7 +281,7 @@ resolveMerge' unstagedmap (Just us) them inoverlay u = do
                                        Nothing -> noop
                                        Just sha -> do
                                                link <- catSymLinkTarget sha
-                                               replacewithsymlink item link
+                                               replacewithsymlink (toRawFilePath item) link
                        (Just TreeFile, Just TreeSymlink) -> replacefile False
                        (Just TreeExecutable, Just TreeSymlink) -> replacefile True
                        _ -> ifM (liftIO $ doesDirectoryExist item)
index 40f13e7ea58c4b4d62d2b6d3172b826788a34034..5a7a89ff107ed8896500ba4c60bbbedc3eeed7c7 100644 (file)
@@ -581,7 +581,7 @@ linkToAnnex key src srcic = ifM (checkSecureHashes' key)
  -}
 linkFromAnnex :: Key -> RawFilePath -> Maybe FileMode -> Annex LinkAnnexResult
 linkFromAnnex key dest destmode =
-       replaceFile' (const noop) (fromRawFilePath dest) (== LinkAnnexOk) $ \tmp ->
+       replaceFile' (const noop) dest (== LinkAnnexOk) $ \tmp ->
                linkFromAnnex' key tmp destmode
 
 {- This is only safe to use when dest is not a worktree file. -}
@@ -1076,7 +1076,7 @@ writeContentRetentionTimestamp key rt t = do
        modifyContentDirWhenExists lckfile $ bracket (lock lckfile) unlock $ \_ ->
                readContentRetentionTimestamp rt >>= \case
                        Just ts | ts >= t -> return ()
-                       _ -> replaceFile (const noop) (fromRawFilePath rt) $ \tmp ->
+                       _ -> replaceFile (const noop) rt $ \tmp ->
                                liftIO $ writeFile (fromRawFilePath tmp) $ show t
   where
        lock = takeExclusiveLock
index c2acc9ab9398dd36cc035ffca737715e6cd70f66..5dc4d0210b12788a5cd750efde9b931376e45947 100644 (file)
@@ -34,10 +34,9 @@ populatePointerFile :: Restage -> Key -> RawFilePath -> RawFilePath -> Annex (Ma
 populatePointerFile restage k obj f = go =<< liftIO (isPointerFile f)
   where
        go (Just k') | k == k' = do
-               let f' = fromRawFilePath f
                destmode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus f
                liftIO $ removeWhenExistsWith R.removeLink f
-               (ic, populated) <- replaceWorkTreeFile f' $ \tmp -> do
+               (ic, populated) <- replaceWorkTreeFile f $ \tmp -> do
                        ok <- linkOrCopy k obj tmp destmode >>= \case
                                Just _ -> thawContent tmp >> return True
                                Nothing -> liftIO (writePointerFile tmp k destmode) >> return False
@@ -58,7 +57,7 @@ depopulatePointerFile key file = do
        let mode = fmap fileMode st
        secureErase file
        liftIO $ removeWhenExistsWith R.removeLink file
-       ic <- replaceWorkTreeFile (fromRawFilePath file) $ \tmp -> do
+       ic <- replaceWorkTreeFile file $ \tmp -> do
                liftIO $ writePointerFile tmp key mode
 #if ! defined(mingw32_HOST_OS)
                -- Don't advance mtime; this avoids unnecessary re-smudging
index 2a1a6c7afffa9ec2d02e452c699b801e945a1308..ed7479526ffbb56171f7cc4913734539de740ab6 100644 (file)
@@ -309,7 +309,7 @@ restoreFile file key e = do
 makeLink :: RawFilePath -> Key -> Maybe InodeCache -> Annex LinkTarget
 makeLink file key mcache = flip catchNonAsync (restoreFile file key) $ do
        l <- calcRepo $ gitAnnexLink file key
-       replaceWorkTreeFile file' $ makeAnnexLink l
+       replaceWorkTreeFile file $ makeAnnexLink l
 
        -- touch symlink to have same time as the original file,
        -- as provided in the InodeCache
@@ -318,8 +318,6 @@ makeLink file key mcache = flip catchNonAsync (restoreFile file key) $ do
                Nothing -> noop
 
        return l
-  where
-       file' = fromRawFilePath file
 
 {- Creates the symlink to the annexed content, and stages it in git. -}
 addSymlink :: RawFilePath -> Key -> Maybe InodeCache -> Annex ()
index c3bb2474af11ab8cb7421edc3dd6feadc9d0efc2..188b300b886b8d3f39eb43013db5b367c4b7da8b 100644 (file)
@@ -24,17 +24,17 @@ import Utility.Directory.Create
 import qualified System.FilePath.ByteString as P
 
 {- replaceFile on a file located inside the gitAnnexDir. -}
-replaceGitAnnexDirFile :: FilePath -> (RawFilePath -> Annex a) -> Annex a
+replaceGitAnnexDirFile :: RawFilePath -> (RawFilePath -> Annex a) -> Annex a
 replaceGitAnnexDirFile = replaceFile createAnnexDirectory
 
 {- replaceFile on a file located inside the .git directory. -}
-replaceGitDirFile :: FilePath -> (RawFilePath -> Annex a) -> Annex a
+replaceGitDirFile :: RawFilePath -> (RawFilePath -> Annex a) -> Annex a
 replaceGitDirFile = replaceFile $ \dir -> do
        top <- fromRepo localGitDir
        liftIO $ createDirectoryUnder [top] dir
 
 {- replaceFile on a worktree file. -}
-replaceWorkTreeFile :: FilePath -> (RawFilePath -> Annex a) -> Annex a
+replaceWorkTreeFile :: RawFilePath -> (RawFilePath -> Annex a) -> Annex a
 replaceWorkTreeFile = replaceFile createWorkTreeDirectory
 
 {- Replaces a possibly already existing file with a new version, 
@@ -52,17 +52,17 @@ replaceWorkTreeFile = replaceFile createWorkTreeDirectory
  - The createdirectory action is only run when moving the file into place
  - fails, and can create any parent directory structure needed.
  -}
-replaceFile :: (RawFilePath -> Annex ()) -> FilePath -> (RawFilePath -> Annex a) -> Annex a
+replaceFile :: (RawFilePath -> Annex ()) -> RawFilePath -> (RawFilePath -> Annex a) -> Annex a
 replaceFile createdirectory file action = replaceFile' createdirectory file (const True) action
 
-replaceFile' :: (RawFilePath -> Annex ()) -> FilePath -> (a -> Bool) -> (RawFilePath -> Annex a) -> Annex a
+replaceFile' :: (RawFilePath -> Annex ()) -> RawFilePath -> (a -> Bool) -> (RawFilePath -> Annex a) -> Annex a
 replaceFile' createdirectory file checkres action = withOtherTmp $ \othertmpdir -> do
-       let basetmp = relatedTemplate' (toRawFilePath file)
+       let basetmp = relatedTemplate' file
        withTmpDirIn (fromRawFilePath othertmpdir) (toOsPath basetmp) $ \tmpdir -> do
                let tmpfile = toRawFilePath tmpdir P.</> basetmp
                r <- action tmpfile
                when (checkres r) $
-                       replaceFileFrom tmpfile (toRawFilePath file) createdirectory
+                       replaceFileFrom tmpfile file createdirectory
                return r
 
 replaceFileFrom :: RawFilePath -> RawFilePath -> (RawFilePath -> Annex ()) -> Annex ()
index 04c5f97b253b0ad97f3c7e3ccdf5e6924298ea80..37ac9b876ef4187ba4e9882ebb566687b49d77a3 100644 (file)
@@ -289,7 +289,7 @@ onAddSymlink' linktarget mk file filestatus = go mk
                if linktarget == Just link
                        then ensurestaged (Just link) =<< getDaemonStatus
                        else do
-                               liftAnnex $ replaceWorkTreeFile file $
+                               liftAnnex $ replaceWorkTreeFile (toRawFilePath file) $
                                        makeAnnexLink link
                                addLink file link (Just key)
        -- other symlink, not git-annex
index 862853a8619cd9ded8ab12388cd1b084676c4116..eb8f6383e38471dafbb81de48a222d9a72fce8ff 100644 (file)
@@ -72,7 +72,7 @@ start fixwhat si file key = do
 
 breakHardLink :: RawFilePath -> Key -> RawFilePath -> CommandPerform
 breakHardLink file key obj = do
-       replaceWorkTreeFile (fromRawFilePath file) $ \tmp -> do
+       replaceWorkTreeFile file $ \tmp -> do
                mode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus file
                unlessM (checkedCopyFile key obj tmp mode) $
                        giveup "unable to break hard link"
@@ -83,7 +83,7 @@ breakHardLink file key obj = do
 
 makeHardLink :: RawFilePath -> Key -> CommandPerform
 makeHardLink file key = do
-       replaceWorkTreeFile (fromRawFilePath file) $ \tmp -> do
+       replaceWorkTreeFile file $ \tmp -> do
                mode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus file
                linkFromAnnex' key tmp mode >>= \case
                        LinkAnnexFailed -> giveup "unable to make hard link"
@@ -97,7 +97,7 @@ fixSymlink file link = do
        mtime <- liftIO $ catchMaybeIO $ Posix.modificationTimeHiRes
                <$> R.getSymbolicLinkStatus file
 #endif
-       replaceWorkTreeFile (fromRawFilePath file) $ \tmpfile -> do
+       replaceWorkTreeFile file $ \tmpfile -> do
                liftIO $ R.createSymbolicLink link tmpfile
 #if ! defined(mingw32_HOST_OS)
                liftIO $ maybe noop (\t -> touch tmpfile t False) mtime
index e01b3402d5504f12d6865b363df449b15f55e15d..5924b4d11ea69e3c8e3eaf07be586c892cab71fa 100644 (file)
@@ -418,7 +418,7 @@ verifyWorkTree key file = do
        case mk of
                Just k | k == key -> whenM (inAnnex key) $ do
                        showNote "fixing worktree content"
-                       replaceWorkTreeFile (fromRawFilePath file) $ \tmp -> do
+                       replaceWorkTreeFile file $ \tmp -> do
                                mode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus file
                                ifM (annexThin <$> Annex.getGitConfig)
                                        ( void $ linkFromAnnex' key tmp mode
index 7dbcffbbd9e3fe4362620f0c1e21e656c26974c9..96aebaab23031bb9c7f641e0b9f6e5fb9ee7f8d9 100644 (file)
@@ -78,7 +78,7 @@ perform file key = do
        breakhardlink obj = whenM (catchBoolIO $ (> 1) . linkCount <$> liftIO (R.getFileStatus obj)) $ do
                mfc <- withTSDelta (liftIO . genInodeCache file)
                unlessM (sameInodeCache obj (maybeToList mfc)) $ do
-                       modifyContentDir obj $ replaceGitAnnexDirFile (fromRawFilePath obj) $ \tmp -> do
+                       modifyContentDir obj $ replaceGitAnnexDirFile obj $ \tmp -> do
                                unlessM (checkedCopyFile key obj tmp Nothing) $
                                        giveup "unable to lock file"
                        Database.Keys.storeInodeCaches key [obj]
index f092e85a84748325e578c5a02af36259eabe5195..a7a547b7196077faf14304e1e5c2df69f1cdefd3 100644 (file)
@@ -104,7 +104,7 @@ linkKey file oldkey newkey = ifM (isJust <$> isAnnexLink file)
                        st <- liftIO $ R.getFileStatus file
                        when (linkCount st > 1) $ do
                                freezeContent oldobj
-                               replaceWorkTreeFile (fromRawFilePath file) $ \tmp -> do
+                               replaceWorkTreeFile file $ \tmp -> do
                                        unlessM (checkedCopyFile oldkey oldobj tmp Nothing) $
                                                giveup "can't lock old key"
                                        thawContent tmp
index c8faa7532f1eee91f4edb02cfda80754907c7154..e0f7ccb29afe153c9071a25c387051d19ff34d00 100644 (file)
@@ -51,7 +51,7 @@ start si file key = ifM (isJust <$> isAnnexLink file)
 perform :: RawFilePath -> Key -> CommandPerform
 perform dest key = do
        destmode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus dest
-       destic <- replaceWorkTreeFile (fromRawFilePath dest) $ \tmp -> do
+       destic <- replaceWorkTreeFile dest $ \tmp -> do
                ifM (inAnnex key)
                        ( do
                                r <- linkFromAnnex' key tmp destmode
index 97efb58ec172f640e897780e10d947fc7e747f3d..f385b06d665de7e807eef9fa9737b738c570a61a 100644 (file)
@@ -48,7 +48,7 @@ writeLogFile f c = createDirWhenNeeded f $ viaTmp writelog (toOsPath f) c
 withLogHandle :: RawFilePath -> (Handle -> Annex a) -> Annex a
 withLogHandle f a = do
        createAnnexDirectory (parentDir f)
-       replaceGitAnnexDirFile (fromRawFilePath f) $ \tmp ->
+       replaceGitAnnexDirFile f $ \tmp ->
                bracket (setup tmp) cleanup a
   where
        setup tmp = do
index cef9ffbd7a366d3ac9cfdb9975e31ab7e624eb26..e1ca5999564bd9ba36996bbed4a7a02197aa7e95 100644 (file)
@@ -19,7 +19,8 @@ status.
   Utility.RawFilePath needing to be changed.
 * Utility.FileIO is used for most withFile and openFile, but not yet for
   readFile, writeFile, and appendFile. Including versions of those from
-  bytestring. Also readFileStrict should be replaced with Utility.FileIO.readFile'
+  bytestring. Also readFileStrict should be replaced with 
+  Utility.FileIO.readFile'
   Note that the String versions can do newline translation, which has to be
   handled when converting to the Utility.FileIO ones.