summaryrefslogtreecommitdiff
path: root/Backend.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Backend.hs')
-rw-r--r--Backend.hs44
1 files changed, 23 insertions, 21 deletions
diff --git a/Backend.hs b/Backend.hs
index f7bbed6b5..40b618355 100644
--- a/Backend.hs
+++ b/Backend.hs
@@ -1,6 +1,6 @@
{- git-annex key/value backends
-
- - Copyright 2010-2014 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2017 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,14 +11,15 @@ module Backend (
genKey,
getBackend,
chooseBackend,
- lookupBackendName,
- maybeLookupBackendName,
+ lookupBackendVariety,
+ maybeLookupBackendVariety,
isStableKey,
) where
import Annex.Common
import qualified Annex
import Annex.CheckAttr
+import Types.Key
import Types.KeySource
import qualified Types.Backend as B
@@ -42,14 +43,15 @@ orderedList = do
f <- Annex.getState Annex.forcebackend
case f of
Just name | not (null name) ->
- return [lookupBackendName name]
+ return [lookupname name]
_ -> do
l' <- gen . annexBackends <$> Annex.getGitConfig
Annex.changeState $ \s -> s { Annex.backends = l' }
return l'
where
gen [] = list
- gen l = map lookupBackendName l
+ gen ns = map lookupname ns
+ lookupname = lookupBackendVariety . parseKeyVariety
{- Generates a key for a file, trying each backend in turn until one
- accepts it. -}
@@ -73,33 +75,33 @@ genKey' (b:bs) source = do
| otherwise = c
getBackend :: FilePath -> Key -> Annex (Maybe Backend)
-getBackend file k = let bname = keyBackendName k in
- case maybeLookupBackendName bname of
- Just backend -> return $ Just backend
- Nothing -> do
- warning $ "skipping " ++ file ++ " (unknown backend " ++ bname ++ ")"
- return Nothing
+getBackend file k = case maybeLookupBackendVariety (keyVariety k) of
+ Just backend -> return $ Just backend
+ Nothing -> do
+ warning $ "skipping " ++ file ++ " (unknown backend " ++ formatKeyVariety (keyVariety k) ++ ")"
+ return Nothing
{- Looks up the backend that should be used for a file.
- That can be configured on a per-file basis in the gitattributes file. -}
chooseBackend :: FilePath -> Annex (Maybe Backend)
chooseBackend f = Annex.getState Annex.forcebackend >>= go
where
- go Nothing = maybeLookupBackendName <$> checkAttr "annex.backend" f
+ go Nothing = maybeLookupBackendVariety . parseKeyVariety
+ <$> checkAttr "annex.backend" f
go (Just _) = Just . Prelude.head <$> orderedList
-{- Looks up a backend by name. May fail if unknown. -}
-lookupBackendName :: String -> Backend
-lookupBackendName s = fromMaybe unknown $ maybeLookupBackendName s
+{- Looks up a backend by variety. May fail if unsupported or disabled. -}
+lookupBackendVariety :: KeyVariety -> Backend
+lookupBackendVariety v = fromMaybe unknown $ maybeLookupBackendVariety v
where
- unknown = error $ "unknown backend " ++ s
+ unknown = error $ "unknown backend " ++ formatKeyVariety v
-maybeLookupBackendName :: String -> Maybe Backend
-maybeLookupBackendName s = M.lookup s nameMap
+maybeLookupBackendVariety :: KeyVariety -> Maybe Backend
+maybeLookupBackendVariety v = M.lookup v varietyMap
-nameMap :: M.Map String Backend
-nameMap = M.fromList $ zip (map B.name list) list
+varietyMap :: M.Map KeyVariety Backend
+varietyMap = M.fromList $ zip (map B.backendVariety list) list
isStableKey :: Key -> Bool
isStableKey k = maybe False (`B.isStableKey` k)
- (maybeLookupBackendName (keyBackendName k))
+ (maybeLookupBackendVariety (keyVariety k))