summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Remote/Hook.hs40
-rw-r--r--debian/changelog3
-rw-r--r--doc/special_remotes/hook.mdwn2
3 files changed, 16 insertions, 29 deletions
diff --git a/Remote/Hook.hs b/Remote/Hook.hs
index 74641f5aa..0668e2ca9 100644
--- a/Remote/Hook.hs
+++ b/Remote/Hook.hs
@@ -7,7 +7,6 @@
module Remote.Hook (remote) where
-import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
import Common.Annex
@@ -17,12 +16,9 @@ import Types.Creds
import qualified Git
import Config
import Config.Cost
-import Annex.Content
import Annex.UUID
import Remote.Helper.Special
-import Remote.Helper.Encryptable
-import Crypto
-import Utility.Metered
+import Remote.Helper.ChunkedEncryptable
import Utility.Env
type Action = String
@@ -39,15 +35,15 @@ remote = RemoteType {
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
cst <- remoteCost gc expensiveRemoteCost
- return $ Just $ encryptableRemote c
- (storeEncrypted hooktype $ getGpgEncParams (c,gc))
- (retrieveEncrypted hooktype)
+ return $ Just $ chunkedEncryptableRemote c
+ (simplyPrepare $ store hooktype)
+ (simplyPrepare $ retrieve hooktype)
Remote {
uuid = u,
cost = cst,
name = Git.repoDescribe r,
- storeKey = store hooktype,
- retrieveKeyFile = retrieve hooktype,
+ storeKey = storeKeyDummy,
+ retrieveKeyFile = retreiveKeyFileDummy,
retrieveKeyFileCheap = retrieveCheap hooktype,
removeKey = remove hooktype,
hasKey = checkPresent r hooktype,
@@ -118,30 +114,18 @@ runHook hook action k f a = maybe (return False) run =<< lookupHook hook action
return False
)
-store :: HookName -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store h k _f _p = sendAnnex k (void $ remove h k) $ \src ->
+store :: HookName -> Storer
+store h = fileStorer $ \k src _p ->
runHook h "store" k (Just src) $ return True
-storeEncrypted :: HookName -> [CommandParam] -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted h gpgOpts (cipher, enck) k _p = withTmp enck $ \tmp ->
- sendAnnex k (void $ remove h enck) $ \src -> do
- liftIO $ encrypt gpgOpts cipher (feedFile src) $
- readBytes $ L.writeFile tmp
- runHook h "store" enck (Just tmp) $ return True
-
-retrieve :: HookName -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve h k _f d _p = runHook h "retrieve" k (Just d) $ return True
+retrieve :: HookName -> Retriever
+retrieve h = fileRetriever $ \d k _p ->
+ unlessM (runHook h "retrieve" k (Just d) $ return True) $
+ error "failed to retrieve content"
retrieveCheap :: HookName -> Key -> FilePath -> Annex Bool
retrieveCheap _ _ _ = return False
-retrieveEncrypted :: HookName -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted h (cipher, enck) _ f _p = withTmp enck $ \tmp ->
- runHook h "retrieve" enck (Just tmp) $ liftIO $ catchBoolIO $ do
- decrypt cipher (feedFile tmp) $
- readBytes $ L.writeFile f
- return True
-
remove :: HookName -> Key -> Annex Bool
remove h k = runHook h "remove" k Nothing $ return True
diff --git a/debian/changelog b/debian/changelog
index d8c23af9b..234385607 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,8 @@
git-annex (5.20140718) UNRELEASED; urgency=medium
* New chunk= option to chunk files stored in special remotes.
- Currently supported by: directory, S3, and all external special remotes.
+ Currently supported by: directory, S3, and all external and hook
+ special remotes.
* Partially transferred files are automatically resumed when using
chunked remotes!
* The old chunksize= option is deprecated. Do not use for new remotes.
diff --git a/doc/special_remotes/hook.mdwn b/doc/special_remotes/hook.mdwn
index 8cf31ed02..0bb76d98a 100644
--- a/doc/special_remotes/hook.mdwn
+++ b/doc/special_remotes/hook.mdwn
@@ -36,6 +36,8 @@ These parameters can be passed to `git annex initremote`:
* `keyid` - Specifies the gpg key to use for [[encryption]].
+* `chunk` - Enables [[chunking]] when storing large files.
+
## hooks
Each type of hook remote is specified by a collection of hook commands.