improve storage of redundant ContentIdentifiers
authorJoey Hess <joeyh@joeyh.name>
Tue, 22 Dec 2020 16:00:11 +0000 (12:00 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 22 Dec 2020 16:03:25 +0000 (12:03 -0400)
When a ContentIdentifier is already recorded, don't add it to the log
again, and avoid updating the log.

Logs/ContentIdentifier.hs

index 38f904ae2b1a5b9a66fd7ba2647165baca08a23c..16c3969155e5c6114101d75071f037d396addde4 100644 (file)
@@ -32,12 +32,16 @@ recordContentIdentifier :: RemoteStateHandle -> ContentIdentifier -> Key -> Anne
 recordContentIdentifier (RemoteStateHandle u) cid k = do
        c <- liftIO currentVectorClock
        config <- Annex.getGitConfig
-       Annex.Branch.change (remoteContentIdentifierLogFile config k) $
-               buildLog . addcid c . parseLog
+       Annex.Branch.maybeChange (remoteContentIdentifierLogFile config k) $
+               addcid c . parseLog
   where
-       addcid c l = changeMapLog c u (cid :| contentIdentifierList (M.lookup u m)) l
+       addcid c v
+               | cid `elem` l = Nothing -- no change needed
+               | otherwise = Just $ buildLog $
+                       changeMapLog c u (cid :| l) v
          where
-               m = simpleMap l
+               m = simpleMap v
+               l = contentIdentifierList (M.lookup u m)
 
 -- | Get all known content identifiers for a key.
 getContentIdentifiers :: Key -> Annex [(RemoteStateHandle, [ContentIdentifier])]