summaryrefslogtreecommitdiff
path: root/Remote/P2P.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Remote/P2P.hs')
-rw-r--r--Remote/P2P.hs85
1 files changed, 85 insertions, 0 deletions
diff --git a/Remote/P2P.hs b/Remote/P2P.hs
new file mode 100644
index 000000000..e0428eeeb
--- /dev/null
+++ b/Remote/P2P.hs
@@ -0,0 +1,85 @@
+{- git remotes using the git-annex P2P protocol
+ -
+ - Copyright 2016 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Remote.P2P (
+ remote,
+ chainGen
+) where
+
+import Annex.Common
+import P2P.Address
+import Types.Remote
+import Types.GitConfig
+import qualified Git
+import Config
+import Config.Cost
+import Remote.Helper.Git
+import Remote.Helper.Special
+
+remote :: RemoteType
+remote = RemoteType {
+ typename = "p2p",
+ -- Remote.Git takes care of enumerating P2P remotes,
+ -- and will call chainGen on them.
+ enumerate = const (return []),
+ generate = \_ _ _ _ -> return Nothing,
+ setup = error "P2P remotes are set up using git-annex p2p"
+}
+
+chainGen :: P2PAddress -> Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
+chainGen addr r u c gc = do
+ workerpool <- mkWorkerPool addr
+ cst <- remoteCost gc expensiveRemoteCost
+ let this = Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = \_ _ _ -> return False
+ , removeKey = removeKeyDummy
+ , lockContent = Nothing -- TODO use p2p protocol locking
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , localpath = Nothing
+ , repo = r
+ , gitconfig = gc { remoteGitConfig = Just $ extractGitConfig r }
+ , readonly = False
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = gitRepoInfo this
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
+ return $ Just $ specialRemote' (specialRemoteCfg c) c
+ (simplyPrepare $ store this workerpool)
+ (simplyPrepare $ retrieve this workerpool)
+ (simplyPrepare $ remove this workerpool)
+ (simplyPrepare $ checkKey this workerpool)
+ this
+
+data WorkerPool = WorkerPool
+
+mkWorkerPool :: P2PAddress -> Annex WorkerPool
+mkWorkerPool addr = undefined
+
+store :: Remote -> WorkerPool -> Storer
+store r workerpool = undefined
+
+retrieve :: Remote -> WorkerPool -> Retriever
+retrieve r workerpool = undefined
+
+remove :: Remote -> WorkerPool -> Remover
+remove r workerpool k = undefined
+
+checkKey :: Remote -> WorkerPool -> CheckPresent
+checkKey r workerpool k = undefined