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.
This commit is contained in:
parent
2821effce9
commit
b40f253d6e
6 changed files with 405 additions and 39 deletions
46
RemoteClass.hs
Normal file
46
RemoteClass.hs
Normal file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue