git-annex-shell: Added lockcontent command, to prevent dropping of key's content.

This commit is contained in:
Joey Hess 2015-10-08 14:47:46 -04:00
parent 4d50958ed7
commit 5240a9f315
Failed to extract signature
4 changed files with 60 additions and 0 deletions

View file

@ -20,6 +20,7 @@ import Remote.GCrypt (getGCryptUUID)
import qualified Command.ConfigList import qualified Command.ConfigList
import qualified Command.InAnnex import qualified Command.InAnnex
import qualified Command.LockContent
import qualified Command.DropKey import qualified Command.DropKey
import qualified Command.RecvKey import qualified Command.RecvKey
import qualified Command.SendKey import qualified Command.SendKey
@ -32,6 +33,7 @@ cmds_readonly :: [Command]
cmds_readonly = cmds_readonly =
[ Command.ConfigList.cmd [ Command.ConfigList.cmd
, gitAnnexShellCheck Command.InAnnex.cmd , gitAnnexShellCheck Command.InAnnex.cmd
, gitAnnexShellCheck Command.LockContent.cmd
, gitAnnexShellCheck Command.SendKey.cmd , gitAnnexShellCheck Command.SendKey.cmd
, gitAnnexShellCheck Command.TransferInfo.cmd , gitAnnexShellCheck Command.TransferInfo.cmd
, gitAnnexShellCheck Command.NotifyChanges.cmd , gitAnnexShellCheck Command.NotifyChanges.cmd

45
Command/LockContent.hs Normal file
View file

@ -0,0 +1,45 @@
{- git-annex-shell command
-
- Copyright 2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.LockContent where
import Common.Annex
import Command
import Annex.Content
import Types.Key
cmd :: Command
cmd = noCommit $
command "lockcontent" SectionPlumbing
"locks key's content in the annex, preventing it being dropped"
paramKey
(withParams seek)
seek :: CmdParams -> CommandSeek
seek = withWords start
-- First, lock the content. Then, make sure the content is actually
-- present, and print out a "1". Wait for the caller to send a line before
-- dropping the lock.
start :: [String] -> CommandStart
start [ks] = do
ok <- lockContentShared k locksuccess
`catchNonAsync` (const $ return False)
liftIO $ if ok
then exitSuccess
else exitFailure
where
k = fromMaybe (error "bad key") (file2key ks)
locksuccess = ifM (inAnnex k)
( liftIO $ do
putStrLn "OK"
hFlush stdout
_ <- getLine
return True
, return False
)
start _ = error "Specify exactly 1 key."

2
debian/changelog vendored
View file

@ -20,6 +20,8 @@ git-annex (5.20150931) UNRELEASED; urgency=medium
and stop recommending bittornado | bittorrent. and stop recommending bittornado | bittorrent.
* Debian: Remove dependency on transformers library, as it is now * Debian: Remove dependency on transformers library, as it is now
included in ghc. included in ghc.
* git-annex-shell: Added lockcontent command, to prevent dropping of
key's content.
-- Joey Hess <id@joeyh.name> Thu, 01 Oct 2015 12:42:56 -0400 -- Joey Hess <id@joeyh.name> Thu, 01 Oct 2015 12:42:56 -0400

View file

@ -43,6 +43,17 @@ first "/~/" or "/~user/" is expanded to the specified home directory.
Exits 100 if it's unable to tell (perhaps the key is in the process of Exits 100 if it's unable to tell (perhaps the key is in the process of
being removed from the annex). being removed from the annex).
* lockcontent directory key
This locks a key's content in place in the annex, preventing it from
being dropped.
Once the content is successfully locked, outputs "OK". Then the content
remains locked until a newline is received from the caller or the
connection is broken.
Exits nonzero if the content is not present, or could not be locked.
* dropkey directory [key ...] * dropkey directory [key ...]
This drops the annexed data for the specified keys. This drops the annexed data for the specified keys.