External special remote protocol now includes commands for setting and getting the urls associated with a key.
This commit is contained in:
parent
689acbca99
commit
8093008ef4
6 changed files with 30 additions and 3 deletions
|
@ -9,6 +9,7 @@ module Logs.Web (
|
||||||
URLString,
|
URLString,
|
||||||
webUUID,
|
webUUID,
|
||||||
getUrls,
|
getUrls,
|
||||||
|
getUrlsWithPrefix,
|
||||||
setUrlPresent,
|
setUrlPresent,
|
||||||
setUrlMissing,
|
setUrlMissing,
|
||||||
knownUrls,
|
knownUrls,
|
||||||
|
@ -46,6 +47,9 @@ getUrls key = go $ urlLogFile key : oldurlLogs key
|
||||||
then go ls
|
then go ls
|
||||||
else return us
|
else return us
|
||||||
|
|
||||||
|
getUrlsWithPrefix :: Key -> String -> Annex [URLString]
|
||||||
|
getUrlsWithPrefix key prefix = filter (prefix `isPrefixOf`) <$> getUrls key
|
||||||
|
|
||||||
setUrlPresent :: Key -> URLString -> Annex ()
|
setUrlPresent :: Key -> URLString -> Annex ()
|
||||||
setUrlPresent key url = do
|
setUrlPresent key url = do
|
||||||
us <- getUrls key
|
us <- getUrls key
|
||||||
|
|
|
@ -19,6 +19,7 @@ import Utility.Metered
|
||||||
import Logs.Transfer
|
import Logs.Transfer
|
||||||
import Logs.PreferredContent.Raw
|
import Logs.PreferredContent.Raw
|
||||||
import Logs.RemoteState
|
import Logs.RemoteState
|
||||||
|
import Logs.Web
|
||||||
import Config.Cost
|
import Config.Cost
|
||||||
import Annex.UUID
|
import Annex.UUID
|
||||||
import Creds
|
import Creds
|
||||||
|
@ -215,6 +216,11 @@ handleRequest' lck external req mp responsehandler
|
||||||
state <- fromMaybe ""
|
state <- fromMaybe ""
|
||||||
<$> getRemoteState (externalUUID external) key
|
<$> getRemoteState (externalUUID external) key
|
||||||
send $ VALUE state
|
send $ VALUE state
|
||||||
|
handleRemoteRequest (SETURLPRESENT key url) = setUrlPresent key url
|
||||||
|
handleRemoteRequest (SETURLMISSING key url) = setUrlMissing key url
|
||||||
|
handleRemoteRequest (GETURLS key prefix) = do
|
||||||
|
mapM_ (send . VALUE) =<< getUrlsWithPrefix key prefix
|
||||||
|
send (VALUE "") -- end of list
|
||||||
handleRemoteRequest (DEBUG msg) = liftIO $ debugM "external" msg
|
handleRemoteRequest (DEBUG msg) = liftIO $ debugM "external" msg
|
||||||
handleRemoteRequest (VERSION _) =
|
handleRemoteRequest (VERSION _) =
|
||||||
sendMessage lck external $ ERROR "too late to send VERSION"
|
sendMessage lck external $ ERROR "too late to send VERSION"
|
||||||
|
|
6
Remote/External/Types.hs
vendored
6
Remote/External/Types.hs
vendored
|
@ -165,6 +165,9 @@ data RemoteRequest
|
||||||
| GETWANTED
|
| GETWANTED
|
||||||
| SETSTATE Key String
|
| SETSTATE Key String
|
||||||
| GETSTATE Key
|
| GETSTATE Key
|
||||||
|
| SETURLPRESENT Key String
|
||||||
|
| SETURLMISSING Key String
|
||||||
|
| GETURLS Key String
|
||||||
| DEBUG String
|
| DEBUG String
|
||||||
deriving (Show)
|
deriving (Show)
|
||||||
|
|
||||||
|
@ -182,6 +185,9 @@ instance Proto.Receivable RemoteRequest where
|
||||||
parseCommand "GETWANTED" = Proto.parse0 GETWANTED
|
parseCommand "GETWANTED" = Proto.parse0 GETWANTED
|
||||||
parseCommand "SETSTATE" = Proto.parse2 SETSTATE
|
parseCommand "SETSTATE" = Proto.parse2 SETSTATE
|
||||||
parseCommand "GETSTATE" = Proto.parse1 GETSTATE
|
parseCommand "GETSTATE" = Proto.parse1 GETSTATE
|
||||||
|
parseCommand "SETURLPRESENT" = Proto.parse2 SETURLPRESENT
|
||||||
|
parseCommand "SETURLMISSING" = Proto.parse2 SETURLMISSING
|
||||||
|
parseCommand "GETURLS" = Proto.parse2 GETURLS
|
||||||
parseCommand "DEBUG" = Proto.parse1 DEBUG
|
parseCommand "DEBUG" = Proto.parse1 DEBUG
|
||||||
parseCommand _ = Proto.parseFail
|
parseCommand _ = Proto.parseFail
|
||||||
|
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -2,6 +2,8 @@ git-annex (5.20141204) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* Webapp: When adding a new box.com remote, use the new style chunking.
|
* Webapp: When adding a new box.com remote, use the new style chunking.
|
||||||
Thanks, Jon Ander Peñalba.
|
Thanks, Jon Ander Peñalba.
|
||||||
|
* External special remote protocol now includes commands for setting
|
||||||
|
and getting the urls associated with a key.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Fri, 05 Dec 2014 13:42:08 -0400
|
-- Joey Hess <id@joeyh.name> Fri, 05 Dec 2014 13:42:08 -0400
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,17 @@ in control.
|
||||||
* `GETSTATE Key`
|
* `GETSTATE Key`
|
||||||
Gets any state that has been stored for the key.
|
Gets any state that has been stored for the key.
|
||||||
(git-annex replies with VALUE followed by the state.)
|
(git-annex replies with VALUE followed by the state.)
|
||||||
|
* `SETURLPRESENT Key Value`
|
||||||
|
Records an url (or uri) where the Key can be downloaded from.
|
||||||
|
* `SETURLMISSING Key Value`
|
||||||
|
Records that the key can no longer be downloaded from the specified
|
||||||
|
url (or uri).
|
||||||
|
* `GETURLS Key Value`
|
||||||
|
Gets the recorded urls where a Key can be downloaded from.
|
||||||
|
Only urls that start with the Value will be returned. The Value
|
||||||
|
may be empty to get all urls.
|
||||||
|
(git-annex replies one or more times with VALUE for each url.
|
||||||
|
The final VALUE has an empty value, indicating the end of the url list.)
|
||||||
* `DEBUG message`
|
* `DEBUG message`
|
||||||
Tells git-annex to display the message if --debug is enabled.
|
Tells git-annex to display the message if --debug is enabled.
|
||||||
|
|
||||||
|
@ -288,7 +299,5 @@ start a new process the next time it needs to use a remote.
|
||||||
the remote. However, \n and probably \0 need to be escaped somehow in the
|
the remote. However, \n and probably \0 need to be escaped somehow in the
|
||||||
file data, which adds complication.
|
file data, which adds complication.
|
||||||
* uuid discovery during INITREMOTE.
|
* uuid discovery during INITREMOTE.
|
||||||
* Support for getting and setting the list of urls that can be associated
|
|
||||||
with a key.
|
|
||||||
* Hook into webapp. Needs a way to provide some kind of prompt to the user
|
* Hook into webapp. Needs a way to provide some kind of prompt to the user
|
||||||
in the webapp, etc.
|
in the webapp, etc.
|
||||||
|
|
|
@ -36,7 +36,7 @@ and so know where to download from. (Much as the web special remote already
|
||||||
does.)
|
does.)
|
||||||
|
|
||||||
Prerequisite: Expand the external special remote interface to support
|
Prerequisite: Expand the external special remote interface to support
|
||||||
accessing the url log.
|
accessing the url log. (done)
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue