summaryrefslogtreecommitdiff
path: root/Command/EnableRemote.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Command/EnableRemote.hs')
-rw-r--r--Command/EnableRemote.hs26
1 files changed, 19 insertions, 7 deletions
diff --git a/Command/EnableRemote.hs b/Command/EnableRemote.hs
index 84216dd78..b3ba451c2 100644
--- a/Command/EnableRemote.hs
+++ b/Command/EnableRemote.hs
@@ -12,6 +12,8 @@ import Command
import qualified Logs.Remote
import qualified Types.Remote as R
import qualified Annex.SpecialRemote
+import qualified Remote
+import Logs.UUID
import qualified Data.Map as M
@@ -25,12 +27,19 @@ seek :: CmdParams -> CommandSeek
seek = withWords start
start :: [String] -> CommandStart
-start [] = unknownNameError "Specify the name of the special remote to enable."
+start [] = unknownNameError "Specify the special remote to enable."
start (name:ws) = go =<< Annex.SpecialRemote.findExisting name
where
config = Logs.Remote.keyValToConfig ws
- go Nothing = unknownNameError "Unknown special remote name."
+ go Nothing = do
+ m <- Annex.SpecialRemote.specialRemoteMap
+ confm <- Logs.Remote.readRemoteLog
+ v <- Remote.nameToUUID' name
+ case v of
+ Right u | u `M.member` m ->
+ go (Just (u, fromMaybe M.empty (M.lookup u confm)))
+ _ -> unknownNameError "Unknown special remote."
go (Just (u, c)) = do
let fullconfig = config `M.union` c
t <- either error return (Annex.SpecialRemote.findType fullconfig)
@@ -39,11 +48,14 @@ start (name:ws) = go =<< Annex.SpecialRemote.findExisting name
unknownNameError :: String -> Annex a
unknownNameError prefix = do
- names <- Annex.SpecialRemote.remoteNames
- error $ prefix ++ "\n" ++
- if null names
- then "(No special remotes are currently known; perhaps use initremote instead?)"
- else "Known special remotes: " ++ unwords names
+ m <- Annex.SpecialRemote.specialRemoteMap
+ descm <- M.unionWith Remote.addName <$> uuidMap <*> pure m
+ msg <- if M.null m
+ then pure "(No special remotes are currently known; perhaps use initremote instead?)"
+ else Remote.prettyPrintUUIDsDescs
+ "known special remotes"
+ descm (M.keys m)
+ error $ prefix ++ "\n" ++ msg
perform :: RemoteType -> UUID -> R.RemoteConfig -> CommandPerform
perform t u c = do