storage

package
v0.14.0 Latest Latest
Warning

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

Go to latest
Published: Apr 30, 2024 License: MIT Imports: 6 Imported by: 27

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Backend

type Backend interface {
	Lister
	Getter
	Saver
	Deleter
}

Backend is a complete storage backend (i.e. file system, database) implementation - a lister, reader and saver.

type Cataloger added in v0.3.0

type Cataloger interface {
	// Catalog gets all the modules / versions.
	Catalog(ctx context.Context, token string, pageSize int) ([]paths.AllPathParams, string, error)
}

Cataloger is the interface that lists all the modules and version contained in the storage.

type Checker

type Checker interface {
	// Exists checks whether or not module in specified version is present
	// in the backing storage.
	Exists(ctx context.Context, module, version string) (bool, error)
}

Checker is the interface that checks if the version of the module exists.

func WithChecker added in v0.9.0

func WithChecker(strg Backend) Checker

WithChecker wraps the backend with a Checker implementation.

type Deleter

type Deleter interface {
	// Delete must return ErrNotFound if the module/version are not
	// found.
	Delete(ctx context.Context, module, vsn string) error
}

Deleter deletes module metadata and its source from underlying storage.

type Getter

type Getter interface {
	Info(ctx context.Context, module, vsn string) ([]byte, error)
	GoMod(ctx context.Context, module, vsn string) ([]byte, error)
	Zip(ctx context.Context, module, vsn string) (SizeReadCloser, error)
}

Getter gets module metadata and its source from underlying storage.

type Lister

type Lister interface {
	// List gets all the versions for the given baseURL & module.
	// It returns ErrNotFound if the module isn't found
	List(ctx context.Context, module string) ([]string, error)
}

Lister is the interface that lists versions of a specific baseURL & module.

type Module

type Module struct {
	// TODO(marwan-at-work): ID is a mongo-specific field, it should not be
	// in the generic storage.Module struct.
	ID      primitive.ObjectID `bson:"_id,omitempty"`
	Module  string             `bson:"module"`
	Version string             `bson:"version"`
	Mod     []byte             `bson:"mod"`
	Info    []byte             `bson:"info"`
}

Module represents a vgo module saved in a storage backend.

type Origin added in v0.12.0

type Origin struct {
	VCS    string `json:",omitempty"` // "git" etc
	URL    string `json:",omitempty"` // URL of repository
	Subdir string `json:",omitempty"` // subdirectory in repo

	// If TagSum is non-empty, then the resolution of this module version
	// depends on the set of tags present in the repo, specifically the tags
	// of the form TagPrefix + a valid semver version.
	// If the matching repo tags and their commit hashes still hash to TagSum,
	// the Origin is still valid (at least as far as the tags are concerned).
	// The exact checksum is up to the Repo implementation; see (*gitRepo).Tags.
	TagPrefix string `json:",omitempty"`
	TagSum    string `json:",omitempty"`

	// If Ref is non-empty, then the resolution of this module version
	// depends on Ref resolving to the revision identified by Hash.
	// If Ref still resolves to Hash, the Origin is still valid (at least as far as Ref is concerned).
	// For Git, the Ref is a full ref like "refs/heads/main" or "refs/tags/v1.2.3",
	// and the Hash is the Git object hash the ref maps to.
	// Other VCS might choose differently, but the idea is that Ref is the name
	// with a mutable meaning while Hash is a name with an immutable meaning.
	Ref  string `json:",omitempty"`
	Hash string `json:",omitempty"`

	// If RepoSum is non-empty, then the resolution of this module version
	// failed due to the repo being available but the version not being present.
	// This depends on the entire state of the repo, which RepoSum summarizes.
	// For Git, this is a hash of all the refs and their hashes.
	RepoSum string `json:",omitempty"`
}

Origin is taken from https://pkg.go.dev/cmd/go/internal/modfetch/codehost#Origin.

type Reader

type Reader struct {
	Lister
	Getter
	Checker
}

Reader lists all module versions and gets a specific one from the underlying backend.

type RevInfo

type RevInfo struct {
	Origin  *Origin
	Name    string    // complete ID in underlying repository
	Short   string    // shortened ID, for use in pseudo-version
	Version string    // version used in lookup
	Time    time.Time // commit time
	Tags    []string  // known tags for commit
}

RevInfo is json-encodable into the response body for GET baseURL/module/@v/version.info from https://pkg.go.dev/cmd/go/internal/modfetch/codehost#RevInfo.

type Saver

type Saver interface {
	Save(ctx context.Context, module, version string, mod []byte, zip io.Reader, info []byte) error
}

Saver saves module metadata and its source to underlying storage.

type SizeReadCloser added in v0.11.0

type SizeReadCloser interface {
	io.ReadCloser
	Size() int64
}

SizeReadCloser extends io.ReadCloser with a Size() method that tells you the length of the io.ReadCloser if read in full.

func NewSizer added in v0.11.0

func NewSizer(rc io.ReadCloser, size int64) SizeReadCloser

NewSizer is a helper wrapper to return an implementation of ReadCloserSizer.

type Version

type Version struct {
	Mod    []byte
	Zip    io.ReadCloser
	Info   []byte
	Semver string
}

Version represents a version of a module and contains .mod file, a .info file and zip file of a specific version.

Directories

Path Synopsis
Package gcp provides a storage driver to upload module files to a google cloud platform storage bucket.
Package gcp provides a storage driver to upload module files to a google cloud platform storage bucket.
Package s3 provides a storage driver to upload module files to amazon s3 storage bucket.
Package s3 provides a storage driver to upload module files to amazon s3 storage bucket.

Jump to

Keyboard shortcuts

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