2011-03-18 00:36:25 +00:00
|
|
|
[[!meta title="arbitrary/configurable backends"]]
|
|
|
|
|
|
|
|
(Retitling as this has drifted..)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2011-03-17 00:04:38 +00:00
|
|
|
I thought this might be useful, since curl is being used for the URL backend, it might be worth checking for it's existence.
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
diff --git a/configure.hs b/configure.hs
|
|
|
|
index 772ba54..1a563e0 100644
|
|
|
|
--- a/configure.hs
|
|
|
|
+++ b/configure.hs
|
|
|
|
@@ -13,6 +13,7 @@ tests = [
|
|
|
|
, TestCase "uuid generator" $ selectCmd "uuid" ["uuid", "uuidgen"]
|
|
|
|
, TestCase "xargs -0" $ requireCmd "xargs_0" "xargs -0 </dev/null"
|
|
|
|
, TestCase "rsync" $ requireCmd "rsync" "rsync --version >/dev/null"
|
|
|
|
+ , TestCase "curl" $ requireCmd "curl" "curl --version >/dev/null"
|
|
|
|
, TestCase "unicode FilePath support" $ unicodeFilePath
|
|
|
|
] ++ shaTestCases [1, 256, 512, 224, 384]
|
|
|
|
</pre>
|
|
|
|
|
2011-03-17 15:57:03 +00:00
|
|
|
> Well, curl is an optional extra, so requireCmd is too strong. Changed
|
|
|
|
> to testCmd and applied, thank you!
|
|
|
|
>
|
|
|
|
> I thought about actually *using* the resulting SysConfig.curl
|
|
|
|
> to disable the URL backend if False.. but probably it's better
|
|
|
|
> to just let it fail if curl is not available. Although, if we wanted
|
|
|
|
> to add a check for wget or something and use it when curl was not
|
|
|
|
> available, that might be worth doing. --[[Joey]]
|
|
|
|
|
2011-03-17 20:27:54 +00:00
|
|
|
>> I was thinking that is it worth doing a generic "stat", "delete", "get"
|
|
|
|
>> and "put" options, I do like the idea of having the possibility of
|
|
|
|
>> being about to use completely arbitrary storage systems or arbitrary
|
|
|
|
>> transfer systems. If there was the capability of doing so it would be
|
|
|
|
>> interesting to see possibilities of using aria2 for using something
|
|
|
|
>> like bittorrent as backend, or using something like irods or some
|
|
|
|
>> grid storage system as the storage archive. It's just an idea as
|
|
|
|
>> I have seen it implemented quite well in irods.
|
|
|
|
|
2011-03-18 00:36:25 +00:00
|
|
|
>>> I'm unsure about the idea of having a backend where that is
|
|
|
|
>>> parameterized. It would mean that one annex's GENERIC-foo key
|
|
|
|
>>> might be entirely different from another's key with the same backend
|
|
|
|
>>> and details. And a misconfiguration could get data the wrong
|
|
|
|
>>> way and get the wrong data, etc.
|
|
|
|
>>>
|
|
|
|
>>> I mostly look at the URL backend as an example that can be modified to
|
|
|
|
>>> make this kind of custom backend. You already probably know enough to
|
|
|
|
>>> make a TORRENT backend where keys are the urls to torrents to download
|
|
|
|
>>> with `aria2c --follow-torrent=mem`.
|
|
|
|
>>>
|
|
|
|
>>> I am also interested in doing backends that use eg, cloud storage.
|
|
|
|
>>> A S3 backend that could upload files to S3 in addition to downloading
|
|
|
|
>>> them, for example, would be handy. --[[Joey]]
|
|
|
|
|
2011-03-31 19:40:08 +00:00
|
|
|
>>>> So, rather than use backends to do this, it instead made more sense
|
|
|
|
>>>> to make them [[special_remotes]]. The URL backend remains a bit
|
|
|
|
>>>> of a special case, and a bittorrent backend that downloaded a file
|
|
|
|
>>>> from a bittorrent url would still be a good use of backend, but for
|
|
|
|
>>>> storing files in external data stores like S3, making it a remote
|
|
|
|
>>>> makes better sense. I think I can close this bug now, [[done]]
|
|
|
|
>>>> --[[Joey]]
|
|
|
|
|
2011-03-17 00:04:38 +00:00
|
|
|
also in Backend/URL.hs is it worth making a minor change to the way curl is called (I'm not sure if the following is correct or not)
|
|
|
|
|
2011-03-17 15:57:03 +00:00
|
|
|
> It's correct, typewise, but I don't see any real reason to bother
|
|
|
|
> with the change. But I do appreciate patches, which have been rare
|
|
|
|
> so far, probaby because of Haskell.. :) --[[Joey]]
|
|
|
|
|
2011-03-17 20:27:54 +00:00
|
|
|
>> heh agreed
|
|
|
|
|
2011-03-17 00:04:38 +00:00
|
|
|
<pre>
|
|
|
|
diff --git a/Backend/URL.hs b/Backend/URL.hs
|
|
|
|
index 29dc8fe..4afcf86 100644
|
|
|
|
--- a/Backend/URL.hs
|
|
|
|
+++ b/Backend/URL.hs
|
|
|
|
@@ -50,10 +50,13 @@ dummyFsck _ _ _ = return True
|
|
|
|
dummyOk :: Key -> Annex Bool
|
|
|
|
dummyOk _ = return True
|
|
|
|
|
|
|
|
+curl :: [CommandParam] -> IO Bool
|
|
|
|
+curl = boolSystem "curl"
|
|
|
|
+
|
|
|
|
downloadUrl :: Key -> FilePath -> Annex Bool
|
|
|
|
downloadUrl key file = do
|
|
|
|
showNote "downloading"
|
|
|
|
showProgress -- make way for curl progress bar
|
|
|
|
- liftIO $ boolSystem "curl" [Params "-# -o", File file, File url]
|
|
|
|
+ liftIO $ curl [Params "-# -o", File file, File url]
|
|
|
|
where
|
|
|
|
url = join ":" $ drop 1 $ split ":" $ show key
|
|
|
|
</pre>
|