diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs index ef8112f3cd..6549503f02 100644 --- a/Annex/Content/Direct.hs +++ b/Annex/Content/Direct.hs @@ -6,17 +6,10 @@ -} module Annex.Content.Direct ( - associatedFiles, - removeAssociatedFile, - removeAssociatedFiles, - addAssociatedFile, goodContent, - recordedInodeCache, - updateInodeCache, - addInodeCache, - sameInodeCache, + associatedFiles, + removeAssociatedFiles, removeInodeCache, - addContentWhenNotPresent, ) where import Annex.Common @@ -48,19 +41,6 @@ associatedFilesRelative key = do -- (Especially needed on Windows.) lines <$> hGetContentsStrict h -{- Changes the associated files information for a key, applying a - - transformation to the list. Returns new associatedFiles value. -} -changeAssociatedFiles :: Key -> ([FilePath] -> [FilePath]) -> Annex [FilePath] -changeAssociatedFiles key transform = do - mapping <- calcRepo $ gitAnnexMapping key - files <- associatedFilesRelative key - let files' = transform files - when (files /= files') $ - modifyContent mapping $ - writeLogFile mapping $ unlines files' - top <- fromRepo Git.repoPath - return $ map (top ) files' - {- Removes the list of associated files. -} removeAssociatedFiles :: Key -> Annex () removeAssociatedFiles key = do @@ -68,38 +48,6 @@ removeAssociatedFiles key = do modifyContent mapping $ liftIO $ nukeFile mapping -{- Removes an associated file. Returns new associatedFiles value. - - Checks if this was the last copy of the object, and updates location - - log. -} -removeAssociatedFile :: Key -> FilePath -> Annex [FilePath] -removeAssociatedFile key file = do - fs <- removeAssociatedFileUnchecked key file - when (null fs) $ - logStatus key InfoMissing - return fs - -{- Removes an associated file. Returns new associatedFiles value. -} -removeAssociatedFileUnchecked :: Key -> FilePath -> Annex [FilePath] -removeAssociatedFileUnchecked key file = do - file' <- normaliseAssociatedFile file - changeAssociatedFiles key $ filter (/= file') - -{- Adds an associated file. Returns new associatedFiles value. -} -addAssociatedFile :: Key -> FilePath -> Annex [FilePath] -addAssociatedFile key file = do - file' <- normaliseAssociatedFile file - changeAssociatedFiles key $ \files -> - if file' `elem` files - then files - else file':files - -{- Associated files are always stored relative to the top of the repository. - - The input FilePath is relative to the CWD, or is absolute. -} -normaliseAssociatedFile :: FilePath -> Annex FilePath -normaliseAssociatedFile file = do - top <- fromRepo Git.repoPath - liftIO $ relPathDirToFile top file - {- Checks if a file in the tree, associated with a key, has not been modified. - - To avoid needing to fsck the file's content, which can involve an @@ -118,28 +66,6 @@ recordedInodeCache key = withInodeCacheFile key $ \f -> liftIO $ catchDefaultIO [] $ mapMaybe readInodeCache . lines <$> readFileStrict f -{- Caches an inode for a file. - - - - Anything else already cached is preserved. - -} -updateInodeCache :: Key -> FilePath -> Annex () -updateInodeCache key file = maybe noop (addInodeCache key) - =<< withTSDelta (liftIO . genInodeCache file) - -{- Adds another inode to the cache for a key. -} -addInodeCache :: Key -> InodeCache -> Annex () -addInodeCache key cache = do - oldcaches <- recordedInodeCache key - unlessM (elemInodeCaches cache oldcaches) $ - writeInodeCache key (cache:oldcaches) - -{- Writes inode cache for a key. -} -writeInodeCache :: Key -> [InodeCache] -> Annex () -writeInodeCache key caches = withInodeCacheFile key $ \f -> - modifyContent f $ - liftIO $ writeFile f $ - unlines $ map showInodeCache caches - {- Removes an inode cache. -} removeInodeCache :: Key -> Annex () removeInodeCache key = withInodeCacheFile key $ \f -> @@ -148,24 +74,3 @@ removeInodeCache key = withInodeCacheFile key $ \f -> withInodeCacheFile :: Key -> (FilePath -> Annex a) -> Annex a withInodeCacheFile key a = a =<< calcRepo (gitAnnexInodeCache key) - -{- Checks if a FileStatus matches the recorded InodeCache of a file. -} -sameFileStatus :: Key -> FilePath -> FileStatus -> Annex Bool -sameFileStatus key f status = do - old <- recordedInodeCache key - curr <- withTSDelta $ \delta -> liftIO $ toInodeCache delta f status - case (old, curr) of - (_, Just c) -> elemInodeCaches c old - ([], Nothing) -> return True - _ -> return False - -{- Copies the contentfile to the associated file, if the associated - - file has no content. If the associated file does have content, - - even if the content differs, it's left unchanged. -} -addContentWhenNotPresent :: Key -> FilePath -> FilePath -> Annex () -addContentWhenNotPresent key contentfile associatedfile = do - v <- isAnnexLink associatedfile - when (Just key == v) $ - replaceFile associatedfile $ - liftIO . void . copyFileExternal CopyAllMetaData contentfile - updateInodeCache key associatedfile