add GETAVAILABILITY to external special remote protocol

And some reworking of types, and added an annex-availability git config
setting.
This commit is contained in:
Joey Hess 2014-01-13 14:41:10 -04:00
parent 47d2ebd374
commit c20f31a1ad
22 changed files with 99 additions and 26 deletions

11
Types/Availability.hs Normal file
View file

@ -0,0 +1,11 @@
{- git-annex remote availability
-
- Copyright 2014 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Types.Availability where
data Availability = GloballyAvailable | LocallyAvailable
deriving (Eq, Show, Read)

View file

@ -18,6 +18,7 @@ import qualified Git.Config
import Utility.DataUnits
import Config.Cost
import Types.Distribution
import Types.Availability
{- Main git-annex settings. Each setting corresponds to a git-config key
- such as annex.foo -}
@ -101,6 +102,7 @@ data RemoteGitConfig = RemoteGitConfig
, remoteAnnexTrustLevel :: Maybe String
, remoteAnnexStartCommand :: Maybe String
, remoteAnnexStopCommand :: Maybe String
, remoteAnnexAvailability :: Maybe Availability
{- These settings are specific to particular types of remotes
- including special remotes. -}
@ -130,6 +132,7 @@ extractRemoteGitConfig r remotename = RemoteGitConfig
, remoteAnnexTrustLevel = notempty $ getmaybe "trustlevel"
, remoteAnnexStartCommand = notempty $ getmaybe "start-command"
, remoteAnnexStopCommand = notempty $ getmaybe "stop-command"
, remoteAnnexAvailability = getmayberead "availability"
, remoteAnnexSshOptions = getoptions "ssh-options"
, remoteAnnexRsyncOptions = getoptions "rsync-options"

View file

@ -2,12 +2,19 @@
-
- Most things should not need this, using Types instead
-
- Copyright 2011 Joey Hess <joey@kitenet.net>
- Copyright 2011-2014 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Types.Remote where
module Types.Remote
( RemoteConfigKey
, RemoteConfig
, RemoteTypeA(..)
, RemoteA(..)
, Availability(..)
)
where
import Data.Map as M
import Data.Ord
@ -16,6 +23,7 @@ import qualified Git
import Types.Key
import Types.UUID
import Types.GitConfig
import Types.Availability
import Config.Cost
import Utility.Metered
import Git.Types
@ -82,7 +90,7 @@ data RemoteA a = Remote {
-- a Remote can be known to be readonly
readonly :: Bool,
-- a Remote can be globally available. (Ie, "in the cloud".)
globallyAvailable :: Bool,
availability :: Availability,
-- the type of the remote
remotetype :: RemoteTypeA a
}