aa1ad0b7ca
Clean build under ghc 8.8.3, which seems to do better at finding cases where two imports both provide the same symbol, and warns about one of them. This commit was sponsored by Ilya Shlyakhter on Patreon.
48 lines
1.4 KiB
Haskell
48 lines
1.4 KiB
Haskell
{- git-annex command
|
|
-
|
|
- Copyright 2010 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
module Command.RecvKey where
|
|
|
|
import Command
|
|
import Annex.Content
|
|
import Annex.Action
|
|
import Annex
|
|
import Utility.Rsync
|
|
import Types.Transfer
|
|
import Command.SendKey (fieldTransfer)
|
|
import qualified CmdLine.GitAnnexShell.Fields as Fields
|
|
|
|
cmd :: Command
|
|
cmd = noCommit $ command "recvkey" SectionPlumbing
|
|
"runs rsync in server mode to receive content"
|
|
paramKey (withParams seek)
|
|
|
|
seek :: CmdParams -> CommandSeek
|
|
seek = withKeys (commandAction . start)
|
|
|
|
start :: Key -> CommandStart
|
|
start key = fieldTransfer Download key $ \_p -> do
|
|
-- Always verify content when a repo is sending an unlocked file,
|
|
-- as the file could change while being transferred.
|
|
fromunlocked <- (isJust <$> Fields.getField Fields.unlocked)
|
|
<||> (isJust <$> Fields.getField Fields.direct)
|
|
let verify = if fromunlocked then AlwaysVerify else DefaultVerify
|
|
-- This matches the retrievalSecurityPolicy of Remote.Git
|
|
let rsp = RetrievalAllKeysSecure
|
|
ifM (getViaTmp rsp verify key go)
|
|
( do
|
|
-- forcibly quit after receiving one key,
|
|
-- and shutdown cleanly
|
|
_ <- shutdown True
|
|
return True
|
|
, return False
|
|
)
|
|
where
|
|
go tmp = unVerified $ do
|
|
opts <- filterRsyncSafeOptions . maybe [] words
|
|
<$> getField "RsyncOptions"
|
|
liftIO $ rsyncServerReceive (map Param opts) tmp
|