External special remote protocol now includes commands for setting and getting the urls associated with a key.

This commit is contained in:
Joey Hess 2014-12-08 13:32:27 -04:00
parent 689acbca99
commit 8093008ef4
6 changed files with 30 additions and 3 deletions

View file

@ -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

View file

@ -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"

View file

@ -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
View file

@ -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

View file

@ -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.

View file

@ -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)
---- ----