Make git-annex-shell call the command with its (safe) options.

This commit is contained in:
guilhem 2013-03-29 01:34:07 +01:00 committed by Joey Hess
parent f5942eba7a
commit 3bfe011867
4 changed files with 61 additions and 29 deletions

View file

@ -10,11 +10,14 @@ module Command.SendKey where
import Common.Annex
import Command
import Annex.Content
import Annex
import Utility.Rsync
import Logs.Transfer
import qualified Fields
import Utility.Metered
import System.Console.GetOpt
def :: [Command]
def = [noCommit $ command "sendkey" paramKey seek
SectionPlumbing "runs rsync in server mode to send content"]
@ -23,13 +26,16 @@ seek :: [CommandSeek]
seek = [withKeys start]
start :: Key -> CommandStart
start key = ifM (inAnnex key)
( fieldTransfer Upload key $ \_p ->
sendAnnex key rollback $ liftIO . rsyncServerSend
, do
warning "requested key is not present"
liftIO exitFailure
)
start key = do
(opts,_,_) <- getOpt Permute rsyncSafeOptions <$>
maybe [] (split " ") <$> getField "RsyncOptions"
ifM (inAnnex key)
( fieldTransfer Upload key $ \_p ->
sendAnnex key rollback $ liftIO . rsyncServerSend (map Param opts)
, do
warning "requested key is not present"
liftIO exitFailure
)
where
{- No need to do any rollback; when sendAnnex fails, a nonzero
- exit will be propigated, and the remote will know the transfer