diff options
author | Joey Hess <joey@kitenet.net> | 2013-03-11 02:57:48 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-03-11 02:57:48 -0400 |
commit | a41051e59143824921a7e6e3d60bc2b50881d4b4 (patch) | |
tree | fcf1f3cadedd053b2ee2206d600350a763526228 /Annex | |
parent | 9b5b4d3df90eee8e6a9a25bda22f41e82adeaf18 (diff) |
remove Eq instance for InodeCache
There are two types of equality here, and which one is right varies,
so this forces me to consider and choose between them.
Based on this, I learned that the commit in git anex sync was
always doing a strong comparison, even when in a repository where
the inodes had changed. Fixed that.
Diffstat (limited to 'Annex')
-rw-r--r-- | Annex/Content/Direct.hs | 5 | ||||
-rw-r--r-- | Annex/Direct.hs | 6 |
2 files changed, 7 insertions, 4 deletions
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs index b0d549fc6..164cb64a4 100644 --- a/Annex/Content/Direct.hs +++ b/Annex/Content/Direct.hs @@ -13,6 +13,7 @@ module Annex.Content.Direct ( recordedInodeCache, updateInodeCache, writeInodeCache, + compareInodeCaches, sameInodeCache, sameFileStatus, removeInodeCache, @@ -146,7 +147,7 @@ sameFileStatus key status = do {- If the inodes have changed, only the size and mtime are compared. -} compareInodeCaches :: InodeCache -> InodeCache -> Annex Bool compareInodeCaches x y - | x == y = return True + | x `compareStrong` y = return True | otherwise = ifM inodesChanged ( return $ compareWeak x y , return False @@ -167,7 +168,7 @@ inodesChanged = maybe calc return =<< Annex.getState Annex.inodeschanged =<< fromRepo gitAnnexInodeSentinal scached <- readInodeSentinalFile let changed = case (scache, scached) of - (Just c1, Just c2) -> c1 /= c2 + (Just c1, Just c2) -> not $ compareStrong c1 c2 _ -> True Annex.changeState $ \s -> s { Annex.inodeschanged = Just changed } return changed diff --git a/Annex/Direct.hs b/Annex/Direct.hs index c6f12a7b8..1bebb2cb7 100644 --- a/Annex/Direct.hs +++ b/Annex/Direct.hs @@ -51,8 +51,10 @@ stageDirect = do - modified, so compare the cache to see if - it really was. -} oldcache <- recordedInodeCache key - when (oldcache /= Just cache) $ - modifiedannexed file key cache + case oldcache of + Nothing -> modifiedannexed file key cache + Just c -> unlessM (compareInodeCaches c cache) $ + modifiedannexed file key cache (Just key, Nothing, _) -> deletedannexed file key (Nothing, Nothing, _) -> deletegit file (_, Just _, _) -> addgit file |