summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-08-29 13:51:00 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-08-29 13:57:42 -0400
commitb0836c1a8ce6edb0604648c1fcf4396f43ebd998 (patch)
treef46c3b981ae1493d0d2758757b1231fe2fa01133
parent119f951d4b91fef9cad0d1ce76d3a430510bfdc1 (diff)
provide file with content to export
Rather than providing the key to export, provide the file. When exporting a treeish that contains files that are not annexed, this will let the content of those files also be exported. There's still a Key in the interface; it will be used by the external special remote protocol. A SHA1 key can be used when exporting non-annexed files. This commit was sponsored by Brock Spratlen on Patreon.
-rw-r--r--Remote/Directory.hs12
-rw-r--r--Types/Remote.hs12
2 files changed, 11 insertions, 13 deletions
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
index a371a1951..342b5bc57 100644
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -233,15 +233,13 @@ checkPresentGeneric d ps = liftIO $
exportPath :: FilePath -> ExportLocation -> FilePath
exportPath d (ExportLocation loc) = d </> loc
-storeExportDirectory :: FilePath -> Key -> ExportLocation -> MeterUpdate -> Annex Bool
-storeExportDirectory d k loc p = sendAnnex k rollback send
+storeExportDirectory :: FilePath -> FilePath -> Key -> ExportLocation -> MeterUpdate -> Annex Bool
+storeExportDirectory d src _k loc p = liftIO $ catchBoolIO $ do
+ createDirectoryIfMissing True dest
+ withMeteredFile src p (L.writeFile dest)
+ return True
where
dest = exportPath d loc
- send src = liftIO $ catchBoolIO $ do
- createDirectoryIfMissing True dest
- withMeteredFile src p (L.writeFile dest)
- return True
- rollback = liftIO $ nukeFile dest
retrieveExportDirectory :: FilePath -> Key -> ExportLocation -> FilePath -> MeterUpdate -> Annex (Bool, Verification)
retrieveExportDirectory d _k loc dest p = unVerified $ liftIO $ catchBoolIO $ do
diff --git a/Types/Remote.hs b/Types/Remote.hs
index d4b76f54f..6a4d2039e 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -97,20 +97,20 @@ data RemoteA a = Remote {
-- operation.
checkPresentCheap :: Bool,
- -- Exports a key's contents to an ExportLocation.
+ -- Exports content to an ExportLocation.
-- The exported file does not need to be updated atomically.
- storeExport :: Maybe (Key -> ExportLocation -> MeterUpdate -> a Bool),
- -- Retrieves an exported key to a file.
+ storeExport :: Maybe (FilePath -> Key -> ExportLocation -> MeterUpdate -> a Bool),
+ -- Retrieves exported content to a file.
-- (The MeterUpdate does not need to be used if it writes
-- sequentially to the file.)
retrieveExport :: Maybe (Key -> ExportLocation -> FilePath -> MeterUpdate -> a (Bool, Verification)),
- -- Removes an exported key (succeeds if the contents are not present)
+ -- Removes an exported file (succeeds if the contents are not present)
removeExport :: Maybe (Key -> ExportLocation -> a Bool),
- -- Checks if a key is exported to the remote at the specified
+ -- Checks if anything is exported to the remote at the specified
-- ExportLocation.
-- Throws an exception if the remote cannot be accessed.
checkPresentExport :: Maybe (Key -> ExportLocation -> a Bool),
- -- Renames an already exported key.
+ -- Renames an already exported file.
renameExport :: Maybe (Key -> ExportLocation -> ExportLocation -> a Bool),
-- Some remotes can provide additional details for whereis.