convert ddar to new ChunkedEncryptable API (but do not support chunking)
Since ddar de-deuplicates, I assume there is no benefit from chunking. This has not been tested!
This commit is contained in:
parent
b261df735d
commit
19b71cfb8f
1 changed files with 14 additions and 53 deletions
|
@ -9,7 +9,6 @@
|
||||||
module Remote.Ddar (remote) where
|
module Remote.Ddar (remote) where
|
||||||
|
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
import qualified Data.ByteString.Lazy as L
|
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import System.IO.Error
|
import System.IO.Error
|
||||||
import System.Process
|
import System.Process
|
||||||
|
@ -23,12 +22,9 @@ import qualified Git
|
||||||
import Config
|
import Config
|
||||||
import Config.Cost
|
import Config.Cost
|
||||||
import Remote.Helper.Special
|
import Remote.Helper.Special
|
||||||
import Remote.Helper.Encryptable
|
import Remote.Helper.ChunkedEncryptable
|
||||||
import Crypto
|
|
||||||
import Annex.Content
|
|
||||||
import Annex.Ssh
|
import Annex.Ssh
|
||||||
import Annex.UUID
|
import Annex.UUID
|
||||||
import Utility.Metered
|
|
||||||
|
|
||||||
type DdarRepo = String
|
type DdarRepo = String
|
||||||
|
|
||||||
|
@ -46,13 +42,17 @@ gen r u c gc = do
|
||||||
if ddarLocal ddarrepo
|
if ddarLocal ddarrepo
|
||||||
then nearlyCheapRemoteCost
|
then nearlyCheapRemoteCost
|
||||||
else expensiveRemoteCost
|
else expensiveRemoteCost
|
||||||
|
return $ Just $ encryptableRemote c
|
||||||
let new = Remote
|
(simplyPrepare $ store ddarrepo)
|
||||||
|
(simplyPrepare $ retrieve ddarrepo)
|
||||||
|
(this cst)
|
||||||
|
where
|
||||||
|
this cst = Remote
|
||||||
{ uuid = u
|
{ uuid = u
|
||||||
, cost = cst
|
, cost = cst
|
||||||
, name = Git.repoDescribe r
|
, name = Git.repoDescribe r
|
||||||
, storeKey = store ddarrepo
|
, storeKey = storeKeyDummy
|
||||||
, retrieveKeyFile = retrieve ddarrepo
|
, retrieveKeyFile = retreiveKeyFileDummy
|
||||||
, retrieveKeyFileCheap = retrieveCheap
|
, retrieveKeyFileCheap = retrieveCheap
|
||||||
, removeKey = remove ddarrepo
|
, removeKey = remove ddarrepo
|
||||||
, hasKey = checkPresent ddarrepo
|
, hasKey = checkPresent ddarrepo
|
||||||
|
@ -70,11 +70,6 @@ gen r u c gc = do
|
||||||
, availability = if ddarLocal ddarrepo then LocallyAvailable else GloballyAvailable
|
, availability = if ddarLocal ddarrepo then LocallyAvailable else GloballyAvailable
|
||||||
, readonly = False
|
, readonly = False
|
||||||
}
|
}
|
||||||
return $ Just $ encryptableRemote c
|
|
||||||
(storeEncrypted new ddarrepo)
|
|
||||||
(retrieveEncrypted ddarrepo)
|
|
||||||
new
|
|
||||||
where
|
|
||||||
ddarrepo = fromMaybe (error "missing ddarrepo") $ remoteAnnexDdarRepo gc
|
ddarrepo = fromMaybe (error "missing ddarrepo") $ remoteAnnexDdarRepo gc
|
||||||
|
|
||||||
ddarSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
|
ddarSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
|
||||||
|
@ -92,17 +87,8 @@ ddarSetup mu _ c = do
|
||||||
|
|
||||||
return (c', u)
|
return (c', u)
|
||||||
|
|
||||||
pipeDdar :: [CommandParam] -> Maybe Handle -> Maybe Handle -> IO Bool
|
store :: DdarRepo -> Storer
|
||||||
pipeDdar params inh outh = do
|
store ddarrepo = fileStorer $ \k src _p -> do
|
||||||
p <- runProcess "ddar" (toCommand params)
|
|
||||||
Nothing Nothing inh outh Nothing
|
|
||||||
ok <- waitForProcess p
|
|
||||||
case ok of
|
|
||||||
ExitSuccess -> return True
|
|
||||||
_ -> return False
|
|
||||||
|
|
||||||
store :: DdarRepo -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
|
|
||||||
store ddarrepo k _f _p = sendAnnex k (void $ remove ddarrepo k) $ \src -> do
|
|
||||||
let params =
|
let params =
|
||||||
[ Param "c"
|
[ Param "c"
|
||||||
, Param "-N"
|
, Param "-N"
|
||||||
|
@ -112,21 +98,6 @@ store ddarrepo k _f _p = sendAnnex k (void $ remove ddarrepo k) $ \src -> do
|
||||||
]
|
]
|
||||||
liftIO $ boolSystem "ddar" params
|
liftIO $ boolSystem "ddar" params
|
||||||
|
|
||||||
storeEncrypted :: Remote -> DdarRepo -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
|
|
||||||
storeEncrypted r ddarrepo (cipher, enck) k _p =
|
|
||||||
sendAnnex k (void $ remove ddarrepo k) $ \src ->
|
|
||||||
liftIO $ catchBoolIO $
|
|
||||||
encrypt (getGpgEncParams r) cipher (feedFile src) $ \h ->
|
|
||||||
pipeDdar params (Just h) Nothing
|
|
||||||
where
|
|
||||||
params =
|
|
||||||
[ Param "c"
|
|
||||||
, Param "-N"
|
|
||||||
, Param $ key2file enck
|
|
||||||
, Param ddarrepo
|
|
||||||
, Param "-"
|
|
||||||
]
|
|
||||||
|
|
||||||
{- Convert remote DdarRepo to host and path on remote end -}
|
{- Convert remote DdarRepo to host and path on remote end -}
|
||||||
splitRemoteDdarRepo :: DdarRepo -> (String, String)
|
splitRemoteDdarRepo :: DdarRepo -> (String, String)
|
||||||
splitRemoteDdarRepo ddarrepo =
|
splitRemoteDdarRepo ddarrepo =
|
||||||
|
@ -155,27 +126,17 @@ ddarExtractRemoteCall :: DdarRepo -> Key -> Annex (String, [CommandParam])
|
||||||
ddarExtractRemoteCall ddarrepo k =
|
ddarExtractRemoteCall ddarrepo k =
|
||||||
ddarRemoteCall ddarrepo 'x' [Param "--force-stdout", Param $ key2file k]
|
ddarRemoteCall ddarrepo 'x' [Param "--force-stdout", Param $ key2file k]
|
||||||
|
|
||||||
retrieve :: DdarRepo -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
|
retrieve :: DdarRepo -> Retriever
|
||||||
retrieve ddarrepo k _f d _p = do
|
retrieve ddarrepo = fileRetriever $ \d k _p -> do
|
||||||
(cmd, params) <- ddarExtractRemoteCall ddarrepo k
|
(cmd, params) <- ddarExtractRemoteCall ddarrepo k
|
||||||
liftIO $ catchBoolIO $ withFile d WriteMode $ \h -> do
|
liftIO $ withFile d WriteMode $ \h -> do
|
||||||
let p = (proc cmd $ toCommand params){ std_out = UseHandle h }
|
let p = (proc cmd $ toCommand params){ std_out = UseHandle h }
|
||||||
(_, _, _, pid) <- Common.Annex.createProcess p
|
(_, _, _, pid) <- Common.Annex.createProcess p
|
||||||
forceSuccessProcess p pid
|
forceSuccessProcess p pid
|
||||||
return True
|
|
||||||
|
|
||||||
retrieveCheap :: Key -> FilePath -> Annex Bool
|
retrieveCheap :: Key -> FilePath -> Annex Bool
|
||||||
retrieveCheap _ _ = return False
|
retrieveCheap _ _ = return False
|
||||||
|
|
||||||
retrieveEncrypted :: DdarRepo -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
|
|
||||||
retrieveEncrypted ddarrepo (cipher, enck) _ f _p = do
|
|
||||||
(cmd, params) <- ddarExtractRemoteCall ddarrepo enck
|
|
||||||
let p = proc cmd $ toCommand params
|
|
||||||
liftIO $ catchBoolIO $ withHandle StdoutHandle createProcessSuccess p $ \h -> do
|
|
||||||
decrypt cipher (\toh -> L.hPut toh =<< L.hGetContents h) $
|
|
||||||
readBytes $ L.writeFile f
|
|
||||||
return True
|
|
||||||
|
|
||||||
remove :: DdarRepo -> Key -> Annex Bool
|
remove :: DdarRepo -> Key -> Annex Bool
|
||||||
remove ddarrepo key = do
|
remove ddarrepo key = do
|
||||||
(cmd, params) <- ddarRemoteCall ddarrepo 'd' [Param $ key2file key]
|
(cmd, params) <- ddarRemoteCall ddarrepo 'd' [Param $ key2file key]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue