summaryrefslogtreecommitdiff
path: root/Command/SetKey.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-07-02 17:44:25 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-07-02 17:44:25 -0400
commit5d6c7bccb3037633dc3360dcc22639adb5fe5793 (patch)
tree6f6ba780ad7f2104e3cee68778e5cd19b958605c /Command/SetKey.hs
parentd46832a3537cfbdc44a4b0b39c6a16abe5e15581 (diff)
Brought back the setkey plumbing command that was removed in 2011, since we found a use case for it. Note that the command's syntax was changed for consistency.
Diffstat (limited to 'Command/SetKey.hs')
-rw-r--r--Command/SetKey.hs49
1 files changed, 49 insertions, 0 deletions
diff --git a/Command/SetKey.hs b/Command/SetKey.hs
new file mode 100644
index 000000000..02118fb14
--- /dev/null
+++ b/Command/SetKey.hs
@@ -0,0 +1,49 @@
+{- git-annex command
+ -
+ - Copyright 2010, 2015 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.SetKey where
+
+import Common.Annex
+import Command
+import Logs.Location
+import Annex.Content
+import Types.Key
+
+cmd :: [Command]
+cmd = [command "setkey" (paramPair paramKey paramPath) seek
+ SectionPlumbing "sets annexed content for a key"]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start (keyname:file:[]) = do
+ showStart "setkey" file
+ next $ perform file (mkKey keyname)
+start _ = error "specify a key and a content file"
+
+mkKey :: String -> Key
+mkKey = fromMaybe (error "bad key") . file2key
+
+perform :: FilePath -> Key -> CommandPerform
+perform file key = do
+ -- the file might be on a different filesystem, so mv is used
+ -- rather than simply calling moveAnnex; disk space is also
+ -- checked this way.
+ ok <- getViaTmp key $ \dest ->
+ if dest /= file
+ then liftIO $
+ boolSystem "mv" [File file, File dest]
+ else return True
+ if ok
+ then next $ cleanup key
+ else error "mv failed!"
+
+cleanup :: Key -> CommandCleanup
+cleanup key = do
+ logStatus key InfoPresent
+ return True