summaryrefslogtreecommitdiff
path: root/Command/InitRemote.hs
blob: cf6a341c538cbb8928f16729fec3d4576afb59c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{- git-annex command
 -
 - Copyright 2011 Joey Hess <joey@kitenet.net>
 -
 - Licensed under the GNU GPL version 3 or higher.
 -}

module Command.InitRemote where

import qualified Data.Map as M
import Control.Monad (when)
import Control.Monad.State (liftIO)

import Command
import qualified Remote
import UUID
import Messages

command :: [Command]
command = [repoCommand "initremote"
	(paramPair paramName $
		paramOptional $ paramRepeating $ paramKeyValue) seek
	"sets up a special (non-git) remote"]

seek :: [CommandSeek]
seek = [withString start]

start :: CommandStartString
start params = notBareRepo $ do
	when (null ws) $ error "Specify a name for the remote"
	showStart "initremote" name
	r <- Remote.configGet name
	(u, c) <- case r of
		Just t -> return t
		Nothing -> do
			uuid <- liftIO $ genUUID
			return $ (uuid, M.empty)
	return $ Just $ perform name u $ M.union config c

	where
		ws = words params
		name = head ws
		config = Remote.keyValToMap $ tail ws

perform :: String -> UUID -> M.Map String String -> CommandPerform
perform name uuid config = do
	liftIO $ putStrLn $ show $ (uuid, config)
	return Nothing