add key stability checking interface

Needed for resuming from chunks.

Url keys are considered not stable. I considered treating url keys with a
known size as stable, but just don't feel that is enough information.
This commit is contained in:
Joey Hess 2014-07-27 12:33:46 -04:00
parent aad8cfe718
commit 13bbb61a51
5 changed files with 18 additions and 1 deletions

View file

@ -14,7 +14,8 @@ module Backend (
isAnnexLink,
chooseBackend,
lookupBackendName,
maybeLookupBackendName
maybeLookupBackendName,
checkStableKey,
) where
import Common.Annex
@ -124,3 +125,7 @@ maybeLookupBackendName s = M.lookup s nameMap
nameMap :: M.Map String Backend
nameMap = M.fromList $ zip (map B.name list) list
checkStableKey :: Key -> Bool
checkStableKey k = maybe False (`B.isStableKey` k)
(maybeLookupBackendName (keyBackendName k))

View file

@ -45,6 +45,7 @@ genBackend hash = Just Backend
, fsckKey = Just $ checkKeyChecksum hash
, canUpgradeKey = Just needsUpgrade
, fastMigrate = Just trivialMigrate
, isStableKey = const True
}
genBackendE :: Hash -> Maybe Backend

View file

@ -25,6 +25,9 @@ backend = Backend
, fsckKey = Nothing
, canUpgradeKey = Nothing
, fastMigrate = Nothing
-- The content of an url can change at any time, so URL keys are
-- not stable.
, isStableKey = const False
}
{- Every unique url has a corresponding key. -}

View file

@ -23,6 +23,7 @@ backend = Backend
, fsckKey = Nothing
, canUpgradeKey = Nothing
, fastMigrate = Nothing
, isStableKey = const True
}
{- The key includes the file size, modification time, and the

View file

@ -15,9 +15,16 @@ import Types.KeySource
data BackendA a = Backend
{ name :: String
, getKey :: KeySource -> a (Maybe Key)
-- Checks the content of a key.
, fsckKey :: Maybe (Key -> FilePath -> a Bool)
-- Checks if a key can be upgraded to a better form.
, canUpgradeKey :: Maybe (Key -> Bool)
-- Checks if there is a fast way to migrate a key to a different
-- backend (ie, without re-hashing).
, fastMigrate :: Maybe (Key -> BackendA a -> Maybe Key)
-- Checks if a key is known (or assumed) to always refer to the
-- same data.
, isStableKey :: Key -> Bool
}
instance Show (BackendA a) where