git-annex/Command/InitRemote.hs

65 lines
1.7 KiB
Haskell
Raw Normal View History

2011-03-29 03:22:31 +00:00
{- git-annex command
-
- Copyright 2011,2013 Joey Hess <id@joeyh.name>
2011-03-29 03:22:31 +00:00
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.InitRemote where
import qualified Data.Map as M
import Command
import Annex.SpecialRemote
2011-03-29 03:22:31 +00:00
import qualified Remote
2011-10-15 20:21:08 +00:00
import qualified Logs.Remote
import qualified Types.Remote as R
import Logs.UUID
import Types.GitConfig
2011-03-29 03:22:31 +00:00
cmd :: Command
cmd = command "initremote" SectionSetup
"creates a special (non-git) remote"
(paramPair paramName $ paramOptional $ paramRepeating paramKeyValue)
(withParams seek)
2011-03-29 03:22:31 +00:00
seek :: CmdParams -> CommandSeek
seek = withWords start
2011-03-29 03:22:31 +00:00
start :: [String] -> CommandStart
start [] = giveup "Specify a name for the remote."
start (name:ws) = ifM (isJust <$> findExisting name)
( giveup $ "There is already a special remote named \"" ++ name ++
"\". (Use enableremote to enable an existing special remote.)"
, do
ifM (isJust <$> Remote.byNameOnly name)
( giveup $ "There is already a remote named \"" ++ name ++ "\""
, do
let c = newConfig name
t <- either giveup return (findType config)
showStart' "initremote" (Just name)
next $ perform t name $ M.union config c
)
)
2012-11-12 05:05:04 +00:00
where
config = Logs.Remote.keyValToConfig ws
2011-03-29 03:22:31 +00:00
perform :: RemoteType -> String -> R.RemoteConfig -> CommandPerform
perform t name c = do
dummycfg <- liftIO dummyRemoteGitConfig
(c', u) <- R.setup t R.Init cu Nothing c dummycfg
next $ cleanup u name c'
where
cu = case M.lookup "uuid" c of
Just s
| isUUID s -> Just (toUUID s)
| otherwise -> giveup "invalid uuid"
Nothing -> Nothing
2011-03-29 18:55:59 +00:00
cleanup :: UUID -> String -> R.RemoteConfig -> CommandCleanup
cleanup u name c = do
describeUUID u name
2011-10-15 20:21:08 +00:00
Logs.Remote.configSet u c
2012-12-13 04:45:27 +00:00
return True