lfs

package
v0.0.0-...-c7a0b58 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2024 License: MIT, MIT Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// MetaFileIdentifier is the string appearing at the first line of LFS pointer files.
	// https://github.com/git-lfs/git-lfs/blob/master/docs/spec.md
	MetaFileIdentifier = "version https://git-lfs.github.com/spec/v1"

	// MetaFileOidPrefix appears in LFS pointer files on a line before the sha256 hash.
	MetaFileOidPrefix = "oid sha256:"
)
View Source
const (
	// MediaType contains the media type for LFS server requests
	MediaType = "application/vnd.git-lfs+json"
	// AcceptHeader Some LFS servers offer content with other types, so fallback to '*/*' if application/vnd.git-lfs+json cannot be served
	AcceptHeader = "application/vnd.git-lfs+json;q=0.9, */*;q=0.8"
	// UserAgentHeader Add User-Agent for gitea's self-implemented lfs client,
	// and the version is consistent with the latest version of git lfs can be avoided incompatibilities.
	// Some lfs servers will check this
	UserAgentHeader = "git-lfs/3.6.0 (Gitea)"
)

Variables

View Source
var (
	// ErrHashMismatch occurs if the content has does not match OID
	ErrHashMismatch = errors.New("content hash does not match OID")
	// ErrSizeMismatch occurs if the content size does not match
	ErrSizeMismatch = errors.New("content size does not match")
)
View Source
var (
	// ErrMissingPrefix occurs if the content lacks the LFS prefix
	ErrMissingPrefix = errors.New("content lacks the LFS prefix")

	// ErrInvalidStructure occurs if the content has an invalid structure
	ErrInvalidStructure = errors.New("content has an invalid structure")

	// ErrInvalidOIDFormat occurs if the oid has an invalid format
	ErrInvalidOIDFormat = errors.New("OID has an invalid format")
)
View Source
var (
	ErrObjectNotExist     = util.ErrNotExist // the object does not exist on the server
	ErrObjectHashMismatch = errors.New("the specified hash algorithm disagrees with the server's acceptable options")
	ErrObjectRemoved      = errors.New("the object was removed by the owner")
	ErrObjectValidation   = errors.New("validation error")
)

Functions

func DetermineEndpoint

func DetermineEndpoint(cloneurl, lfsurl string) *url.URL

DetermineEndpoint determines an endpoint from the clone url or uses the specified LFS url.

func ReadMetaObject

func ReadMetaObject(pointer Pointer) (io.ReadSeekCloser, error)

ReadMetaObject will read a git_model.LFSMetaObject and return a reader

func SearchPointerBlobs

func SearchPointerBlobs(ctx context.Context, repo *git.Repository, pointerChan chan<- PointerBlob, errChan chan<- error)

SearchPointerBlobs scans the whole repository for LFS pointer files

Types

type BasicTransferAdapter

type BasicTransferAdapter struct {
	// contains filtered or unexported fields
}

BasicTransferAdapter implements the "basic" adapter.

func (*BasicTransferAdapter) Download

func (a *BasicTransferAdapter) Download(ctx context.Context, l *Link) (io.ReadCloser, error)

Download reads the download location and downloads the data.

func (*BasicTransferAdapter) Name

func (a *BasicTransferAdapter) Name() string

Name returns the name of the adapter.

func (*BasicTransferAdapter) Upload

func (a *BasicTransferAdapter) Upload(ctx context.Context, l *Link, p Pointer, r io.Reader) error

Upload sends the content to the LFS server.

func (*BasicTransferAdapter) Verify

func (a *BasicTransferAdapter) Verify(ctx context.Context, l *Link, p Pointer) error

Verify calls the verify handler on the LFS server

type BatchRequest

type BatchRequest struct {
	Operation string     `json:"operation"`
	Transfers []string   `json:"transfers,omitempty"`
	Ref       *Reference `json:"ref,omitempty"`
	Objects   []Pointer  `json:"objects"`
}

BatchRequest contains multiple requests processed in one batch operation. https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md#requests

type BatchResponse

type BatchResponse struct {
	Transfer string            `json:"transfer,omitempty"`
	Objects  []*ObjectResponse `json:"objects"`
}

BatchResponse contains multiple object metadata Representation structures for use with the batch API. https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md#successful-responses

type Client

type Client interface {
	BatchSize() int
	Download(ctx context.Context, objects []Pointer, callback DownloadCallback) error
	Upload(ctx context.Context, objects []Pointer, callback UploadCallback) error
}

Client is used to communicate with a LFS source

func NewClient

func NewClient(endpoint *url.URL, httpTransport *http.Transport) Client

NewClient creates a LFS client

type ContentStore

type ContentStore struct {
	storage.ObjectStorage
}

ContentStore provides a simple file system based storage.

func NewContentStore

func NewContentStore() *ContentStore

NewContentStore creates the default ContentStore

func (*ContentStore) Exists

func (s *ContentStore) Exists(pointer Pointer) (bool, error)

Exists returns true if the object exists in the content store.

func (*ContentStore) Get

func (s *ContentStore) Get(pointer Pointer) (storage.Object, error)

Get takes a Meta object and retrieves the content from the store, returning it as an io.ReadSeekCloser.

func (*ContentStore) Put

func (s *ContentStore) Put(pointer Pointer, r io.Reader) error

Put takes a Meta object and an io.Reader and writes the content to the store.

func (*ContentStore) Verify

func (s *ContentStore) Verify(pointer Pointer) (bool, error)

Verify returns true if the object exists in the content store and size is correct.

type DownloadCallback

type DownloadCallback func(p Pointer, content io.ReadCloser, objectError error) error

DownloadCallback gets called for every requested LFS object to process its content

type ErrorResponse

type ErrorResponse struct {
	Message          string
	DocumentationURL string `json:"documentation_url,omitempty"`
	RequestID        string `json:"request_id,omitempty"`
}

ErrorResponse describes the error to the client.

type FilesystemClient

type FilesystemClient struct {
	// contains filtered or unexported fields
}

FilesystemClient is used to read LFS data from a filesystem path

func (*FilesystemClient) BatchSize

func (c *FilesystemClient) BatchSize() int

BatchSize returns the preferred size of batchs to process

func (*FilesystemClient) Download

func (c *FilesystemClient) Download(ctx context.Context, objects []Pointer, callback DownloadCallback) error

Download reads the specific LFS object from the target path

func (*FilesystemClient) Upload

func (c *FilesystemClient) Upload(ctx context.Context, objects []Pointer, callback UploadCallback) error

Upload writes the specific LFS object to the target path

type HTTPClient

type HTTPClient struct {
	// contains filtered or unexported fields
}

HTTPClient is used to communicate with the LFS server https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md

func (*HTTPClient) BatchSize

func (c *HTTPClient) BatchSize() int

BatchSize returns the preferred size of batchs to process

func (*HTTPClient) Download

func (c *HTTPClient) Download(ctx context.Context, objects []Pointer, callback DownloadCallback) error

Download reads the specific LFS object from the LFS server

func (*HTTPClient) Upload

func (c *HTTPClient) Upload(ctx context.Context, objects []Pointer, callback UploadCallback) error

Upload sends the specific LFS object to the LFS server

type Link struct {
	Href      string            `json:"href"`
	Header    map[string]string `json:"header,omitempty"`
	ExpiresAt *time.Time        `json:"expires_at,omitempty"`
}

Link provides a structure with information about how to access a object.

type ObjectError

type ObjectError struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

ObjectError defines the JSON structure returned to the client in case of an error.

func (*ObjectError) Error

func (e *ObjectError) Error() string

func (*ObjectError) Unwrap

func (e *ObjectError) Unwrap() error

type ObjectResponse

type ObjectResponse struct {
	Pointer
	Actions map[string]*Link `json:"actions,omitempty"`
	Links   map[string]*Link `json:"_links,omitempty"`
	Error   *ObjectError     `json:"error,omitempty"`
}

ObjectResponse is object metadata as seen by clients of the LFS server.

type Pointer

type Pointer struct {
	Oid  string `json:"oid" xorm:"UNIQUE(s) INDEX NOT NULL"`
	Size int64  `json:"size" xorm:"NOT NULL"`
}

Pointer contains LFS pointer data

func GeneratePointer

func GeneratePointer(content io.Reader) (Pointer, error)

GeneratePointer generates a pointer for arbitrary content

func ReadPointer

func ReadPointer(reader io.Reader) (Pointer, error)

ReadPointer tries to read LFS pointer data from the reader

func ReadPointerFromBuffer

func ReadPointerFromBuffer(buf []byte) (Pointer, error)

ReadPointerFromBuffer will return a pointer if the provided byte slice is a pointer file or an error otherwise.

func (Pointer) IsValid

func (p Pointer) IsValid() bool

IsValid checks if the pointer has a valid structure. It doesn't check if the pointed-to-content exists.

func (Pointer) LogString

func (p Pointer) LogString() string

func (Pointer) RelativePath

func (p Pointer) RelativePath() string

RelativePath returns the relative storage path of the pointer

func (Pointer) StringContent

func (p Pointer) StringContent() string

StringContent returns the string representation of the pointer https://github.com/git-lfs/git-lfs/blob/main/docs/spec.md#the-pointer

type PointerBlob

type PointerBlob struct {
	Hash string
	Pointer
}

PointerBlob associates a Git blob with a Pointer.

type Reference

type Reference struct {
	Name string `json:"name"`
}

Reference contains a git reference. https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md#ref-property

type TransferAdapter

type TransferAdapter interface {
	Name() string
	Download(ctx context.Context, l *Link) (io.ReadCloser, error)
	Upload(ctx context.Context, l *Link, p Pointer, r io.Reader) error
	Verify(ctx context.Context, l *Link, p Pointer) error
}

TransferAdapter represents an adapter for downloading/uploading LFS objects.

type UploadCallback

type UploadCallback func(p Pointer, objectError error) (io.ReadCloser, error)

UploadCallback gets called for every requested LFS object to provide its content

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL