Documentation
¶
Index ¶
- Constants
- func BadRequest(w http.ResponseWriter, data interface{})
- func CallGit(wd string, args ...string) ([]byte, error)
- func Created(w http.ResponseWriter, location string)
- func GitServiceCall(w http.ResponseWriter, r *http.Request, repopath, servicename string, ...)
- func HeadersMap(headers http.Header) map[string]string
- func InternalServerError(w http.ResponseWriter, data interface{})
- func LFSBatchMatcher(r *http.Request, m *mux.RouteMatch) bool
- func LoggingMiddleware(h http.Handler) http.Handler
- func NotFound(w http.ResponseWriter)
- func OK(w http.ResponseWriter, data interface{})
- func RawResponse(w http.ResponseWriter, code int, header map[string]string, body interface{})
- func SetHeaderCacheForever(w http.ResponseWriter)
- func SetHeaderNoCache(w http.ResponseWriter)
- func UpperCaseAndUnderscore(r rune) rune
- type Batch
- type BatchError
- type BatchObject
- type BatchRef
- type LFSMetaManager
- type Link
- type ObjectError
- type Options
- type S3ContentManager
- type S3ContentManagerOptions
- type Server
- func (s *Server) CreateRepository(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetAlternative(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetHTTPAlternative(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetHead(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetIdxFile(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetInfoPacks(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetInfoRefs(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetInfoRefsWithService(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetLooseObject(w http.ResponseWriter, r *http.Request)
- func (s *Server) GetPackFile(w http.ResponseWriter, r *http.Request)
- func (s *Server) GitHTTPBackend(w http.ResponseWriter, r *http.Request)
- func (s *Server) LFSBatch(w http.ResponseWriter, r *http.Request)
- func (s *Server) LFSDelete(w http.ResponseWriter, r *http.Request)
- func (s *Server) LFSDownload(w http.ResponseWriter, r *http.Request)
- func (s *Server) LFSUpdate(w http.ResponseWriter, r *http.Request)
- func (s *Server) LFSUpload(w http.ResponseWriter, r *http.Request)
- func (s *Server) LFSVerify(w http.ResponseWriter, r *http.Request)
- func (s *Server) ListFiles(w http.ResponseWriter, r *http.Request)
- func (s *Server) OnRepository(w http.ResponseWriter, r *http.Request, fun func(repofs fs.FS))
- func (s *Server) ReceivePack(w http.ResponseWriter, r *http.Request)
- func (s *Server) RemoveRepository(w http.ResponseWriter, r *http.Request)
- func (s *Server) RepositoryPath(r *http.Request) string
- func (s *Server) Run(ctx context.Context, opts *Options) error
- func (s *Server) UploadPack(w http.ResponseWriter, r *http.Request)
Examples ¶
Constants ¶
const (
OperationUpload = "upload"
OperationDownload = "download"
)
const GitUploackPack = "application/x-git-upload-pack-advertisement"
Variables ¶
This section is empty.
Functions ¶
func BadRequest ¶
func BadRequest(w http.ResponseWriter, data interface{})
func GitServiceCall ¶
func GitServiceCall(w http.ResponseWriter, r *http.Request, repopath, servicename string, args ...string)
func HeadersMap ¶
func HeadersMap(headers http.Header) map[string]string
func InternalServerError ¶
func InternalServerError(w http.ResponseWriter, data interface{})
func LFSBatchMatcher ¶
func LFSBatchMatcher(r *http.Request, m *mux.RouteMatch) bool
func LoggingMiddleware ¶
func LoggingMiddleware(h http.Handler) http.Handler
func RawResponse ¶
func RawResponse(w http.ResponseWriter, code int, header map[string]string, body interface{})
func SetHeaderCacheForever ¶
func SetHeaderCacheForever(w http.ResponseWriter)
func SetHeaderNoCache ¶
func SetHeaderNoCache(w http.ResponseWriter)
func UpperCaseAndUnderscore ¶
func UpperCaseAndUnderscore(r rune) rune
Types ¶
type Batch ¶
type Batch struct {
// Should be download or upload.
Operation string `json:"operation,omitempty"`
// An optional Array of String identifiers for transfer adapters that the client has configured.
// If omitted, the basic transfer adapter MUST be assumed by the server.
Transfers []string `json:"transfers,omitempty"`
// String identifier of the transfer adapter that the server prefers.
// This MUST be one of the given transfer identifiers from the request.
// Servers can assume the basic transfer adapter if none were given.
// The Git LFS client will use the basic transfer adapter if the transfer property is omitted.
Transfer string `json:"transfer,omitempty"`
// Optional object describing the server ref that the objects belong to. Note: Added in v2.4.
Ref BatchRef `json:"ref,omitempty"`
// An Array of objects to download/upload.
Objects []BatchObject `json:"objects,omitempty"`
// The hash algorithm used to name Git LFS objects for this repository. Optional;
// defaults to sha256 if not specified.
HashAlgo string `json:"hash_algo,omitempty"`
}
nolint: tagliatelle
type BatchError ¶
type BatchError struct {
// String error message.
Message string `json:"message"`
// Optional String unique identifier for the request. Useful for debugging.
RequestID string `json:"request_id"`
// Optional String to give the user a place to report errors.
DocumentURL string `json:"document_url"`
}
LFS servers can respond with these other HTTP status codes:
401 - The authentication credentials are needed, but were not sent. Git LFS will attempt to get the authentication for the request and retry immediately. 403 - The user has read, but not write access. Only applicable when the operation in the request is "upload." 404 - The Repository does not exist for the user. 422 - Validation error with one or more of the objects in the request. This means that none of the requested objects to upload are valid.
nolint: tagliatelle
type BatchObject ¶
type BatchObject struct {
// String OID of the LFS object.
OID string `json:"oid,omitempty"`
// Integer byte size of the LFS object. Must be at least zero.
Size int64 `json:"size,omitempty"`
// Optional boolean specifying whether the request for this specific object is authenticated.
// If omitted or false, Git LFS will attempt to find credentials for this URL.
// (https://github.com/git-lfs/git-lfs/blob/main/docs/api/authentication.md)
Authenticated bool `json:"authenticated,omitempty"`
// Object containing the next actions for this object.
// Applicable actions depend on which operation is specified in the request.
// How these properties are interpreted depends on which transfer adapter the client will be using.
Actions map[string]Link `json:"actions,omitempty"`
// Describing error if this object.
Error *ObjectError `json:"error,omitempty"`
}
type BatchRef ¶
type BatchRef struct {
// Fully-qualified server refspec.
Name string `json:"name"`
}
type LFSMetaManager ¶
type LFSMetaManager interface {
// Upload get upload url and verify url for a given object
Upload(ctx context.Context, path string, oid string) (*Link, error)
// Download get download url for a given object
Download(ctx context.Context, path string, oid string) (*Link, error)
// Verify verfiy object exists
Verify(ctx context.Context, path string, oid string) (*BatchObject, error)
}
type Link ¶
type Link struct {
// String URL to download/upload the object.
Href string `json:"href,omitempty"`
// Optional hash of String HTTP header key/value pairs to apply to the request.
Header map[string]string `json:"header,omitempty"`
// Whole number of seconds after local client time when transfer will expire.
// Preferred over expires_at if both are provided. Maximum of 2147483647, minimum of -2147483647.
ExpireIn int `json:"expire_in,omitempty"`
// String uppercase RFC 3339-formatted timestamp with second precision
// for when the given action expires (usually due to a temporary token).
ExpiresAt time.Time `json:"expires_at,omitempty"`
}
nolint: tagliatelle
type ObjectError ¶
type ObjectError struct {
// LFS object error codes should match HTTP status codes where possible:
// 404 - The object does not exist on the server.
// 409 - The specified hash algorithm disagrees with the server's acceptable options.
// 410 - The object was removed by the owner.
// 422 - Validation error.
Code int `json:"code,omitempty"`
// String error message.
Message string `json:"message,omitempty"`
}
type Options ¶
type Options struct {
Listen string // http server listen address
UseGitHTTPBackend bool // use git httpbackend CGI to serve git http requests
}
func NewDefaultOptions ¶
func NewDefaultOptions() *Options
type S3ContentManager ¶
type S3ContentManager struct {
// contains filtered or unexported fields
}
func NewS3ContentManager ¶
func NewS3ContentManager(ctx context.Context, opts *S3ContentManagerOptions) (*S3ContentManager, error)
func (*S3ContentManager) Download ¶
func (m *S3ContentManager) Download(ctx context.Context, dir string, oid string) (*Link, error)
Download get download url for a given object
type S3ContentManagerOptions ¶
type S3ContentManagerOptions struct {
URL string // the s3 url
Bucket string // the bucket name lfs objects will be stored in
Region string // the region of the bucket
Credential aws.Credentials
LinkExpireIn time.Duration // the upload/download/verify link expire in,0 means never expired
}
type Server ¶
type Server struct {
GitBase string
LFS LFSMetaManager
}
func (*Server) CreateRepository ¶
func (s *Server) CreateRepository(w http.ResponseWriter, r *http.Request)
nolint: gomnd
func (*Server) GetAlternative ¶
func (s *Server) GetAlternative(w http.ResponseWriter, r *http.Request)
func (*Server) GetHTTPAlternative ¶
func (s *Server) GetHTTPAlternative(w http.ResponseWriter, r *http.Request)
func (*Server) GetIdxFile ¶
func (s *Server) GetIdxFile(w http.ResponseWriter, r *http.Request)
func (*Server) GetInfoPacks ¶
func (s *Server) GetInfoPacks(w http.ResponseWriter, r *http.Request)
func (*Server) GetInfoRefs ¶
func (s *Server) GetInfoRefs(w http.ResponseWriter, r *http.Request)
func (*Server) GetInfoRefsWithService ¶
func (s *Server) GetInfoRefsWithService(w http.ResponseWriter, r *http.Request)
func (*Server) GetLooseObject ¶
func (s *Server) GetLooseObject(w http.ResponseWriter, r *http.Request)
func (*Server) GetPackFile ¶
func (s *Server) GetPackFile(w http.ResponseWriter, r *http.Request)
func (*Server) GitHTTPBackend ¶
func (s *Server) GitHTTPBackend(w http.ResponseWriter, r *http.Request)
func (*Server) LFSBatch ¶
func (s *Server) LFSBatch(w http.ResponseWriter, r *http.Request)
LFSBatch takes a batch of operations and returns a response with the status of each operation. https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md#git-lfs-batch-api
func (*Server) LFSDownload ¶
func (s *Server) LFSDownload(w http.ResponseWriter, r *http.Request)
func (*Server) OnRepository ¶
func (s *Server) OnRepository(w http.ResponseWriter, r *http.Request, fun func(repofs fs.FS))
func (*Server) ReceivePack ¶
func (s *Server) ReceivePack(w http.ResponseWriter, r *http.Request)
func (*Server) RemoveRepository ¶
func (s *Server) RemoveRepository(w http.ResponseWriter, r *http.Request)
func (*Server) RepositoryPath ¶
func (s *Server) RepositoryPath(r *http.Request) string
func (*Server) Run ¶
func (s *Server) Run(ctx context.Context, opts *Options) error
Example ¶
Output:
func (*Server) UploadPack ¶
func (s *Server) UploadPack(w http.ResponseWriter, r *http.Request)