aboutsummaryrefslogtreecommitdiff
path: root/Types
diff options
context:
space:
mode:
Diffstat (limited to 'Types')
-rw-r--r--Types/Remote.hs93
1 files changed, 49 insertions, 44 deletions
diff --git a/Types/Remote.hs b/Types/Remote.hs
index 6e78bf238..169701ecc 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -19,6 +19,7 @@ module Types.Remote
, Verification(..)
, unVerified
, ExportLocation(..)
+ , ExportActions(..)
)
where
@@ -63,91 +64,75 @@ instance Eq (RemoteTypeA a) where
x == y = typename x == typename y
{- An individual remote. -}
-data RemoteA a = Remote {
+data RemoteA a = Remote
-- each Remote has a unique uuid
- uuid :: UUID,
+ { uuid :: UUID
-- each Remote has a human visible name
- name :: RemoteName,
+ , name :: RemoteName
-- Remotes have a use cost; higher is more expensive
- cost :: Cost,
+ , cost :: Cost
-- Transfers a key's contents from disk to the remote.
-- The key should not appear to be present on the remote until
-- all of its contents have been transferred.
- storeKey :: Key -> AssociatedFile -> MeterUpdate -> a Bool,
+ , storeKey :: Key -> AssociatedFile -> MeterUpdate -> a Bool
-- Retrieves a key's contents to a file.
-- (The MeterUpdate does not need to be used if it writes
-- sequentially to the file.)
- retrieveKeyFile :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> a (Bool, Verification),
+ , retrieveKeyFile :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> a (Bool, Verification)
-- Retrieves a key's contents to a tmp file, if it can be done cheaply.
-- It's ok to create a symlink or hardlink.
- retrieveKeyFileCheap :: Key -> AssociatedFile -> FilePath -> a Bool,
+ , retrieveKeyFileCheap :: Key -> AssociatedFile -> FilePath -> a Bool
-- Removes a key's contents (succeeds if the contents are not present)
- removeKey :: Key -> a Bool,
+ , removeKey :: Key -> a Bool
-- Uses locking to prevent removal of a key's contents,
-- thus producing a VerifiedCopy, which is passed to the callback.
-- If unable to lock, does not run the callback, and throws an
-- error.
-- This is optional; remotes do not have to support locking.
- lockContent :: forall r. Maybe (Key -> (VerifiedCopy -> a r) -> a r),
+ , lockContent :: forall r. Maybe (Key -> (VerifiedCopy -> a r) -> a r)
-- Checks if a key is present in the remote.
-- Throws an exception if the remote cannot be accessed.
- checkPresent :: Key -> a Bool,
+ , checkPresent :: Key -> a Bool
-- Some remotes can checkPresent without an expensive network
-- operation.
- checkPresentCheap :: Bool,
-
- -- Exports content to an ExportLocation.
- -- The exported file should not appear to be present on the remote
- -- until all of its contents have been transferred.
- storeExport :: Maybe (FilePath -> Key -> ExportLocation -> MeterUpdate -> a Bool),
- -- Retrieves exported content to a file.
- -- (The MeterUpdate does not need to be used if it writes
- -- sequentially to the file.)
- retrieveExport :: Maybe (Key -> ExportLocation -> FilePath -> MeterUpdate -> a (Bool, Verification)),
- -- Removes an exported file (succeeds if the contents are not present)
- removeExport :: Maybe (Key -> ExportLocation -> a Bool),
- -- Checks if anything is exported to the remote at the specified
- -- ExportLocation.
- -- Throws an exception if the remote cannot be accessed.
- checkPresentExport :: Maybe (Key -> ExportLocation -> a Bool),
- -- Renames an already exported file.
- renameExport :: Maybe (Key -> ExportLocation -> ExportLocation -> a Bool),
-
+ , checkPresentCheap :: Bool
+ -- Some remotes support exports of trees.
+ , exportActions :: ExportActions a
-- Some remotes can provide additional details for whereis.
- whereisKey :: Maybe (Key -> a [String]),
+ , whereisKey :: Maybe (Key -> a [String])
-- Some remotes can run a fsck operation on the remote,
-- without transferring all the data to the local repo
-- The parameters are passed to the fsck command on the remote.
- remoteFsck :: Maybe ([CommandParam] -> a (IO Bool)),
+ , remoteFsck :: Maybe ([CommandParam] -> a (IO Bool))
-- Runs an action to repair the remote's git repository.
- repairRepo :: Maybe (a Bool -> a (IO Bool)),
+ , repairRepo :: Maybe (a Bool -> a (IO Bool))
-- a Remote has a persistent configuration store
- config :: RemoteConfig,
+ , config :: RemoteConfig
-- git repo for the Remote
- repo :: Git.Repo,
+ , repo :: Git.Repo
-- a Remote's configuration from git
- gitconfig :: RemoteGitConfig,
+ , gitconfig :: RemoteGitConfig
-- a Remote can be assocated with a specific local filesystem path
- localpath :: Maybe FilePath,
+ , localpath :: Maybe FilePath
-- a Remote can be known to be readonly
- readonly :: Bool,
+ , readonly :: Bool
-- a Remote can be globally available. (Ie, "in the cloud".)
- availability :: Availability,
+ , availability :: Availability
-- the type of the remote
- remotetype :: RemoteTypeA a,
+ , remotetype :: RemoteTypeA a
-- For testing, makes a version of this remote that is not
-- available for use. All its actions should fail.
- mkUnavailable :: a (Maybe (RemoteA a)),
+ , mkUnavailable :: a (Maybe (RemoteA a))
-- Information about the remote, for git annex info to display.
- getInfo :: a [(String, String)],
+ , getInfo :: a [(String, String)]
-- Some remotes can download from an url (or uri).
- claimUrl :: Maybe (URLString -> a Bool),
+ , claimUrl :: Maybe (URLString -> a Bool)
-- Checks that the url is accessible, and gets information about
-- its contents, without downloading the full content.
-- Throws an exception if the url is inaccessible.
- checkUrl :: Maybe (URLString -> a UrlContents)
-}
+ , checkUrl :: Maybe (URLString -> a UrlContents)
+ }
instance Show (RemoteA a) where
show remote = "Remote { name =\"" ++ name remote ++ "\" }"
@@ -175,3 +160,23 @@ unVerified a = do
-- The FilePath will be relative, and may contain unix-style path
-- separators.
newtype ExportLocation = ExportLocation FilePath
+
+data ExportActions a = ExportActions
+ { exportSupported :: a Bool
+ -- Exports content to an ExportLocation.
+ -- The exported file should not appear to be present on the remote
+ -- until all of its contents have been transferred.
+ , storeExport :: FilePath -> Key -> ExportLocation -> MeterUpdate -> a Bool
+ -- Retrieves exported content to a file.
+ -- (The MeterUpdate does not need to be used if it writes
+ -- sequentially to the file.)
+ , retrieveExport :: Key -> ExportLocation -> FilePath -> MeterUpdate -> a (Bool, Verification)
+ -- Removes an exported file (succeeds if the contents are not present)
+ , removeExport :: Key -> ExportLocation -> a Bool
+ -- Checks if anything is exported to the remote at the specified
+ -- ExportLocation.
+ -- Throws an exception if the remote cannot be accessed.
+ , checkPresentExport :: Key -> ExportLocation -> a Bool
+ -- Renames an already exported file.
+ , renameExport :: Key -> ExportLocation -> ExportLocation -> a Bool
+ }