directory special remote: Made more efficient and robust.
Files are now written to a tmp directory in the remote, and once all chunks are written, etc, it's moved into the final place atomically. For now, checkpresent still checks every single chunk of a file, because the old method could leave partially transferred files with some chunks present and others not.
This commit is contained in:
parent
d3dfeeb3d9
commit
5f977cc725
5 changed files with 47 additions and 42 deletions
|
@ -90,7 +90,7 @@ store r k _f p = metered (Just p) k $ \meterupdate ->
|
|||
let url = davLocation baseurl k
|
||||
f <- inRepo $ gitAnnexLocation k
|
||||
liftIO $ withMeteredFile f meterupdate $
|
||||
storeHelper r url user pass
|
||||
storeHelper r k url user pass
|
||||
|
||||
storeEncrypted :: Remote -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
|
||||
storeEncrypted r (cipher, enck) k p = metered (Just p) k $ \meterupdate ->
|
||||
|
@ -98,12 +98,12 @@ storeEncrypted r (cipher, enck) k p = metered (Just p) k $ \meterupdate ->
|
|||
let url = davLocation baseurl enck
|
||||
f <- inRepo $ gitAnnexLocation k
|
||||
liftIO $ encrypt cipher (streamMeteredFile f meterupdate) $
|
||||
readBytes $ storeHelper r url user pass
|
||||
readBytes $ storeHelper r enck url user pass
|
||||
|
||||
storeHelper :: Remote -> DavUrl -> DavUser -> DavPass -> L.ByteString -> IO Bool
|
||||
storeHelper r urlbase user pass b = catchBoolIO $ do
|
||||
storeHelper :: Remote -> Key -> DavUrl -> DavUser -> DavPass -> L.ByteString -> IO Bool
|
||||
storeHelper r k urlbase user pass b = catchBoolIO $ do
|
||||
davMkdir (urlParent urlbase) user pass
|
||||
storeChunks urlbase chunksize storer recorder finalizer
|
||||
storeChunks k undefined undefined chunksize storer recorder finalizer
|
||||
where
|
||||
chunksize = chunkSize $ config r
|
||||
storer urls = storeChunked chunksize urls storehttp b
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue