gitbase

package module
v0.13.0 Latest Latest
Warning

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

Go to latest
Published: Jun 18, 2018 License: Apache-2.0 Imports: 38 Imported by: 0

README

gitbase GitHub version Build Status codecov GoDoc Go Report Card

gitbase, is a SQL database interface to Git repositories.

It can be used to perform SQL queries about the Git history and about the Universal AST of the code itself. gitbase is being built to work on top of any number of git repositories.

gitbase implements the MySQL wire protocol, it can be accessed using any MySQL client or library from any language.

Status

The project is currently in alpha stage, meaning it's still lacking performance in a number of cases but we are working hard on getting a performant system able to processes thousands of repositories in a single node. Stay tuned!

Examples

Get all the HEAD references from all the repositories
SELECT * FROM refs WHERE ref_name = 'HEAD'
Commits that appears in more than one reference
SELECT * FROM (
    SELECT COUNT(c.commit_hash) AS num, c.commit_hash
    FROM ref_commits r
    INNER JOIN commits c
        ON r.commit_hash = c.commit_hash
    GROUP BY c.commit_hash
) t WHERE num > 1
Get the number of blobs per HEAD commit
SELECT COUNT(c.commit_hash), c.commit_hash
FROM ref_commitss r
INNER JOIN commits c
    ON r.ref_name = 'HEAD' AND r.commit_hash = c.commit_hash
INNER JOIN commit_blobs cb
    ON cb.commit_hash = c.commit_hash
GROUP BY c.commit_hash
Get commits per commiter, per month in 2015
SELECT COUNT(*) as num_commits, month, repo_id, committer_email
FROM (
    SELECT
        MONTH(committer_when) as month,
        r.repository_id as repo_id,
        committer_email
    FROM ref_commits r
    INNER JOIN commits c 
            ON YEAR(c.committer_when) = 2015 AND r.commit_hash = c.commit_hash
    WHERE r.ref_name = 'HEAD'
) as t
GROUP BY committer_email, month, repo_id

Installation

Installing from binaries

Check the Release page to download the gitbase binary.

Installing from source

Because gitbase uses bblfsh's client-go, which uses cgo, you need to install some dependencies by hand instead of just using go get.

Note: we use go get -d so the code is not compiled yet, as it would fail before make dependencies is executed successfully.

go get -d github.com/src-d/gitbase
cd $GOPATH/src/github.com/src-d/gitbase
make dependencies

Usage

Usage:
  gitbase [OPTIONS] <server | version>

Help Options:
  -h, --help  Show this help message

Available commands:
  server   Start SQL server.
  version  Show the version information.

You can start a server by providing a path which contains multiple git repositories /path/to/repositories with this command:

$ gitbase server -v -g /path/to/repositories

A MySQL client is needed to connect to the server. For example:

$ mysql -q -u root -h 127.0.0.1
MySQL [(none)]> SELECT commit_hash, commit_author_email, commit_author_name FROM commits LIMIT 2;
SELECT commit_hash, commit_author_email, commit_author_name FROM commits LIMIT 2;
+------------------------------------------+---------------------+-----------------------+
| commit_hash                              | commit_author_email | commit_author_name    |
+------------------------------------------+---------------------+-----------------------+
| 003dc36e0067b25333cb5d3a5ccc31fd028a1c83 | user1@test.io       | Santiago M. Mola      |
| 01ace9e4d144aaeb50eb630fed993375609bcf55 | user2@test.io       | Antonio Navarro Perez |
+------------------------------------------+---------------------+-----------------------+
2 rows in set (0.01 sec)
Environment variables
Name Description
BBLFSH_ENDPOINT bblfshd endpoint, default "127.0.0.1:9432"
GITBASE_BLOBS_MAX_SIZE maximum blob size to return in MiB, default 5 MiB
GITBASE_BLOBS_ALLOW_BINARY enable retrieval of binary blobs, default false
GITBASE_UNSTABLE_SQUASH_ENABLE UNSTABLE check Unstable features
GITBASE_SKIP_GIT_ERRORS do not stop queries on git errors, default disabled

Tables

You can execute the SHOW TABLES statement to get a list of the available tables. To get all the columns and types of a specific table, you can write DESCRIBE TABLE [tablename].

gitbase exposes the following tables:

Name Columns
repositories repository_id
remotes repository_id, remote_name, remote_push_url, remote_fetch_url, remote_push_refspec, remote_fetch_refspec
commits repository_id, commit_hash, commit_author_name, commit_author_email, commit_author_when, committer_name, committer_email, committer_when, commit_message, tree_hash
blobs repository_id, blob_hash, blob_size, blob_content
refs repository_id, ref_name, commit_hash
ref_commits repository_id, ref_name, commit_hash, index
tree_entries repository_id, tree_hash, blob_hash, tree_entry_mode, tree_entry_name
references repository_id, ref_name, commit_hash
commit_trees repository_id, commit_hash, tree_hash
commit_blobs repository_id, commit_hash, blob_hash
files repository_id, file_path, blob_hash, tree_hash, tree_entry_mode, blob_content, blob_size

Functions

To make some common tasks easier for the user, there are some functions to interact with the previous mentioned tables:

Name Description
is_remote(reference_name)bool check if the given reference name is from a remote one
is_tag(reference_name)bool check if the given reference name is a tag
language(path, [blob])text gets the language of a file given its path and the optional content of the file
uast(blob, [lang, [xpath]])json_blob returns an array of UAST nodes as blobs
uast_xpath(json_blob, xpath) performs an XPath query over the given UAST nodes

Unstable features

  • Table squashing: there is an optimization that collects inner joins between tables with a set of supported conditions and converts them into a single node that retrieves the data in chained steps (getting first the commits and then the blobs of every commit instead of joining all commits and all blobs, for example). It can be enabled with the environment variable GITBASE_UNSTABLE_SQUASH_ENABLE.

License

Apache License Version 2.0, see LICENSE

Documentation

Index

Constants

View Source
const (
	// ReferencesTableName is the name of the refs table.
	ReferencesTableName = "refs"
	// CommitsTableName is the name of the commits table.
	CommitsTableName = "commits"
	// BlobsTableName is the name of the blobs table.
	BlobsTableName = "blobs"
	// TreeEntriesTableName is the name of the tree entries table.
	TreeEntriesTableName = "tree_entries"
	// RepositoriesTableName is the name of the repositories table.
	RepositoriesTableName = "repositories"
	// RemotesTableName is the name of the remotes table.
	RemotesTableName = "remotes"
	// RefCommitsTableName is the name of the ref commits table.
	RefCommitsTableName = "ref_commits"
	// CommitTreesTableName is the name of the commit trees table.
	CommitTreesTableName = "commit_trees"
	// CommitBlobsTableName is the name of the commit blobs table.
	CommitBlobsTableName = "commit_blobs"
	// FilesTableName is the name of the files table.
	FilesTableName = "files"
)

Variables

View Source
var (
	// ErrColumnNotFound is returned when a given column is not found in the table's schema.
	ErrColumnNotFound = errors.NewKind("column %s not found for table %s")
	// ErrInvalidObjectType is returned when the received object is not of the correct type.
	ErrInvalidObjectType = errors.NewKind("got object of type %T, expecting %s")
)
View Source
var BlobsSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Nullable: false, Source: BlobsTableName},
	{Name: "blob_hash", Type: sql.Text, Nullable: false, Source: BlobsTableName},
	{Name: "blob_size", Type: sql.Int64, Nullable: false, Source: BlobsTableName},
	{Name: "blob_content", Type: sql.Blob, Nullable: false, Source: BlobsTableName},
}

BlobsSchema is the schema for the blobs table.

View Source
var CommitBlobsSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Source: CommitBlobsTableName},
	{Name: "commit_hash", Type: sql.Text, Source: CommitBlobsTableName},
	{Name: "blob_hash", Type: sql.Text, Source: CommitBlobsTableName},
}

CommitBlobsSchema is the schema for the commit blobs table.

View Source
var CommitTreesSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Source: CommitTreesTableName},
	{Name: "commit_hash", Type: sql.Text, Source: CommitTreesTableName},
	{Name: "tree_hash", Type: sql.Text, Source: CommitTreesTableName},
}

CommitTreesSchema is the schema for the commit trees table.

View Source
var CommitsSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "commit_hash", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "commit_author_name", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "commit_author_email", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "commit_author_when", Type: sql.Timestamp, Nullable: false, Source: CommitsTableName},
	{Name: "committer_name", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "committer_email", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "committer_when", Type: sql.Timestamp, Nullable: false, Source: CommitsTableName},
	{Name: "commit_message", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "tree_hash", Type: sql.Text, Nullable: false, Source: CommitsTableName},
	{Name: "commit_parents", Type: sql.Array(sql.Text), Nullable: false, Source: CommitsTableName},
}

CommitsSchema is the schema for the commits table.

View Source
var ErrBblfshConnection = errors.NewKind("unable to establish a new bblfsh connection")

ErrBblfshConnection is returned when it's impossible to connect to bblfsh.

View Source
var ErrInvalidContext = errors.NewKind("invalid context received: %v")

ErrInvalidContext is returned when some node expected an sql.Context with gitbase session but received something else.

View Source
var ErrInvalidGitbaseSession = errors.NewKind("expecting gitbase session, but received: %T")

ErrInvalidGitbaseSession is returned when some node expected a gitbase session but received something else.

View Source
var ErrPoolRepoNotFound = errors.NewKind("repository id %s not found in the pool")

ErrPoolRepoNotFound is returned when a repository id is not present in the pool.

View Source
var ErrSessionCanceled = errors.NewKind("session canceled")

ErrSessionCanceled is returned when session context is canceled

View Source
var FilesSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Source: "files"},
	{Name: "file_path", Type: sql.Text, Source: "files"},
	{Name: "blob_hash", Type: sql.Text, Source: "files"},
	{Name: "tree_hash", Type: sql.Text, Source: "files"},
	{Name: "tree_entry_mode", Type: sql.Text, Source: "files"},
	{Name: "blob_content", Type: sql.Blob, Source: "files"},
	{Name: "blob_size", Type: sql.Int64, Source: "files"},
}

FilesSchema is the schema for the files table.

View Source
var RefCommitsSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Source: RefCommitsTableName},
	{Name: "commit_hash", Type: sql.Text, Source: RefCommitsTableName},
	{Name: "ref_name", Type: sql.Text, Source: RefCommitsTableName},
	{Name: "index", Type: sql.Int64, Source: RefCommitsTableName},
}

RefCommitsSchema is the schema for the ref commits table.

View Source
var RefsSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Nullable: false, Source: ReferencesTableName},
	{Name: "ref_name", Type: sql.Text, Nullable: false, Source: ReferencesTableName},
	{Name: "commit_hash", Type: sql.Text, Nullable: false, Source: ReferencesTableName},
}

RefsSchema is the schema for the refs table.

View Source
var RemotesSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Nullable: false, Source: RemotesTableName},
	{Name: "remote_name", Type: sql.Text, Nullable: false, Source: RemotesTableName},
	{Name: "remote_push_url", Type: sql.Text, Nullable: false, Source: RemotesTableName},
	{Name: "remote_fetch_url", Type: sql.Text, Nullable: false, Source: RemotesTableName},
	{Name: "remote_push_refspec", Type: sql.Text, Nullable: false, Source: RemotesTableName},
	{Name: "remote_fetch_refspec", Type: sql.Text, Nullable: false, Source: RemotesTableName},
}

RemotesSchema is the schema for the remotes table.

View Source
var RepositoriesSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Nullable: false, Source: RepositoriesTableName},
}

RepositoriesSchema is the schema for the repositories table.

View Source
var TreeEntriesSchema = sql.Schema{
	{Name: "repository_id", Type: sql.Text, Nullable: false, Source: TreeEntriesTableName},
	{Name: "tree_entry_name", Type: sql.Text, Nullable: false, Source: TreeEntriesTableName},
	{Name: "blob_hash", Type: sql.Text, Nullable: false, Source: TreeEntriesTableName},
	{Name: "tree_hash", Type: sql.Text, Nullable: false, Source: TreeEntriesTableName},
	{Name: "tree_entry_mode", Type: sql.Text, Nullable: false, Source: TreeEntriesTableName},
}

TreeEntriesSchema is the schema for the tree entries table.

Functions

func NewCommitsByHashIter added in v0.13.0

func NewCommitsByHashIter(
	repo *Repository,
	hashes []string,
) (object.CommitIter, error)

NewCommitsByHashIter creates a CommitIter that can use a list of hashes to iterate. If the list is empty it scans all commits.

func NewDatabase added in v0.6.0

func NewDatabase(name string) sql.Database

NewDatabase creates a new Database structure and initializes its tables with the given pool

func NewRowRepoIter added in v0.10.0

func NewRowRepoIter(
	ctx *sql.Context,
	iter RowRepoIter,
) (sql.RowIter, error)

NewRowRepoIter initializes a new repository iterator.

* ctx: it should contain a gitbase.Session * iter: specific RowRepoIter interface

  • NewIterator: called when a new repository is about to be iterated, returns a new RowRepoIter
  • Next: called for each row
  • Close: called when a repository finished iterating

func NewSessionBuilder added in v0.10.0

func NewSessionBuilder(pool *RepositoryPool, opts ...SessionOption) server.SessionBuilder

NewSessionBuilder creates a SessionBuilder with the given Repository Pool.

Types

type BlobsIter added in v0.11.0

type BlobsIter interface {
	ChainableIter
}

BlobsIter is a chainable iterator that operates on blobs.

func NewCommitBlobBlobsIter added in v0.13.0

func NewCommitBlobBlobsIter(
	commitBlobs FilesIter,
	filters sql.Expression,
	readContent bool,
) BlobsIter

NewCommitBlobBlobsIter returns the blobs for all commit blobs in the given iterator.

func NewRepoBlobsIter added in v0.13.0

func NewRepoBlobsIter(
	repos ReposIter,
	filters sql.Expression,
	readContent bool,
) BlobsIter

NewRepoBlobsIter returns an iterator that will return all blobs for the repositories in the given iter that match the given filters.

func NewTreeEntryBlobsIter added in v0.11.0

func NewTreeEntryBlobsIter(
	squashTreeEntriesIter TreeEntriesIter,
	filters sql.Expression,
	readContent bool,
) BlobsIter

NewTreeEntryBlobsIter returns an iterator that will return all blobs for the tree entries in the given iter that match the given filters.

type ChainableIter added in v0.11.0

type ChainableIter interface {
	// New creates a new Chainable Iterator.
	New(*sql.Context, *Repository) (ChainableIter, error)
	// Close closes the iterator.
	Close() error
	// Row returns the current row. All calls to Row return the same row
	// until another call to Advance. Advance should be called before
	// calling Row.
	Row() sql.Row
	// Advance advances the position of the iterator by one. After io.EOF
	// or any other error, this method should not be called.
	Advance() error
	// Schema returns the schema of the rows returned by this iterator.
	Schema() sql.Schema
}

ChainableIter is an iterator meant to have a chaining-friendly API.

type CommitsIter added in v0.11.0

type CommitsIter interface {
	ChainableIter
	// Commit returns the current repository. All calls to Commit return the
	// same commit until another call to Advance. Advance should
	// be called before calling Commit.
	Commit() *object.Commit
}

CommitsIter is a chainable iterator that operates on commits.

func NewAllCommitsIter added in v0.11.0

func NewAllCommitsIter(filters sql.Expression, virtual bool) CommitsIter

NewAllCommitsIter returns an iterator that will return all commits that match the given filters.

func NewAllRefCommitsIter added in v0.13.0

func NewAllRefCommitsIter(filters sql.Expression) CommitsIter

NewAllRefCommitsIter returns an iterator that will return all ref_commit rows.

func NewRefCommitCommitsIter added in v0.13.0

func NewRefCommitCommitsIter(refCommits CommitsIter, filters sql.Expression) CommitsIter

NewRefCommitCommitsIter returns an iterator that will return commits based on the ref_commits returned by the previous iterator.

func NewRefHEADCommitsIter added in v0.11.0

func NewRefHEADCommitsIter(
	refsIter RefsIter,
	filters sql.Expression,
	virtual bool,
) CommitsIter

NewRefHEADCommitsIter returns an iterator that will return the commit for the given iter reference heads that match the given filters.

func NewRefHeadRefCommitsIter added in v0.13.0

func NewRefHeadRefCommitsIter(refs RefsIter, filters sql.Expression) CommitsIter

NewRefHeadRefCommitsIter returns an iterator that will return all ref_commit rows of the HEAD commits in references of the given iterator.

func NewRefRefCommitsIter added in v0.13.0

func NewRefRefCommitsIter(refsIter RefsIter, filters sql.Expression) CommitsIter

NewRefRefCommitsIter returns an iterator that will return all ref_commits for all the references in the given iterator.

func NewRepoCommitsIter added in v0.13.0

func NewRepoCommitsIter(repos ReposIter, filters sql.Expression) CommitsIter

NewRepoCommitsIter is an iterator that returns all commits for the repositories returned by the given iterator.

type Database added in v0.6.0

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

Database holds all git repository tables

func (*Database) Name added in v0.6.0

func (d *Database) Name() string

Name returns the name of the database

func (*Database) Tables added in v0.6.0

func (d *Database) Tables() map[string]sql.Table

Tables returns a map with all initialized tables

type FilesIter added in v0.13.0

type FilesIter interface {
	ChainableIter
	File() *object.File
}

FilesIter is an iterator that operates on files.

func NewAllCommitBlobsIter added in v0.13.0

func NewAllCommitBlobsIter(filters sql.Expression) FilesIter

NewAllCommitBlobsIter returns all commit_blobs.

func NewCommitBlobsIter added in v0.11.0

func NewCommitBlobsIter(
	commits CommitsIter,
	filters sql.Expression,
) FilesIter

NewCommitBlobsIter returns an iterator that will return all commit blobs of each commit in the given iterator.

type Indexable added in v0.13.0

type Indexable interface {
	sql.Indexable
	// contains filtered or unexported methods
}

Indexable represents an indexable gitbase table.

type Ref added in v0.11.0

type Ref struct {
	RepoID string
	*plumbing.Reference
}

Ref is a git reference with the repo id.

type RefCommitsIter added in v0.13.0

type RefCommitsIter interface {
	CommitsIter
	// contains filtered or unexported methods
}

RefCommitsIter is a chainable iterator that operates on ref_commits.

type RefsIter added in v0.11.0

type RefsIter interface {
	ChainableIter
	// Ref returns the current repository. All calls to Ref return the
	// same reference until another call to Advance. Advance should
	// be called before calling Ref.
	Ref() *Ref
}

RefsIter is a chainable iterator that operates on references.

func NewAllRefsIter added in v0.11.0

func NewAllRefsIter(filters sql.Expression, virtual bool) RefsIter

NewAllRefsIter returns an iterator that will return all references that match the given filters. If the iterator is virtual, it will always return an empty row and an empty schema. This is useful for passing it to other iterators that are chained with references but don't need the reference data in their output rows.

func NewRemoteRefsIter added in v0.11.0

func NewRemoteRefsIter(
	remotesIter RemotesIter,
	filters sql.Expression,
) RefsIter

NewRemoteRefsIter returns an iterator that will return all references for the remotes returned by the given remotes iterator that match the given filters.

func NewRepoRefsIter added in v0.11.0

func NewRepoRefsIter(
	squashReposIter ReposIter,
	filters sql.Expression,
	virtual bool,
) RefsIter

NewRepoRefsIter returns an iterator that will return all references for the repositories of the given repos iterator that match the given filters.

type Remote added in v0.11.0

type Remote struct {
	RepoID string
	Name   string
	URL    string
	Fetch  string
}

Remote is the info of a single repository remote.

type RemotesIter added in v0.11.0

type RemotesIter interface {
	ChainableIter
	// Remote returns the current repository. All calls to Remote return the
	// same remote until another call to Advance. Advance should
	// be called before calling Remote.
	Remote() *Remote
}

RemotesIter is a chainable iterator that operates with remotes.

func NewAllRemotesIter added in v0.11.0

func NewAllRemotesIter(filters sql.Expression) RemotesIter

NewAllRemotesIter returns an iterator that will return all remotes that match the given filters.

func NewRepoRemotesIter added in v0.11.0

func NewRepoRemotesIter(squashReposIter ReposIter, filters sql.Expression) RemotesIter

NewRepoRemotesIter returns an iterator that will return all remotes for the given ReposIter repositories that match the given filters.

type ReposIter added in v0.11.0

type ReposIter interface {
	ChainableIter
	// Repo returns the current repository. All calls to Repo return the
	// same repository until another call to Advance. Advance should
	// be called before calling Repo.
	Repo() *Repository
}

ReposIter is a chainable iterator that operates with repositories.

func NewAllReposIter added in v0.11.0

func NewAllReposIter(filters sql.Expression) ReposIter

NewAllReposIter returns an iterator that will return all repositories that match the given filters.

type Repository added in v0.10.0

type Repository struct {
	ID   string
	Repo *git.Repository
}

Repository struct holds an initialized repository and its ID

func NewRepository added in v0.10.0

func NewRepository(id string, repo *git.Repository) *Repository

NewRepository creates and initializes a new Repository structure

func NewRepositoryFromPath added in v0.10.0

func NewRepositoryFromPath(id, path string) (*Repository, error)

NewRepositoryFromPath creates and initializes a new Repository structure and initializes a go-git repository

func NewSivaRepositoryFromPath added in v0.11.0

func NewSivaRepositoryFromPath(id, path string) (*Repository, error)

NewSivaRepositoryFromPath creates and initializes a new Repository structure and initializes a go-git repository backed by a siva file.

type RepositoryIter added in v0.10.0

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

RepositoryIter iterates over all repositories in the pool

func (*RepositoryIter) Close added in v0.10.0

func (i *RepositoryIter) Close() error

Close finished iterator. It's no-op.

func (*RepositoryIter) Next added in v0.10.0

func (i *RepositoryIter) Next() (*Repository, error)

Next retrieves the next Repository. It returns io.EOF as error when there are no more Repositories to retrieve.

type RepositoryPool added in v0.10.0

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

RepositoryPool holds a pool git repository paths and functionality to open and iterate them.

func NewRepositoryPool added in v0.10.0

func NewRepositoryPool() *RepositoryPool

NewRepositoryPool initializes a new RepositoryPool

func (*RepositoryPool) Add added in v0.10.0

func (p *RepositoryPool) Add(id, path string, kind repoKind)

Add inserts a new repository in the pool

func (*RepositoryPool) AddDir added in v0.10.0

func (p *RepositoryPool) AddDir(path string) error

AddDir adds all direct subdirectories from path as git repos.

func (*RepositoryPool) AddGit added in v0.10.0

func (p *RepositoryPool) AddGit(path string) (string, error)

AddGit checks if a git repository can be opened and adds it to the pool. It also sets its path as ID.

func (*RepositoryPool) AddSivaDir added in v0.11.0

func (p *RepositoryPool) AddSivaDir(path string) error

AddSivaDir adds to the repository pool all siva files found inside the given directory and in its children directories, but not the children of those directories.

func (*RepositoryPool) GetPos added in v0.10.0

func (p *RepositoryPool) GetPos(pos int) (*Repository, error)

GetPos retrieves a repository at a given position. If the position is out of bounds it returns io.EOF.

func (*RepositoryPool) GetRepo added in v0.13.0

func (p *RepositoryPool) GetRepo(id string) (*Repository, error)

GetRepo returns a repository with the given id from the pool.

func (*RepositoryPool) RepoIter added in v0.10.0

func (p *RepositoryPool) RepoIter() (*RepositoryIter, error)

RepoIter creates a new Repository iterator

type RowRepoIter added in v0.10.0

type RowRepoIter interface {
	NewIterator(*Repository) (RowRepoIter, error)
	Next() (sql.Row, error)
	Close() error
}

RowRepoIter is the interface needed by each iterator implementation

func NewChainableRowRepoIter added in v0.11.0

func NewChainableRowRepoIter(ctx *sql.Context, iter ChainableIter) RowRepoIter

NewChainableRowRepoIter creates a new RowRepoIter from a ChainableIter.

type Session added in v0.10.0

type Session struct {
	sql.Session
	Pool *RepositoryPool

	SkipGitErrors bool
	// contains filtered or unexported fields
}

Session is the custom implementation of a gitbase session.

func NewSession added in v0.10.0

func NewSession(pool *RepositoryPool, opts ...SessionOption) *Session

NewSession creates a new Session. It requires a repository pool and any number of session options can be passed to configure the session.

func (*Session) BblfshClient added in v0.11.0

func (s *Session) BblfshClient() (*bblfsh.Client, error)

BblfshClient returns a BblfshClient.

func (*Session) Close added in v0.11.0

func (s *Session) Close() error

Close implements the io.Closer interface.

type SessionOption added in v0.11.0

type SessionOption func(*Session)

SessionOption is a function that configures the session given some options.

func WithBblfshEndpoint added in v0.11.0

func WithBblfshEndpoint(endpoint string) SessionOption

WithBblfshEndpoint configures the bblfsh endpoint of the session.

func WithSkipGitErrors added in v0.11.0

func WithSkipGitErrors(enabled bool) SessionOption

WithSkipGitErrors changes the behavior with go-git error.

type Squashable added in v0.13.0

type Squashable interface {
	// contains filtered or unexported methods
}

Squashable represents a table that can be squashed.

type Table added in v0.11.0

type Table interface {
	sql.PushdownProjectionAndFiltersTable
	// contains filtered or unexported methods
}

Table represents a gitbase table.

type TreeEntriesIter added in v0.11.0

type TreeEntriesIter interface {
	ChainableIter
	// TreeEntry returns the current tree entry. All calls to TreeEntry return the
	// same tree entries until another call to Advance. Advance should
	// be called before calling TreeEntry.
	TreeEntry() *TreeEntry
}

TreeEntriesIter is a chainable iterator that operates on Tree Entries.

func NewAllTreeEntriesIter added in v0.11.0

func NewAllTreeEntriesIter(filters sql.Expression) TreeEntriesIter

NewAllTreeEntriesIter returns an iterator that will return all tree entries that match the given filters.

func NewRepoTreeEntriesIter added in v0.13.0

func NewRepoTreeEntriesIter(repos ReposIter, filters sql.Expression) TreeEntriesIter

NewRepoTreeEntriesIter returns an iterator that will return all tree entries for every repo returned by the given iterator.

func NewTreeTreeEntriesIter added in v0.13.0

func NewTreeTreeEntriesIter(
	trees TreesIter,
	filters sql.Expression,
	virtual bool,
) TreeEntriesIter

NewTreeTreeEntriesIter returns an iterator that will return all tree entries for the trees returned by the given iterator.

type TreeEntry added in v0.11.0

type TreeEntry struct {
	TreeHash plumbing.Hash
	object.TreeEntry
}

TreeEntry is a tree entry object.

type TreesIter added in v0.13.0

type TreesIter interface {
	ChainableIter
	// Tree returns the current tree. All calls to Tree return the same tree
	// until another call to Advance. Advance should be called before calling
	// Tree.
	Tree() *object.Tree
}

TreesIter is a chainable iterator that operates on trees.

func NewAllCommitTreesIter added in v0.13.0

func NewAllCommitTreesIter(filters sql.Expression) TreesIter

NewAllCommitTreesIter returns all commit trees.

func NewCommitMainTreeIter added in v0.13.0

func NewCommitMainTreeIter(commits CommitsIter, filters sql.Expression, virtual bool) TreesIter

NewCommitMainTreeIter returns all main trees from the commits returned by the given commits iterator.

func NewCommitTreesIter added in v0.13.0

func NewCommitTreesIter(commits CommitsIter, filters sql.Expression, virtual bool) TreesIter

NewCommitTreesIter returns all trees from the commits returned by the given commits iterator.

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

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