diff options
author | Joey Hess <joey@kitenet.net> | 2011-03-27 15:56:43 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-03-27 16:04:25 -0400 |
commit | b40f253d6e126d699e9f298bf670fc5e875bfd86 (patch) | |
tree | 546a11e81490fcc6b098085ceebd315cf3f6a305 /RemoteClass.hs | |
parent | 2821effce9ae95a2ef12a083ce0806fe058ac987 (diff) |
start of generalizing remotes
Goal is to support multiple different types of remotes, some of which
are not git repositories. To that end, added a Remote class, and moved
git remote specific code into Remote.GitRemote.
Remotes.hs is still present as some code has not been converted to use the
new Remote class yet.
Diffstat (limited to 'RemoteClass.hs')
-rw-r--r-- | RemoteClass.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/RemoteClass.hs b/RemoteClass.hs new file mode 100644 index 000000000..df2aefb71 --- /dev/null +++ b/RemoteClass.hs @@ -0,0 +1,46 @@ +{- git-annex remotes class + - + - Copyright 2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module RemoteClass where + +import Control.Exception + +import Annex +import UUID +import Key + +data Remote = Remote { + -- each Remote has a unique uuid + uuid :: UUID, + -- 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, + -- retrieves a key's contents to a file + retrieveKeyFile :: Key -> FilePath -> Annex Bool, + -- removes a key's contents + removeKey :: Key -> Annex 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), + -- Some remotes can check hasKey without an expensive network + -- operation. + hasKeyCheap :: Bool +} + +instance Show Remote 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 + +-- order remotes by cost +instance Ord Remote where + compare a b = compare (cost a) (cost b) |