This new approach allows filtering out checks from the default set that are not appropriate for a command, rather than having to list every check that is appropriate. It also reduces some boilerplate. Haskell does not define Eq for functions, so I had to go a long way around with each check having a unique id. Meh.
		
			
				
	
	
		
			34 lines
		
	
	
	
		
			751 B
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			751 B
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{- git-annex command
 | 
						|
 -
 | 
						|
 - Copyright 2010 Joey Hess <joey@kitenet.net>
 | 
						|
 -
 | 
						|
 - Licensed under the GNU GPL version 3 or higher.
 | 
						|
 -}
 | 
						|
 | 
						|
module Command.RecvKey where
 | 
						|
 | 
						|
import Common.Annex
 | 
						|
import Command
 | 
						|
import CmdLine
 | 
						|
import Annex.Content
 | 
						|
import Utility.RsyncFile
 | 
						|
 | 
						|
def :: [Command]
 | 
						|
def = [command "recvkey" paramKey seek
 | 
						|
	"runs rsync in server mode to receive content"]
 | 
						|
 | 
						|
seek :: [CommandSeek]
 | 
						|
seek = [withKeys start]
 | 
						|
 | 
						|
start :: Key -> CommandStart
 | 
						|
start key = do
 | 
						|
	whenM (inAnnex key) $ error "key is already present in annex"
 | 
						|
	
 | 
						|
	ok <- getViaTmp key (liftIO . rsyncServerReceive)
 | 
						|
	if ok
 | 
						|
		then do
 | 
						|
			-- forcibly quit after receiving one key,
 | 
						|
			-- and shutdown cleanly so queued git commands run
 | 
						|
			_ <- shutdown
 | 
						|
			liftIO exitSuccess
 | 
						|
		else liftIO exitFailure
 |