remove second pass in scanAnnexedFiles
authorJoey Hess <joeyh@joeyh.name>
Fri, 30 Jul 2021 21:46:11 +0000 (17:46 -0400)
committerJoey Hess <joeyh@joeyh.name>
Fri, 30 Jul 2021 21:46:11 +0000 (17:46 -0400)
The pass was needed to populate files when annex.thin was set,
but in commit 73e0cbbb19703f08daf783d8788370726f852162,
reconcileStaged started to do that. So, this second pass is not needed
any longer.

Annex/Init.hs
Annex/WorkTree.hs
Command/Smudge.hs
Upgrade/V5.hs

index 962eae26eb50c8710d414627a59d79f0490d9ae4..adbee093331e2e34b24b3d40890c3445e57e12a8 100644 (file)
@@ -135,7 +135,7 @@ initialize' mversion = checkInitializeAllowed $ do
                then configureSmudgeFilter
                else deconfigureSmudgeFilter
        unlessM isBareRepo $ do
-               scanAnnexedFiles True
+               scanAnnexedFiles
                hookWrite postCheckoutHook
                hookWrite postMergeHook
        AdjustedBranch.checkAdjustedClone >>= \case
index 60b460e8130744a804d6e6746b147b4e6a4944e5..7bb4b9fe00b98078dc5d125bfc0be1ceb412b2cd 100644 (file)
@@ -8,24 +8,10 @@
 module Annex.WorkTree where
 
 import Annex.Common
-import qualified Annex
 import Annex.Link
 import Annex.CatFile
-import Annex.Content
-import Annex.ReplaceFile
 import Annex.CurrentBranch
-import Annex.InodeSentinal
-import Utility.InodeCache
-import Git.FilePath
-import Git.CatFile
-import qualified Git.Ref
-import qualified Git.LsTree
-import qualified Git.Types
 import qualified Database.Keys
-import Config
-import qualified Utility.RawFilePath as R
-
-import qualified Data.ByteString.Lazy as L
 
 {- Looks up the key corresponding to an annexed file in the work tree,
  - by examining what the file links to.
@@ -69,74 +55,13 @@ ifAnnexed file yes no = maybe no yes =<< lookupKey file
 
 {- Find all annexed files and update the keys database for them.
  - 
- - This is expensive, and so normally the associated files are updated
- - incrementally when changes are noticed. So, this only needs to be done
- - when initializing/upgrading a repository.
- -
- - Also, the content for an unlocked file may already be present as
- - an annex object. If so, populate the pointer file with it.
- - But if worktree file does not have a pointer file's content, it is left
- - as-is.
+ - Normally the keys database is updated incrementally when it's being
+ - opened, and changes are noticed. Calling this explicitly allows
+ - running the update at an earlier point.
  -}
-scanAnnexedFiles :: Bool -> Annex ()
-scanAnnexedFiles initscan = do
-       -- This gets the keys database populated with all annexed files,
-       -- by running Database.Keys.reconcileStaged.
+scanAnnexedFiles :: Annex ()
+scanAnnexedFiles =
+       -- All that needs to be done is to open the database,
+       -- that will result in Database.Keys.reconcileStaged
+       -- running, and doing the work.
        Database.Keys.runWriter (const noop)
-       -- The above tries to populate pointer files, but one thing it
-       -- is not able to handle is populating a pointer file when the
-       -- annex object file already exists, but its inode is not yet
-       -- cached and annex.thin is set. So, the rest of this makes
-       -- another pass over the tree to do that.
-       whenM
-               ( pure initscan
-               <&&> annexThin <$> Annex.getGitConfig
-               <&&> inRepo Git.Ref.headExists
-               <&&> not <$> isBareRepo
-               ) $ do
-                       g <- Annex.gitRepo
-                       (l, cleanup) <- inRepo $ Git.LsTree.lsTree
-                               Git.LsTree.LsTreeRecursive
-                               (Git.LsTree.LsTreeLong True)
-                               Git.Ref.headRef
-                       catObjectStreamLsTree l want g go
-                       liftIO $ void cleanup
-  where
-       -- Want to process symlinks, and regular files.
-       want i = case Git.Types.toTreeItemType (Git.LsTree.mode i) of
-               Just Git.Types.TreeSymlink -> Just (i, False)
-               Just Git.Types.TreeFile -> checkfilesize i
-               Just Git.Types.TreeExecutable -> checkfilesize i
-               _ -> Nothing
-       
-       -- Avoid processing files that are too large to be pointer files.
-       checkfilesize i = case Git.LsTree.size i of
-               Just n | n < maxPointerSz -> Just (i, True)
-               _ -> Nothing
-       
-       go getnext = liftIO getnext >>= \case
-               Just ((i, isregfile), Just c) -> do
-                       maybe noop (add i isregfile)
-                               (parseLinkTargetOrPointer (L.toStrict c))
-                       go getnext
-               _ -> return ()
-       
-       add i isregfile k = do
-               let tf = Git.LsTree.file i
-               whenM (pure isregfile <&&> inAnnex k) $ do
-                       f <- fromRepo $ fromTopFilePath tf
-                       liftIO (isPointerFile f) >>= \case
-                               Just k' | k' == k -> do
-                                       destmode <- liftIO $ catchMaybeIO $
-                                               fileMode <$> R.getFileStatus f
-                                       ic <- replaceWorkTreeFile (fromRawFilePath f) $ \tmp -> do
-                                               let tmp' = toRawFilePath tmp
-                                               linkFromAnnex' k tmp' destmode >>= \case
-                                                       LinkAnnexOk -> 
-                                                               withTSDelta (liftIO . genInodeCache tmp')
-                                                       LinkAnnexNoop -> return Nothing
-                                                       LinkAnnexFailed -> liftIO $ do
-                                                               writePointerFile tmp' k destmode
-                                                               return Nothing
-                                       maybe noop (restagePointerFile (Restage True) f) ic
-                               _ -> noop
index 70fc9235ad8302d8e9c9235eec4f54803fc8fe13..c242b7e1b5c7ac9878c11dcf0e565204479db567 100644 (file)
@@ -267,7 +267,7 @@ update = do
        -- point to refresh the keys database for changes to annexed files.
        -- Doing it explicitly here avoids a later pause in the middle of
        -- some other action.
-       scanAnnexedFiles False
+       scanAnnexedFiles
        updateSmudged (Restage True)
        stop
 
index 22200b0c80cc80197d9af1d5436ef8175bc94e7f..2db92d57f95b793a5edc341f5d198d58ddb26d87 100644 (file)
@@ -47,7 +47,7 @@ upgrade automatic = flip catchNonAsync onexception $ do
                , do
                        checkGitVersionForIndirectUpgrade
                )
-       scanAnnexedFiles True
+       scanAnnexedFiles
        configureSmudgeFilter
        -- Inode sentinal file was only used in direct mode and when
        -- locking down files as they were added. In v6, it's used more