b81d662cbf
Done by adding a oneshot mode, in which location log changes are written to the journal, but not committed. Taking advantage of git-annex's existing ability to recover in this situation. This is used by git-annex-shell and other places where changes are made to a remote's location log.
34 lines
729 B
Haskell
34 lines
729 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
|
|
_ <- shutdown True
|
|
liftIO exitSuccess
|
|
else liftIO exitFailure
|