git-lfs-1.2.0: git-lfs protocol
Safe HaskellNone
LanguageHaskell2010

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

Transfer requests

data TransferRequest Source #

Instances

Instances details
Show TransferRequest Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> TransferRequest -> ShowS

show :: TransferRequest -> String

showList :: [TransferRequest] -> ShowS

Generic TransferRequest Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep TransferRequest :: Type -> Type

FromJSON TransferRequest Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser TransferRequest

parseJSONList :: Value -> Parser [TransferRequest]

ToJSON TransferRequest Source # 
Instance details

Defined in Network.GitLFS

Methods

toJSON :: TransferRequest -> Value

toEncoding :: TransferRequest -> Encoding

toJSONList :: [TransferRequest] -> Value

toEncodingList :: [TransferRequest] -> Encoding

type Rep TransferRequest Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferRequest = D1 ('MetaData "TransferRequest" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" 'False) (C1 ('MetaCons "TransferRequest" 'PrefixI 'True) ((S1 ('MetaSel ('Just "req_operation") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TransferRequestOperation) :*: S1 ('MetaSel ('Just "req_transfers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [TransferAdapter])) :*: (S1 ('MetaSel ('Just "req_ref") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe GitRef)) :*: S1 ('MetaSel ('Just "req_objects") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [TransferRequestObject]))))

data TransferRequestOperation Source #

Instances

Instances details
Show TransferRequestOperation Source # 
Instance details

Defined in Network.GitLFS

FromJSON TransferRequestOperation Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser TransferRequestOperation

parseJSONList :: Value -> Parser [TransferRequestOperation]

ToJSON TransferRequestOperation Source # 
Instance details

Defined in Network.GitLFS

data TransferAdapter Source #

Constructors

Basic 

Instances

Instances details
Show TransferAdapter Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> TransferAdapter -> ShowS

show :: TransferAdapter -> String

showList :: [TransferAdapter] -> ShowS

FromJSON TransferAdapter Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser TransferAdapter

parseJSONList :: Value -> Parser [TransferAdapter]

ToJSON TransferAdapter Source # 
Instance details

Defined in Network.GitLFS

Methods

toJSON :: TransferAdapter -> Value

toEncoding :: TransferAdapter -> Encoding

toJSONList :: [TransferAdapter] -> Value

toEncodingList :: [TransferAdapter] -> Encoding

data TransferRequestObject Source #

Constructors

TransferRequestObject 

Fields

Instances

Instances details
Show TransferRequestObject Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> TransferRequestObject -> ShowS

show :: TransferRequestObject -> String

showList :: [TransferRequestObject] -> ShowS

Generic TransferRequestObject Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep TransferRequestObject :: Type -> Type

FromJSON TransferRequestObject Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser TransferRequestObject

parseJSONList :: Value -> Parser [TransferRequestObject]

ToJSON TransferRequestObject Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferRequestObject Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferRequestObject = D1 ('MetaData "TransferRequestObject" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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 #

Instances

Instances details
Show op => Show (TransferResponse op) Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> TransferResponse op -> ShowS

show :: TransferResponse op -> String

showList :: [TransferResponse op] -> ShowS

Generic (TransferResponse op) Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep (TransferResponse op) :: Type -> Type

Methods

from :: TransferResponse op -> Rep (TransferResponse op) x

to :: Rep (TransferResponse op) x -> TransferResponse op

IsTransferResponseOperation op => FromJSON (TransferResponse op) Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser (TransferResponse op)

parseJSONList :: Value -> Parser [TransferResponse op]

IsTransferResponseOperation op => ToJSON (TransferResponse op) Source # 
Instance details

Defined in Network.GitLFS

Methods

toJSON :: TransferResponse op -> Value

toEncoding :: TransferResponse op -> Encoding

toJSONList :: [TransferResponse op] -> Value

toEncodingList :: [TransferResponse op] -> Encoding

type Rep (TransferResponse op) Source # 
Instance details

Defined in Network.GitLFS

type Rep (TransferResponse op) = D1 ('MetaData "TransferResponse" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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

Instances details
Show op => Show (TransferResponseOperation op) Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> TransferResponseOperation op -> ShowS

show :: TransferResponseOperation op -> String

showList :: [TransferResponseOperation op] -> ShowS

Generic (TransferResponseOperation op) Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep (TransferResponseOperation op) :: Type -> Type

FromJSON op => FromJSON (TransferResponseOperation op) Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser (TransferResponseOperation op)

parseJSONList :: Value -> Parser [TransferResponseOperation op]

ToJSON op => ToJSON (TransferResponseOperation op) Source # 
Instance details

Defined in Network.GitLFS

type Rep (TransferResponseOperation op) Source # 
Instance details

Defined in Network.GitLFS

type Rep (TransferResponseOperation op) = D1 ('MetaData "TransferResponseOperation" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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

Instances details
IsTransferResponseOperation UploadOperation Source # 
Instance details

Defined in Network.GitLFS

IsTransferResponseOperation DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

data DownloadOperation Source #

Instances

Instances details
Show DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> DownloadOperation -> ShowS

show :: DownloadOperation -> String

showList :: [DownloadOperation] -> ShowS

Generic DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep DownloadOperation :: Type -> Type

FromJSON DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser DownloadOperation

parseJSONList :: Value -> Parser [DownloadOperation]

ToJSON DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

IsTransferResponseOperation DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

type Rep DownloadOperation Source # 
Instance details

Defined in Network.GitLFS

type Rep DownloadOperation = D1 ('MetaData "DownloadOperation" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" 'False) (C1 ('MetaCons "DownloadOperation" 'PrefixI 'True) (S1 ('MetaSel ('Just "download") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 OperationParams)))

data UploadOperation Source #

Constructors

UploadOperation 

Instances

Instances details
Show UploadOperation Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> UploadOperation -> ShowS

show :: UploadOperation -> String

showList :: [UploadOperation] -> ShowS

Generic UploadOperation Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep UploadOperation :: Type -> Type

FromJSON UploadOperation Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser UploadOperation

parseJSONList :: Value -> Parser [UploadOperation]

ToJSON UploadOperation Source # 
Instance details

Defined in Network.GitLFS

Methods

toJSON :: UploadOperation -> Value

toEncoding :: UploadOperation -> Encoding

toJSONList :: [UploadOperation] -> Value

toEncodingList :: [UploadOperation] -> Encoding

IsTransferResponseOperation UploadOperation Source # 
Instance details

Defined in Network.GitLFS

type Rep UploadOperation Source # 
Instance details

Defined in Network.GitLFS

type Rep UploadOperation = D1 ('MetaData "UploadOperation" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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

Instances details
Show OperationParams Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> OperationParams -> ShowS

show :: OperationParams -> String

showList :: [OperationParams] -> ShowS

Generic OperationParams Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep OperationParams :: Type -> Type

FromJSON OperationParams Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser OperationParams

parseJSONList :: Value -> Parser [OperationParams]

ToJSON OperationParams Source # 
Instance details

Defined in Network.GitLFS

Methods

toJSON :: OperationParams -> Value

toEncoding :: OperationParams -> Encoding

toJSONList :: [OperationParams] -> Value

toEncodingList :: [OperationParams] -> Encoding

type Rep OperationParams Source # 
Instance details

Defined in Network.GitLFS

type Rep OperationParams = D1 ('MetaData "OperationParams" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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)))))

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

data Endpoint Source #

The endpoint of a git-lfs server.

Instances

Instances details
Show Endpoint Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> Endpoint -> ShowS

show :: Endpoint -> String

showList :: [Endpoint] -> ShowS

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

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

Instances details
Show TransferResponseError Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> TransferResponseError -> ShowS

show :: TransferResponseError -> String

showList :: [TransferResponseError] -> ShowS

Generic TransferResponseError Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep TransferResponseError :: Type -> Type

FromJSON TransferResponseError Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser TransferResponseError

parseJSONList :: Value -> Parser [TransferResponseError]

ToJSON TransferResponseError Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferResponseError Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferResponseError = D1 ('MetaData "TransferResponseError" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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.

Instances

Instances details
Show TransferResponseObjectError Source # 
Instance details

Defined in Network.GitLFS

Generic TransferResponseObjectError Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep TransferResponseObjectError :: Type -> Type

FromJSON TransferResponseObjectError Source # 
Instance details

Defined in Network.GitLFS

ToJSON TransferResponseObjectError Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferResponseObjectError Source # 
Instance details

Defined in Network.GitLFS

type Rep TransferResponseObjectError = D1 ('MetaData "TransferResponseObjectError" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" '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 Url = Text Source #

type SHA256 = Text Source #

data GitRef Source #

Constructors

GitRef 

Fields

Instances

Instances details
Show GitRef Source # 
Instance details

Defined in Network.GitLFS

Methods

showsPrec :: Int -> GitRef -> ShowS

show :: GitRef -> String

showList :: [GitRef] -> ShowS

Generic GitRef Source # 
Instance details

Defined in Network.GitLFS

Associated Types

type Rep GitRef :: Type -> Type

Methods

from :: GitRef -> Rep GitRef x

to :: Rep GitRef x -> GitRef

FromJSON GitRef Source # 
Instance details

Defined in Network.GitLFS

Methods

parseJSON :: Value -> Parser GitRef

parseJSONList :: Value -> Parser [GitRef]

ToJSON GitRef Source # 
Instance details

Defined in Network.GitLFS

Methods

toJSON :: GitRef -> Value

toEncoding :: GitRef -> Encoding

toJSONList :: [GitRef] -> Value

toEncodingList :: [GitRef] -> Encoding

type Rep GitRef Source # 
Instance details

Defined in Network.GitLFS

type Rep GitRef = D1 ('MetaData "GitRef" "Network.GitLFS" "git-lfs-1.2.0-A7HMTEQwZyL6DMLILtjhKo" 'False) (C1 ('MetaCons "GitRef" 'PrefixI 'True) (S1 ('MetaSel ('Just "name") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

type NumSeconds = Integer Source #

type HTTPHeader = Text Source #