update associated files database on smudge and clean

This commit is contained in:
Joey Hess 2015-12-07 14:35:46 -04:00
parent a6e5ee0d0e
commit 2cbcb4f1a8
Failed to extract signature
2 changed files with 13 additions and 2 deletions

View file

@ -16,6 +16,7 @@ import Annex.FileMatcher
import Types.KeySource
import Backend
import Logs.Location
import qualified Database.AssociatedFiles as AssociatedFiles
import qualified Data.ByteString.Lazy as B
@ -42,12 +43,13 @@ seek o = commandAction $
-- Smudge filter is fed git file content, and if it's a pointer to an
-- available annex object, should output its content.
smudge :: FilePath -> CommandStart
smudge _file = do
smudge file = do
liftIO $ fileEncoding stdin
s <- liftIO $ hGetContents stdin
case parsePointer s of
Nothing -> liftIO $ putStr s
Just k -> do
updateAssociatedFiles k file
content <- calcRepo (gitAnnexLocation k)
liftIO $ maybe
(putStr s)
@ -62,6 +64,7 @@ clean file = do
ifM (shouldAnnex file)
( do
k <- ingest file
updateAssociatedFiles k file
liftIO $ emitPointer k
, liftIO cat
)
@ -107,3 +110,10 @@ parsePointer s
where
s' = take maxsz s
maxsz = 81920
updateAssociatedFiles :: Key -> FilePath -> Annex ()
updateAssociatedFiles k f = do
h <- AssociatedFiles.openDb
liftIO $ do
AssociatedFiles.addDb h k f
AssociatedFiles.closeDb h

View file

@ -275,13 +275,14 @@ In particular:
* Is the smudge filter called at any other time? Seems unlikely but then
there could be situations with a detached work tree or such.
* Does git call any useful hooks when removing a file from the work tree,
or converting it to not be annexed?
or converting it to not be annexed, or for `git mv` of an annexed file?
No!
From this analysis, any file map generated by the smudge/clean filters
is necessary potentially innaccurate. It may list deleted files.
It may or may not reflect current unstaged changes from the work tree.
Follows that any use of the file map needs to verify the info from it,
and throw out bad cached info (updating the map to match reality).