update associated files database on smudge and clean
authorJoey Hess <joeyh@joeyh.name>
Mon, 7 Dec 2015 18:35:46 +0000 (14:35 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 7 Dec 2015 18:41:22 +0000 (14:41 -0400)
Command/Smudge.hs
doc/todo/smudge.mdwn

index 70a318c2d5933404155c3c15e14c27a4e9a95413..6cca8035e6c8d1c0f2c3af41a5e0edd812ab925a 100644 (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
index d08d600aee4787045916610d841126af4cdb7272..74a1435809cc4db448362013233169071721e73b 100644 (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).