add remotes slot to Annex
This required parameterizing the type for Remote, to avoid a cycle.
This commit is contained in:
parent
b40f253d6e
commit
f30320aa75
7 changed files with 41 additions and 46 deletions
|
@ -9,38 +9,36 @@ module RemoteClass where
|
|||
|
||||
import Control.Exception
|
||||
|
||||
import Annex
|
||||
import UUID
|
||||
import Key
|
||||
|
||||
data Remote = Remote {
|
||||
data Remote a = Remote {
|
||||
-- each Remote has a unique uuid
|
||||
uuid :: UUID,
|
||||
uuid :: String,
|
||||
-- each Remote has a human visible name
|
||||
name :: String,
|
||||
-- Remotes have a use cost; higher is more expensive
|
||||
cost :: Int,
|
||||
-- Transfers a key to the remote.
|
||||
storeKey :: Key -> Annex Bool,
|
||||
storeKey :: Key -> a Bool,
|
||||
-- retrieves a key's contents to a file
|
||||
retrieveKeyFile :: Key -> FilePath -> Annex Bool,
|
||||
retrieveKeyFile :: Key -> FilePath -> a Bool,
|
||||
-- removes a key's contents
|
||||
removeKey :: Key -> Annex Bool,
|
||||
removeKey :: Key -> a Bool,
|
||||
-- Checks if a key is present in the remote; if the remote
|
||||
-- cannot be accessed returns a Left error.
|
||||
hasKey :: Key -> Annex (Either IOException Bool),
|
||||
hasKey :: Key -> a (Either IOException Bool),
|
||||
-- Some remotes can check hasKey without an expensive network
|
||||
-- operation.
|
||||
hasKeyCheap :: Bool
|
||||
}
|
||||
|
||||
instance Show Remote where
|
||||
instance Show (Remote a) where
|
||||
show remote = "Remote { uuid =\"" ++ uuid remote ++ "\" }"
|
||||
|
||||
-- two remotes are the same if they have the same uuid
|
||||
instance Eq Remote where
|
||||
a == b = uuid a == uuid b
|
||||
instance Eq (Remote a) where
|
||||
x == y = uuid x == uuid y
|
||||
|
||||
-- order remotes by cost
|
||||
instance Ord Remote where
|
||||
compare a b = compare (cost a) (cost b)
|
||||
instance Ord (Remote a) where
|
||||
compare x y = compare (cost x) (cost y)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue