gitstore

package
v0.0.0-...-34cbb95 Latest Latest
Warning

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

Go to latest
Published: Dec 26, 2024 License: BSD-3-Clause Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ALL_BRANCHES is a placeholder which can be used to retrieve IndexCommits
	// for every branch, as opposed to just one.
	ALL_BRANCHES = "@all-commits"

	// DELETE_BRANCH is a placeholder which can be used as a value in the
	// branch map passed to GitStore.PutBranches to signify that the branch
	// should be deleted.
	DELETE_BRANCH = "@DELETE"
)

Variables

This section is empty.

Functions

func GetRepoGraph

func GetRepoGraph(ctx context.Context, gs GitStore) (*repograph.Graph, error)

GetRepoGraph returns *repograph.Graph backed by the given GitStore.

func NewGitStoreRepoImpl

func NewGitStoreRepoImpl(ctx context.Context, gs GitStore) (repograph.RepoImpl, error)

NewGitStoreRepoImpl returns a repograph.RepoImpl instance which uses the given GitStore.

Types

type BranchPointer

type BranchPointer struct {
	Head  string
	Index int
}

BranchPointer captures the HEAD of a branch and the index of that commit.

type GitStore

type GitStore interface {
	// Put stores the given commits. They can be retrieved in order of timestamps by using
	// RangeByTime or RangeN (no topological ordering). The Index and Branch information
	// on the commits must be correct, or the results of RangeN and RangeByTime will not
	// be correct.
	Put(ctx context.Context, commits []*vcsinfo.LongCommit) error

	// Get retrieves the commits identified by 'hashes'. The return value will always have the
	// length of the input value and the results will line up by index. If a commit does not exist
	// the corresponding entry in the result is nil.
	// The function will only return an error if the retrieval operation (the I/O) fails, not
	// if the given hashes do not exist or are invalid.
	Get(ctx context.Context, hashes []string) ([]*vcsinfo.LongCommit, error)

	// PutBranches updates the given branch heads in the GitStore. The 'branches' parameter
	// maps branch name to commit hash to indicate the head of a branch. All of the referenced
	// commits must already exist in the GitStore. If the DELETE_BRANCH string is used instead
	// of a commit hash, then the branch is removed. Any existing branches which are not
	// included in the call to PutBranches are left unchanged.
	PutBranches(ctx context.Context, branches map[string]string) error

	// GetBranches returns the current branches in the store. It maps[branchName]->BranchPointer.
	// A BranchPointer contains the HEAD commit and also the Index of the HEAD commit, which is
	// usually the total number of commits in the branch minus 1.
	GetBranches(ctx context.Context) (map[string]*BranchPointer, error)

	// RangeN returns all commits in the half open index range [startIndex, endIndex), thus not
	// including endIndex. It returns the commits in the given branch sorted in ascending
	// order by Index, which only includes commits on the first-parent ancestry chain, per the
	// definition of vcsinfo.IndexCommit. This does not make sense for branch == ALL_BRANCHES,
	// because different lines of history may use the same indexes. Therefore, the results of
	// RangeN for ALL_BRANCHES may not be complete or correct.
	RangeN(ctx context.Context, startIndex, endIndex int, branch string) ([]*vcsinfo.IndexCommit, error)

	// RangeByTime returns all commits in the half open time range [start, end), thus not
	// including commits at 'end' time. Set branch = ALL_BRANCHES to retrieve all commits
	// for every branch within the specified range.
	// Caveat: The returned results will match the requested range, but will be sorted by Index.
	// So if the timestamps of the commits within a branch are not in order they will be
	// unordered in the results. In the case of branch == ALL_BRANCHES, some indexes may be
	// repeated, because different lines of history may use the same indexes.
	RangeByTime(ctx context.Context, start, end time.Time, branch string) ([]*vcsinfo.IndexCommit, error)
}

GitStore defines the functions of a data store for Git metadata (aka vcsinfo.LongCommit) Each GitStore instance relates to one repository that is defined in the constructor of the implementation.

type RepoInfo

type RepoInfo struct {
	// Numeric id of the repo. This is unique within all repos in a BT table. This ID is uniquely
	// assigned whenever a new repo is added.
	ID int64

	// RepoURL contains the URL of the repo as returned by git.NormalizeURL(...).
	RepoURL string

	// Branches contain all the branches in the repo, mapping branch_name -> branch_pointer.
	Branches map[string]*BranchPointer
}

RepoInfo contains information about one repo in the GitStore.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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