blob: a22f9f87154e527f6cee6878e0a3573e6458f76e [file] [log] [blame]
package git
import (
"context"
"time"
"go.skia.org/infra/perf/go/git/provider"
"go.skia.org/infra/perf/go/types"
)
// Git is the interface for the minimal functionality Perf needs to interface to
// a git repo.
type Git interface {
// StartBackgroundPolling starts a background process that periodically adds
// new commits to the database.
StartBackgroundPolling(ctx context.Context, duration time.Duration)
// Update finds all the new commits added to the repo since our last Update.
Update(ctx context.Context) error
// GetCommitNumber looks up the commit number from Commits table given a git hash or commit number
GetCommitNumber(ctx context.Context, githash string, commitNumber types.CommitNumber) (types.CommitNumber, error)
// CommitNumberFromGitHash looks up the commit number given the git hash.
CommitNumberFromGitHash(ctx context.Context, githash string) (types.CommitNumber, error)
// CommitFromCommitNumber returns all the stored details for a given CommitNumber.
CommitFromCommitNumber(ctx context.Context, commitNumber types.CommitNumber) (provider.Commit, error)
// CommitSliceFromCommitNumberSlice returns all the stored details for a given slice of CommitNumbers.
CommitSliceFromCommitNumberSlice(ctx context.Context, commitNumberSlice []types.CommitNumber) ([]provider.Commit, error)
// CommitNumberFromTime finds the index of the closest commit with a commit time
// less than or equal to 't'.
//
// Pass in zero time, i.e. time.Time{} to indicate to just get the most recent
// commit.
CommitNumberFromTime(ctx context.Context, t time.Time) (types.CommitNumber, error)
// CommitSliceFromTimeRange returns a slice of Commits that fall in the range
// [begin, end), i.e inclusive of begin and exclusive of end.
CommitSliceFromTimeRange(ctx context.Context, begin, end time.Time) ([]provider.Commit, error)
// CommitSliceFromCommitNumberRange returns a slice of Commits that fall in the range
// [begin, end], i.e inclusive of both begin and end.
CommitSliceFromCommitNumberRange(ctx context.Context, begin, end types.CommitNumber) ([]provider.Commit, error)
// GitHashFromCommitNumber returns the git hash of the given commit number.
GitHashFromCommitNumber(ctx context.Context, commitNumber types.CommitNumber) (string, error)
// PreviousGitHashFromCommitNumber returns the previous git hash of the given commit number.
PreviousGitHashFromCommitNumber(ctx context.Context, commitNumber types.CommitNumber) (string, error)
// PreviousCommitNumberFromCommitNumber returns the previous commit number of the given commit number.
PreviousCommitNumberFromCommitNumber(ctx context.Context, commitNumber types.CommitNumber) (types.CommitNumber, error)
// CommitNumbersWhenFileChangesInCommitNumberRange returns a slice of commit
// numbers when the given file has changed between [begin, end], i.e. the given
// range is exclusive of the begin commit and inclusive of the end commit.
CommitNumbersWhenFileChangesInCommitNumberRange(ctx context.Context, begin, end types.CommitNumber, filename string) ([]types.CommitNumber, error)
// LogEntry returns the full log entry of a commit (minus the diff) as a string.
LogEntry(ctx context.Context, commit types.CommitNumber) (string, error)
// RepoSuppliedCommitNumber returns true if the CommitNumber is actually
// specified by information in the git commit messages.
RepoSuppliedCommitNumber() bool
}