separate RemoteConfig parsing basically working
Many special remotes are not updated yet and are commented out.
This commit is contained in:
parent
71f78fe45d
commit
963239da5c
26 changed files with 282 additions and 212 deletions
|
@ -1,11 +1,12 @@
|
|||
{- git-annex crypto types
|
||||
-
|
||||
- Copyright 2011-2015 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2011-2020 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
||||
module Types.Crypto (
|
||||
EncryptionMethod(..),
|
||||
Cipher(..),
|
||||
StorableCipher(..),
|
||||
EncryptedCipherVariant(..),
|
||||
|
@ -21,6 +22,16 @@ module Types.Crypto (
|
|||
import Utility.Hash
|
||||
import Utility.Gpg (KeyIds(..))
|
||||
|
||||
import Data.Typeable
|
||||
|
||||
data EncryptionMethod
|
||||
= NoneEncryption
|
||||
| SharedEncryption
|
||||
| PubKeyEncryption
|
||||
| SharedPubKeyEncryption
|
||||
| HybridEncryption
|
||||
deriving (Typeable, Eq)
|
||||
|
||||
-- XXX ideally, this would be a locked memory region
|
||||
data Cipher = Cipher String | MacOnlyCipher String
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
module Types.ProposedAccepted where
|
||||
|
||||
import qualified Data.Map as M
|
||||
import Test.QuickCheck
|
||||
|
||||
-- | A value that may be proposed, or accepted.
|
||||
|
@ -37,28 +36,3 @@ instance Arbitrary t => Arbitrary (ProposedAccepted t) where
|
|||
[ Proposed <$> arbitrary
|
||||
, Accepted <$> arbitrary
|
||||
]
|
||||
|
||||
-- | Looks up a config in the map, and parses its value if found.
|
||||
--
|
||||
-- Accepted values will always result in a Right, using a fallback value
|
||||
-- if unable to parse.
|
||||
--
|
||||
-- Proposed values that cannot be parsed will result in a Left message.
|
||||
parseProposedAccepted
|
||||
:: ProposedAccepted String
|
||||
-> M.Map (ProposedAccepted String) (ProposedAccepted v) -- config map
|
||||
-> (v -> Maybe a) -- ^ parse the value
|
||||
-> a -- ^ fallback used when accepted value cannot be parsed
|
||||
-> String -- ^ short description of expected value
|
||||
-> Either String (Maybe a)
|
||||
parseProposedAccepted k m parser fallback desc =
|
||||
case M.lookup k m of
|
||||
Nothing -> Right Nothing
|
||||
Just (Proposed v) -> case parser v of
|
||||
Nothing -> Left $
|
||||
"bad " ++ fromProposedAccepted k ++
|
||||
" value (expected " ++ desc ++ ")"
|
||||
Just a -> Right (Just a)
|
||||
Just (Accepted v) -> case parser v of
|
||||
Nothing -> Right (Just fallback)
|
||||
Just a -> Right (Just a)
|
||||
|
|
|
@ -57,10 +57,10 @@ data RemoteTypeA a = RemoteType
|
|||
-- enumerates remotes of this type
|
||||
-- The Bool is True if automatic initialization of remotes is desired
|
||||
, enumerate :: Bool -> a [Git.Repo]
|
||||
-- generates a remote of this type
|
||||
, generate :: Git.Repo -> UUID -> ParsedRemoteConfig -> RemoteGitConfig -> RemoteStateHandle -> a (Maybe (RemoteA a))
|
||||
-- parse configs of remotes of this type
|
||||
, configParser :: [RemoteConfigParser]
|
||||
-- generates a remote of this type
|
||||
, generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> RemoteStateHandle -> a (Maybe (RemoteA a))
|
||||
-- initializes or enables a remote
|
||||
, setup :: SetupStage -> Maybe UUID -> Maybe CredPair -> RemoteConfig -> RemoteGitConfig -> a (RemoteConfig, UUID)
|
||||
-- check if a remote of this type is able to support export
|
||||
|
|
|
@ -28,12 +28,6 @@ type ParsedRemoteConfig = M.Map RemoteConfigField RemoteConfigValue
|
|||
data RemoteConfigValue where
|
||||
RemoteConfigValue :: Typeable v => v -> RemoteConfigValue
|
||||
|
||||
{- Extracts the value, if the field was parsed to the requested type. -}
|
||||
getRemoteConfigValue :: Typeable v => RemoteConfigField -> ParsedRemoteConfig -> Maybe v
|
||||
getRemoteConfigValue f m = case M.lookup f m of
|
||||
Just (RemoteConfigValue v) -> cast v
|
||||
Nothing -> Nothing
|
||||
|
||||
{- Parse a field's value provided by the user into a RemoteConfigValue.
|
||||
-
|
||||
- The RemoteConfig is provided to the parser function for cases
|
||||
|
@ -43,4 +37,4 @@ getRemoteConfigValue f m = case M.lookup f m of
|
|||
- Presence of fields that are not included in this list will cause
|
||||
- a parse failure.
|
||||
-}
|
||||
type RemoteConfigParser = (RemoteConfigField, Maybe (ProposedAccepted String) -> RemoteConfig -> Either String RemoteConfigValue)
|
||||
type RemoteConfigParser = (RemoteConfigField, Maybe (ProposedAccepted String) -> RemoteConfig -> Either String (Maybe RemoteConfigValue))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue