diff --git a/COPYRIGHT b/COPYRIGHT index 2691795e4a..4168d62b9b 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -10,7 +10,7 @@ Copyright: © 2012-2017 Joey Hess © 2014 Sören Brunk License: AGPL-3+ -Files: Annex/AdjustedBranch.hs Annex/AdjustedBranch/Name.hs Annex/CurrentBranch.hs Annex/Version.hs Benchmark.hs Database/ContentIdentifier.hs Logs/File.hs Logs/Line.hs Logs/Smudge.hs Logs/ContentIdentifier/Pure.hs Remote/Git.hs Remote/Helper/Ssh.hs Remote/Adb.hs Remote/External.hs Remote/Extermal/Types.hs Types/AdjustedBranch.hs Types/RepoVersion.hs Upgrade/V6.hs +Files: Annex/AdjustedBranch.hs Annex/AdjustedBranch/Name.hs Annex/CurrentBranch.hs Annex/Version.hs Benchmark.hs Database/ContentIdentifier.hs Logs/File.hs Logs/Line.hs Logs/Smudge.hs Logs/ContentIdentifier.hs Logs/ContentIdentifier/Pure.hs Remote/Git.hs Remote/Helper/Ssh.hs Remote/Adb.hs Remote/External.hs Remote/Extermal/Types.hs Types/AdjustedBranch.hs Types/RepoVersion.hs Upgrade/V6.hs Copyright: © 2011-2019 Joey Hess License: AGPL-3+ diff --git a/Logs/ContentIdentifier.hs b/Logs/ContentIdentifier.hs new file mode 100644 index 0000000000..8329eb17c6 --- /dev/null +++ b/Logs/ContentIdentifier.hs @@ -0,0 +1,43 @@ +{- Remote content identifier logs. + - + - Copyright 2019 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Logs.ContentIdentifier ( + recordContentIdentifier, + getContentIdentifiers, +) where + +import Annex.Common +import Logs +import Logs.MapLog +import Types.Remote (ContentIdentifier) +import qualified Annex.Branch +import Logs.ContentIdentifier.Pure +import qualified Annex + +import qualified Data.Map as M + +-- | Records a remote's content identifier and the key that it corresponds to. +-- +-- A remote may use multiple content identifiers for the same key over time, +-- so ones that were recorded before are preserved. +recordContentIdentifier :: UUID -> ContentIdentifier -> Key -> Annex () +recordContentIdentifier u cid k = do + c <- liftIO currentVectorClock + config <- Annex.getGitConfig + Annex.Branch.change (remoteContentIdentifierLogFile config k) $ + buildLog . addcid c . parseLog + where + addcid c l = changeMapLog c u (cid:fromMaybe [] (M.lookup u m)) l + where + m = simpleMap l + +-- | Get all content identifiers that a remote is known to use for a key. +getContentIdentifiers :: UUID -> Key -> Annex [ContentIdentifier] +getContentIdentifiers u k = do + config <- Annex.getGitConfig + fromMaybe [] . M.lookup u . simpleMap . parseLog + <$> Annex.Branch.get (remoteContentIdentifierLogFile config k) diff --git a/git-annex.cabal b/git-annex.cabal index 89c1f1db44..ff1e9b2249 100644 --- a/git-annex.cabal +++ b/git-annex.cabal @@ -870,6 +870,7 @@ Executable git-annex Logs.Chunk Logs.Chunk.Pure Logs.Config + Logs.ContentIdentifier Logs.ContentIdentifier.Pure Logs.Difference Logs.Difference.Pure