summaryrefslogtreecommitdiff
path: root/RemoteClass.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-03-27 15:56:43 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-03-27 16:04:25 -0400
commitb40f253d6e126d699e9f298bf670fc5e875bfd86 (patch)
tree546a11e81490fcc6b098085ceebd315cf3f6a305 /RemoteClass.hs
parent2821effce9ae95a2ef12a083ce0806fe058ac987 (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.hs46
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)