summaryrefslogtreecommitdiff
path: root/Command/RecvKey.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Command/RecvKey.hs')
-rw-r--r--Command/RecvKey.hs38
1 files changed, 38 insertions, 0 deletions
diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs
new file mode 100644
index 000000000..3232010d4
--- /dev/null
+++ b/Command/RecvKey.hs
@@ -0,0 +1,38 @@
+{- git-annex command
+ -
+ - Copyright 2010 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.RecvKey where
+
+import Control.Monad (when)
+import Control.Monad.State (liftIO)
+import System.Exit
+
+import Command
+import Types
+import Core
+import qualified Backend
+import RsyncFile
+
+command :: [Command]
+command = [Command "recvkey" paramKey seek
+ "runs rsync in server mode to receive content"]
+
+seek :: [CommandSeek]
+seek = [withKeys start]
+
+start :: CommandStartString
+start keyname = do
+ backends <- Backend.list
+ let key = genKey (head backends) keyname
+ present <- inAnnex key
+ when present $
+ error "key is already present in annex"
+
+ ok <- getViaTmp key (liftIO . rsyncServerReceive)
+ if ok
+ then return Nothing
+ else liftIO exitFailure