| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Network.GitLFS
Description
This implementation of the git-lfs API uses http Request and Response, but leaves actually connecting up the http client to the user.
You'll want to use a Manager that supports https, since the protocol uses http basic auth.
Some LFS servers, notably Github's, may require a User-Agent header in some of the requests, in order to allow eg, uploads. No such header is added by default, so be sure to add your own.
Synopsis
- data TransferRequest = TransferRequest {}
- data TransferRequestOperation
- data TransferAdapter = Basic
- data TransferRequestObject = TransferRequestObject {}
- startTransferRequest :: Endpoint -> TransferRequest -> Request
- data TransferResponse op = TransferResponse {}
- data TransferResponseOperation op = TransferResponseOperation {}
- class (FromJSON op, ToJSON op) => IsTransferResponseOperation op
- data DownloadOperation = DownloadOperation {}
- data UploadOperation = UploadOperation {}
- data OperationParams = OperationParams {
- href :: Url
- header :: Maybe (Map HTTPHeader HTTPHeaderValue)
- expires_in :: Maybe NumSeconds
- expires_at :: Maybe Text
- data ParsedTransferResponse op
- parseTransferResponse :: IsTransferResponseOperation op => ByteString -> ParsedTransferResponse op
- downloadOperationRequest :: DownloadOperation -> Maybe Request
- uploadOperationRequests :: UploadOperation -> (ServerSupportsChunks -> RequestBody) -> SHA256 -> Integer -> Maybe [Request]
- newtype ServerSupportsChunks = ServerSupportsChunks Bool
- data Endpoint
- guessEndpoint :: URI -> Maybe Endpoint
- mkEndpoint :: URI -> Maybe Endpoint
- modifyEndpointRequest :: Endpoint -> (Request -> Request) -> Endpoint
- sshDiscoverEndpointCommand :: FilePath -> TransferRequestOperation -> [String]
- parseSshDiscoverEndpointResponse :: ByteString -> Maybe Endpoint
- data TransferResponseError = TransferResponseError {}
- data TransferResponseObjectError = TransferResponseObjectError {}
- type Url = Text
- type SHA256 = Text
- data GitRef = GitRef {}
- type NumSeconds = Integer
- type HTTPHeader = Text
- type HTTPHeaderValue = Text
Transfer requests
data TransferRequest Source #
Constructors
| TransferRequest | |
Fields | |
Instances
data TransferRequestOperation Source #
Constructors
| RequestDownload | |
| RequestUpload |
Instances
| FromJSON TransferRequestOperation Source # | |
Defined in Network.GitLFS | |
| ToJSON TransferRequestOperation Source # | |
Defined in Network.GitLFS Methods toJSON :: TransferRequestOperation -> Value Source # toEncoding :: TransferRequestOperation -> Encoding Source # toJSONList :: [TransferRequestOperation] -> Value Source # toEncodingList :: [TransferRequestOperation] -> Encoding Source # | |
| Show TransferRequestOperation Source # | |
Defined in Network.GitLFS | |
data TransferAdapter Source #
Constructors
| Basic |
Instances
| FromJSON TransferAdapter Source # | |
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser TransferAdapter Source # parseJSONList :: Value -> Parser [TransferAdapter] Source # | |
| ToJSON TransferAdapter Source # | |
Defined in Network.GitLFS Methods toJSON :: TransferAdapter -> Value Source # toEncoding :: TransferAdapter -> Encoding Source # toJSONList :: [TransferAdapter] -> Value Source # toEncodingList :: [TransferAdapter] -> Encoding Source # omitField :: TransferAdapter -> Bool Source # | |
| Show TransferAdapter Source # | |
Defined in Network.GitLFS | |
data TransferRequestObject Source #
Constructors
| TransferRequestObject | |
Instances
| FromJSON TransferRequestObject Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser TransferRequestObject Source # parseJSONList :: Value -> Parser [TransferRequestObject] Source # | |||||
| ToJSON TransferRequestObject Source # | |||||
Defined in Network.GitLFS Methods toJSON :: TransferRequestObject -> Value Source # toEncoding :: TransferRequestObject -> Encoding Source # toJSONList :: [TransferRequestObject] -> Value Source # toEncodingList :: [TransferRequestObject] -> Encoding Source # | |||||
| Generic TransferRequestObject Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: TransferRequestObject -> Rep TransferRequestObject x Source # to :: Rep TransferRequestObject x -> TransferRequestObject Source # | |||||
| Show TransferRequestObject Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep TransferRequestObject Source # | |||||
Defined in Network.GitLFS type Rep TransferRequestObject = D1 ('MetaData "TransferRequestObject" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "TransferRequestObject" 'PrefixI 'True) (S1 ('MetaSel ('Just "req_oid") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SHA256) :*: S1 ('MetaSel ('Just "req_size") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer))) | |||||
startTransferRequest :: Endpoint -> TransferRequest -> Request Source #
Makes a Request that will start the process of making a transfer to or from the LFS endpoint.
Responses to transfer requests
data TransferResponse op Source #
Constructors
| TransferResponse | |
Fields
| |
Instances
| IsTransferResponseOperation op => FromJSON (TransferResponse op) Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser (TransferResponse op) Source # parseJSONList :: Value -> Parser [TransferResponse op] Source # omittedField :: Maybe (TransferResponse op) Source # | |||||
| IsTransferResponseOperation op => ToJSON (TransferResponse op) Source # | |||||
Defined in Network.GitLFS Methods toJSON :: TransferResponse op -> Value Source # toEncoding :: TransferResponse op -> Encoding Source # toJSONList :: [TransferResponse op] -> Value Source # toEncodingList :: [TransferResponse op] -> Encoding Source # omitField :: TransferResponse op -> Bool Source # | |||||
| Generic (TransferResponse op) Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: TransferResponse op -> Rep (TransferResponse op) x Source # to :: Rep (TransferResponse op) x -> TransferResponse op Source # | |||||
| Show op => Show (TransferResponse op) Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep (TransferResponse op) Source # | |||||
Defined in Network.GitLFS type Rep (TransferResponse op) = D1 ('MetaData "TransferResponse" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "TransferResponse" 'PrefixI 'True) (S1 ('MetaSel ('Just "transfer") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe TransferAdapter)) :*: S1 ('MetaSel ('Just "objects") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [TransferResponseOperation op]))) | |||||
data TransferResponseOperation op Source #
Constructors
| TransferResponseOperation | |
Fields
| |
Instances
| FromJSON op => FromJSON (TransferResponseOperation op) Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser (TransferResponseOperation op) Source # parseJSONList :: Value -> Parser [TransferResponseOperation op] Source # omittedField :: Maybe (TransferResponseOperation op) Source # | |||||
| ToJSON op => ToJSON (TransferResponseOperation op) Source # | |||||
Defined in Network.GitLFS Methods toJSON :: TransferResponseOperation op -> Value Source # toEncoding :: TransferResponseOperation op -> Encoding Source # toJSONList :: [TransferResponseOperation op] -> Value Source # toEncodingList :: [TransferResponseOperation op] -> Encoding Source # omitField :: TransferResponseOperation op -> Bool Source # | |||||
| Generic (TransferResponseOperation op) Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: TransferResponseOperation op -> Rep (TransferResponseOperation op) x Source # to :: Rep (TransferResponseOperation op) x -> TransferResponseOperation op Source # | |||||
| Show op => Show (TransferResponseOperation op) Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep (TransferResponseOperation op) Source # | |||||
Defined in Network.GitLFS type Rep (TransferResponseOperation op) = D1 ('MetaData "TransferResponseOperation" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "TransferResponseOperation" 'PrefixI 'True) ((S1 ('MetaSel ('Just "resp_oid") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SHA256) :*: S1 ('MetaSel ('Just "resp_size") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer)) :*: (S1 ('MetaSel ('Just "resp_authenticated") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Bool)) :*: (S1 ('MetaSel ('Just "resp_actions") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe op)) :*: S1 ('MetaSel ('Just "resp_error") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe TransferResponseObjectError)))))) | |||||
class (FromJSON op, ToJSON op) => IsTransferResponseOperation op Source #
Class of types that can be responses to a transfer request, that contain an operation to use to make the transfer.
Instances
data DownloadOperation Source #
Constructors
| DownloadOperation | |
Fields | |
Instances
| FromJSON DownloadOperation Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser DownloadOperation Source # parseJSONList :: Value -> Parser [DownloadOperation] Source # | |||||
| ToJSON DownloadOperation Source # | |||||
Defined in Network.GitLFS Methods toJSON :: DownloadOperation -> Value Source # toEncoding :: DownloadOperation -> Encoding Source # toJSONList :: [DownloadOperation] -> Value Source # toEncodingList :: [DownloadOperation] -> Encoding Source # omitField :: DownloadOperation -> Bool Source # | |||||
| Generic DownloadOperation Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: DownloadOperation -> Rep DownloadOperation x Source # to :: Rep DownloadOperation x -> DownloadOperation Source # | |||||
| Show DownloadOperation Source # | |||||
Defined in Network.GitLFS | |||||
| IsTransferResponseOperation DownloadOperation Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep DownloadOperation Source # | |||||
Defined in Network.GitLFS type Rep DownloadOperation = D1 ('MetaData "DownloadOperation" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "DownloadOperation" 'PrefixI 'True) (S1 ('MetaSel ('Just "download") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 OperationParams))) | |||||
data UploadOperation Source #
Constructors
| UploadOperation | |
Fields | |
Instances
| FromJSON UploadOperation Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser UploadOperation Source # parseJSONList :: Value -> Parser [UploadOperation] Source # | |||||
| ToJSON UploadOperation Source # | |||||
Defined in Network.GitLFS Methods toJSON :: UploadOperation -> Value Source # toEncoding :: UploadOperation -> Encoding Source # toJSONList :: [UploadOperation] -> Value Source # toEncodingList :: [UploadOperation] -> Encoding Source # omitField :: UploadOperation -> Bool Source # | |||||
| Generic UploadOperation Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: UploadOperation -> Rep UploadOperation x Source # to :: Rep UploadOperation x -> UploadOperation Source # | |||||
| Show UploadOperation Source # | |||||
Defined in Network.GitLFS | |||||
| IsTransferResponseOperation UploadOperation Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep UploadOperation Source # | |||||
Defined in Network.GitLFS type Rep UploadOperation = D1 ('MetaData "UploadOperation" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "UploadOperation" 'PrefixI 'True) (S1 ('MetaSel ('Just "upload") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 OperationParams) :*: S1 ('MetaSel ('Just "verify") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe OperationParams)))) | |||||
data OperationParams Source #
Constructors
| OperationParams | |
Fields
| |
Instances
| FromJSON OperationParams Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser OperationParams Source # parseJSONList :: Value -> Parser [OperationParams] Source # | |||||
| ToJSON OperationParams Source # | |||||
Defined in Network.GitLFS Methods toJSON :: OperationParams -> Value Source # toEncoding :: OperationParams -> Encoding Source # toJSONList :: [OperationParams] -> Value Source # toEncodingList :: [OperationParams] -> Encoding Source # omitField :: OperationParams -> Bool Source # | |||||
| Generic OperationParams Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: OperationParams -> Rep OperationParams x Source # to :: Rep OperationParams x -> OperationParams Source # | |||||
| Show OperationParams Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep OperationParams Source # | |||||
Defined in Network.GitLFS type Rep OperationParams = D1 ('MetaData "OperationParams" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "OperationParams" 'PrefixI 'True) ((S1 ('MetaSel ('Just "href") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Url) :*: S1 ('MetaSel ('Just "header") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Map HTTPHeader HTTPHeaderValue)))) :*: (S1 ('MetaSel ('Just "expires_in") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe NumSeconds)) :*: S1 ('MetaSel ('Just "expires_at") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))) | |||||
data ParsedTransferResponse op Source #
parseTransferResponse :: IsTransferResponseOperation op => ByteString -> ParsedTransferResponse op Source #
Parse the body of a response to a transfer request.
Making transfers
downloadOperationRequest :: DownloadOperation -> Maybe Request Source #
Builds a http request to perform a download.
uploadOperationRequests :: UploadOperation -> (ServerSupportsChunks -> RequestBody) -> SHA256 -> Integer -> Maybe [Request] Source #
Builds http request to perform an upload. The content to upload is provided, along with its SHA256 and size.
When the LFS server requested verification, there will be a second Request that does that; it should be run only after the upload has succeeded.
When the LFS server already contains the object, an empty list may be returned.
newtype ServerSupportsChunks Source #
When the LFS server indicates that it supports Transfer-Encoding chunked, this will contain a true value, and the RequestBody provided to uploadOperationRequests may be created using RequestBodyStreamChunked. Otherwise, that should be avoided as the server may not support the chunked encoding.
Constructors
| ServerSupportsChunks Bool |
Endpoint discovery
The endpoint of a git-lfs server.
guessEndpoint :: URI -> Maybe Endpoint Source #
Guesses the LFS endpoint from the http url of a git remote.
https://github.com/git-lfs/git-lfs/blob/master/docs/api/server-discovery.md
mkEndpoint :: URI -> Maybe Endpoint Source #
Smart constructor for an Endpoint, given the API URL.
modifyEndpointRequest :: Endpoint -> (Request -> Request) -> Endpoint Source #
When an Endpoint is used to generate a Request, this allows adjusting that Request.
This can be used to add http basic authentication to an Endpoint:
modifyEndpointRequest (guessEndpoint u) (applyBasicAuth "user" "pass")
sshDiscoverEndpointCommand :: FilePath -> TransferRequestOperation -> [String] Source #
Command to run via ssh with to discover an endpoint. The FilePath is the location of the git repository on the ssh server.
Note that, when sshing to the server, you should take care that the hostname you pass to ssh is really a hostname and not something that ssh will parse an an option, such as -oProxyCommand=".
parseSshDiscoverEndpointResponse :: ByteString -> Maybe Endpoint Source #
Parse the json output when doing ssh endpoint discovery.
Errors
data TransferResponseError Source #
This is an error with a TransferRequest as a whole. It's also possible for a TransferRequest to overall succeed, but fail for some objects; such failures use TransferResponseObjectError.
Constructors
| TransferResponseError | |
Fields | |
Instances
| FromJSON TransferResponseError Source # | |||||
Defined in Network.GitLFS Methods parseJSON :: Value -> Parser TransferResponseError Source # parseJSONList :: Value -> Parser [TransferResponseError] Source # | |||||
| ToJSON TransferResponseError Source # | |||||
Defined in Network.GitLFS Methods toJSON :: TransferResponseError -> Value Source # toEncoding :: TransferResponseError -> Encoding Source # toJSONList :: [TransferResponseError] -> Value Source # toEncodingList :: [TransferResponseError] -> Encoding Source # | |||||
| Generic TransferResponseError Source # | |||||
Defined in Network.GitLFS Associated Types
Methods from :: TransferResponseError -> Rep TransferResponseError x Source # to :: Rep TransferResponseError x -> TransferResponseError Source # | |||||
| Show TransferResponseError Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep TransferResponseError Source # | |||||
Defined in Network.GitLFS type Rep TransferResponseError = D1 ('MetaData "TransferResponseError" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "TransferResponseError" 'PrefixI 'True) (S1 ('MetaSel ('Just "resperr_message") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: (S1 ('MetaSel ('Just "resperr_request_id") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "resperr_documentation_url") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Url))))) | |||||
data TransferResponseObjectError Source #
An error with a single object within a TransferRequest.
Constructors
| TransferResponseObjectError | |
Fields | |
Instances
| FromJSON TransferResponseObjectError Source # | |||||
Defined in Network.GitLFS | |||||
| ToJSON TransferResponseObjectError Source # | |||||
Defined in Network.GitLFS Methods toJSON :: TransferResponseObjectError -> Value Source # toEncoding :: TransferResponseObjectError -> Encoding Source # toJSONList :: [TransferResponseObjectError] -> Value Source # toEncodingList :: [TransferResponseObjectError] -> Encoding Source # | |||||
| Generic TransferResponseObjectError Source # | |||||
Defined in Network.GitLFS Associated Types
| |||||
| Show TransferResponseObjectError Source # | |||||
Defined in Network.GitLFS | |||||
| type Rep TransferResponseObjectError Source # | |||||
Defined in Network.GitLFS type Rep TransferResponseObjectError = D1 ('MetaData "TransferResponseObjectError" "Network.GitLFS" "git-lfs-1.2.5-LIoU6j51UKC5MXIuysmTYt" 'False) (C1 ('MetaCons "TransferResponseObjectError" 'PrefixI 'True) (S1 ('MetaSel ('Just "respobjerr_code") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "respobjerr_message") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))) | |||||
Additional data types
type NumSeconds = Integer Source #
type HTTPHeader = Text Source #
type HTTPHeaderValue = Text Source #