Make git-annex-shell call the command with its (safe) options.
This commit is contained in:
parent
f5942eba7a
commit
3bfe011867
4 changed files with 61 additions and 29 deletions
|
@ -11,6 +11,7 @@ import Common.Annex
|
|||
import Command
|
||||
import CmdLine
|
||||
import Annex.Content
|
||||
import Annex
|
||||
import Utility.Rsync
|
||||
import Logs.Transfer
|
||||
import Command.SendKey (fieldTransfer)
|
||||
|
@ -19,6 +20,8 @@ import qualified Types.Key
|
|||
import qualified Types.Backend
|
||||
import qualified Backend
|
||||
|
||||
import System.Console.GetOpt
|
||||
|
||||
def :: [Command]
|
||||
def = [noCommit $ command "recvkey" paramKey seek
|
||||
SectionPlumbing "runs rsync in server mode to receive content"]
|
||||
|
@ -40,13 +43,16 @@ start key = ifM (inAnnex key)
|
|||
)
|
||||
)
|
||||
where
|
||||
go tmp = ifM (liftIO $ rsyncServerReceive tmp)
|
||||
( ifM (isJust <$> Fields.getField Fields.direct)
|
||||
( directcheck tmp
|
||||
, return True
|
||||
go tmp = do
|
||||
(opts,_,_) <- getOpt Permute rsyncSafeOptions <$>
|
||||
maybe [] (split " ") <$> getField "RsyncOptions"
|
||||
ifM (liftIO $ rsyncServerReceive (map Param opts) tmp)
|
||||
( ifM (isJust <$> Fields.getField Fields.direct)
|
||||
( directcheck tmp
|
||||
, return True
|
||||
)
|
||||
, return False
|
||||
)
|
||||
, return False
|
||||
)
|
||||
{- If the sending repository uses direct mode, the file
|
||||
- it sends could be modified as it's sending it. So check
|
||||
- that the right size file was received, and that the key/value
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue