sync --content now supports --hide-missing adjusted branches
This relies on git ls-files --with-tree, which I'm using in a way that its man page does not document. Hm. I emailed the git list to try to get the docs improved, but at least the git test suite does test the same kind of use case I'm using here. Performance impact when not in an adjusted branch is limited to some additional MVar accesses, and a single git call to determine the name of the current branch. So very minimal. When in an adjusted branch, the performance impact is in Annex.WorkTree.lookupFile, which starts doing an equal amount of work for files that didn't exist as it already did for files that were unlocked. This commit was sponsored by Jochen Bartl on Patreon.
This commit is contained in:
parent
8be5a7269a
commit
4a788fbb3b
9 changed files with 89 additions and 31 deletions
|
@ -1,6 +1,6 @@
|
|||
{- git-annex worktree files
|
||||
-
|
||||
- Copyright 2013-2016 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2013-2018 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
@ -13,6 +13,7 @@ import Annex.CatFile
|
|||
import Annex.Version
|
||||
import Annex.Content
|
||||
import Annex.ReplaceFile
|
||||
import Annex.CurrentBranch
|
||||
import Config
|
||||
import Git.FilePath
|
||||
import qualified Git.Ref
|
||||
|
@ -28,19 +29,20 @@ import qualified Database.Keys.SQL
|
|||
-
|
||||
- An unlocked file will not have a link on disk, so fall back to
|
||||
- looking for a pointer to a key in git.
|
||||
-
|
||||
- When in an adjusted branch that may have hidden the file, looks for a
|
||||
- pointer to a key in the original branch.
|
||||
-}
|
||||
lookupFile :: FilePath -> Annex (Maybe Key)
|
||||
lookupFile file = isAnnexLink file >>= \case
|
||||
Just key -> makeret key
|
||||
Just key -> return (Just key)
|
||||
Nothing -> ifM (versionSupportsUnlockedPointers <||> isDirect)
|
||||
( ifM (liftIO $ doesFileExist file)
|
||||
( maybe (return Nothing) makeret =<< catKeyFile file
|
||||
, return Nothing
|
||||
( catKeyFile file
|
||||
, catKeyFileHidden file =<< getCurrentBranch
|
||||
)
|
||||
, return Nothing
|
||||
)
|
||||
where
|
||||
makeret = return . Just
|
||||
|
||||
{- Modifies an action to only act on files that are already annexed,
|
||||
- and passes the key on to it. -}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue