Added SETURIPRESENT and SETURIMISSING to external special remote protocol
Useful for things like ipfs that don't use regular urls. An external special remote can add a regular url to a key, and then git-annex get will download it from the web. But for ipfs, we want to instead tell git-annex that the uri uses OtherDownloader. Before this change, the external special remote protocol lacked a way to do that.
This commit is contained in:
parent
9b4b190739
commit
6045406deb
7 changed files with 32 additions and 6 deletions
|
@ -223,6 +223,10 @@ handleRequest' lck external req mp responsehandler
|
|||
setUrlPresent (externalUUID external) key url
|
||||
handleRemoteRequest (SETURLMISSING key url) =
|
||||
setUrlMissing (externalUUID external) key url
|
||||
handleRemoteRequest (SETURIPRESENT key uri) =
|
||||
withurl (SETURLPRESENT key) uri
|
||||
handleRemoteRequest (SETURIMISSING key uri) =
|
||||
withurl (SETURLMISSING key) uri
|
||||
handleRemoteRequest (GETURLS key prefix) = do
|
||||
mapM_ (send . VALUE . fst . getDownloader)
|
||||
=<< getUrlsWithPrefix key prefix
|
||||
|
@ -242,6 +246,9 @@ handleRequest' lck external req mp responsehandler
|
|||
}
|
||||
where
|
||||
base = replace "/" "_" $ fromUUID (externalUUID external) ++ "-" ++ setting
|
||||
|
||||
withurl mk uri = handleRemoteRequest $ mk $
|
||||
setDownloader (show uri) OtherDownloader
|
||||
|
||||
sendMessage :: Sendable m => ExternalLock -> External -> m -> Annex ()
|
||||
sendMessage lck external m =
|
||||
|
|
9
Remote/External/Types.hs
vendored
9
Remote/External/Types.hs
vendored
|
@ -43,6 +43,7 @@ import Utility.Url (URLString)
|
|||
import qualified Utility.SimpleProtocol as Proto
|
||||
|
||||
import Control.Concurrent.STM
|
||||
import Network.URI
|
||||
|
||||
-- If the remote is not yet running, the ExternalState TMVar is empty.
|
||||
data External = External
|
||||
|
@ -182,6 +183,8 @@ data RemoteRequest
|
|||
| GETSTATE Key
|
||||
| SETURLPRESENT Key URLString
|
||||
| SETURLMISSING Key URLString
|
||||
| SETURIPRESENT Key URI
|
||||
| SETURIMISSING Key URI
|
||||
| GETURLS Key String
|
||||
| DEBUG String
|
||||
deriving (Show)
|
||||
|
@ -202,6 +205,8 @@ instance Proto.Receivable RemoteRequest where
|
|||
parseCommand "GETSTATE" = Proto.parse1 GETSTATE
|
||||
parseCommand "SETURLPRESENT" = Proto.parse2 SETURLPRESENT
|
||||
parseCommand "SETURLMISSING" = Proto.parse2 SETURLMISSING
|
||||
parseCommand "SETURIPRESENT" = Proto.parse2 SETURIPRESENT
|
||||
parseCommand "SETURIMISSING" = Proto.parse2 SETURIMISSING
|
||||
parseCommand "GETURLS" = Proto.parse2 GETURLS
|
||||
parseCommand "DEBUG" = Proto.parse1 DEBUG
|
||||
parseCommand _ = Proto.parseFail
|
||||
|
@ -288,3 +293,7 @@ instance Proto.Serializable [(URLString, Size, FilePath)] where
|
|||
where
|
||||
go c (url:sz:f:rest) = go ((url, readish sz, f):c) rest
|
||||
go c _ = reverse c
|
||||
|
||||
instance Proto.Serializable URI where
|
||||
serialize = show
|
||||
deserialize = parseURI
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue