Removed the instance LensGpgEncParams RemoteConfig because it encouraged code that does not take the RemoteGitConfig into account. RemoteType's setup was changed to take a RemoteGitConfig, although the only place that is able to provide a non-empty one is enableremote, when it's changing an existing remote. This led to several folow-on changes, and got RemoteGitConfig plumbed through.
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{- git-annex command
 | 
						|
 -
 | 
						|
 - Copyright 2011,2013 Joey Hess <id@joeyh.name>
 | 
						|
 -
 | 
						|
 - Licensed under the GNU GPL version 3 or higher.
 | 
						|
 -}
 | 
						|
 | 
						|
module Command.InitRemote where
 | 
						|
 | 
						|
import qualified Data.Map as M
 | 
						|
 | 
						|
import Command
 | 
						|
import Annex.SpecialRemote
 | 
						|
import qualified Remote
 | 
						|
import qualified Logs.Remote
 | 
						|
import qualified Types.Remote as R
 | 
						|
import Logs.UUID
 | 
						|
 | 
						|
cmd :: Command
 | 
						|
cmd = command "initremote" SectionSetup
 | 
						|
	"creates a special (non-git) remote"
 | 
						|
	(paramPair paramName $ paramOptional $ paramRepeating paramKeyValue)
 | 
						|
	(withParams seek)
 | 
						|
 | 
						|
seek :: CmdParams -> CommandSeek
 | 
						|
seek = withWords start
 | 
						|
 | 
						|
start :: [String] -> CommandStart
 | 
						|
start [] = error "Specify a name for the remote."
 | 
						|
start (name:ws) = ifM (isJust <$> findExisting name)
 | 
						|
	( error $ "There is already a special remote named \"" ++ name ++
 | 
						|
		"\". (Use enableremote to enable an existing special remote.)"
 | 
						|
	, do
 | 
						|
		ifM (isJust <$> Remote.byNameOnly name)
 | 
						|
			( error $ "There is already a remote named \"" ++ name ++ "\""
 | 
						|
			, do
 | 
						|
				let c = newConfig name
 | 
						|
				t <- either error return (findType config)
 | 
						|
 | 
						|
				showStart "initremote" name
 | 
						|
				next $ perform t name $ M.union config c
 | 
						|
			)
 | 
						|
	)
 | 
						|
  where
 | 
						|
	config = Logs.Remote.keyValToConfig ws
 | 
						|
 | 
						|
perform :: RemoteType -> String -> R.RemoteConfig -> CommandPerform
 | 
						|
perform t name c = do
 | 
						|
	(c', u) <- R.setup t Nothing Nothing c def
 | 
						|
	next $ cleanup u name c'
 | 
						|
 | 
						|
cleanup :: UUID -> String -> R.RemoteConfig -> CommandCleanup
 | 
						|
cleanup u name c = do
 | 
						|
	describeUUID u name
 | 
						|
	Logs.Remote.configSet u c
 | 
						|
	return True
 |