fix add of file that was locked but has been replaced by a new, unlocked file (v6)
authorJoey Hess <joeyh@joeyh.name>
Wed, 16 Dec 2015 18:53:41 +0000 (14:53 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 16 Dec 2015 18:53:41 +0000 (14:53 -0400)
Command/Add.hs

index 8cbaf189af58180f8d87d1a36853bd590ee696f7..ab4e3a9d17a49ef8b2d1e912e699dc5c6e45f40b 100644 (file)
@@ -34,6 +34,7 @@ import Utility.Tmp
 import Utility.CopyFile
 import Annex.InodeSentinal
 import Annex.Version
+import qualified Database.Keys
 
 import Control.Exception (IOException)
 
@@ -105,13 +106,22 @@ start file = ifAnnexed file addpresent add
                                        next $ if isSymbolicLink s
                                                then next $ addFile file
                                                else perform file
-       addpresent key = ifM isDirect
+       addpresent key = ifM versionSupportsUnlockedPointers
                ( do
                        ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
                        case ms of
                                Just s | isSymbolicLink s -> fixup key
-                               _ -> ifM (goodContent key file) ( stop , add )
-               , fixup key
+                               _ -> ifM (sameInodeCache file =<< Database.Keys.getInodeCaches key)
+                                               ( stop, add )
+               , ifM isDirect
+                       ( do
+                               ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
+                               case ms of
+                                       Just s | isSymbolicLink s -> fixup key
+                                       _ -> ifM (goodContent key file)
+                                               ( stop , add )
+                       , fixup key
+                       )
                )
        fixup key = do
                -- the annexed symlink is present but not yet added to git