Help us shape the future of Go! Take the 2026 Go Developer Survey

git

package
v1.4.13 Latest Latest
Warning

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

Go to latest
Published: Jul 15, 2026 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Overview

Package git provides Git repository operations for registry sources.

This package implements a thin wrapper around the go-git library to enable registry resources to fetch registry data directly from Git repositories. It supports cloning repositories, checking out specific branches/tags/commits, and retrieving file contents from the repository.

Key Components:

Client Interface

The Client interface defines the core Git operations:

  • Clone: Clone public repositories to in-memory filesystem
  • GetFileContent: Retrieve specific files from repositories
  • Cleanup: Clean up in-memory repository resources

Repository information including commit hashes is tracked via the RepositoryInfo struct which is populated during clone operations.

Example Usage

client := git.NewDefaultGitClient()
config := &git.CloneConfig{
    URL:       "https://github.com/example/registry.git",
    Branch:    "main",
    Directory: "/tmp/repo",
}

repoInfo, err := client.Clone(ctx, config)
if err != nil {
    return err
}
defer client.Cleanup(repoInfo)

content, err := client.GetFileContent(repoInfo, "registry.json")
if err != nil {
    return err
}

Security Considerations

This package is designed to be used within a Kubernetes operator environment where Git repositories contain MCP server registry data. Security features include:

  • In-memory filesystem operations (no disk access)
  • Size limits on cloned repositories (max files and total size)
  • Shallow clones by default for efficiency

Future security hardening may include:

  • Repository URL validation to prevent SSRF attacks
  • Additional resource limits and timeouts
  • Secure credential management via Kubernetes secrets for private repos

Implementation Details

Current implementation uses:

  • In-memory filesystems (go-billy memfs) for all Git operations
  • LimitedFs wrapper to enforce size constraints (10k files, 100MB total)
  • Shallow clones (depth=1) for branch/tag checkouts
  • Full clones only when specific commits are requested
  • Explicit memory cleanup via Cleanup() method with GC hints

Supported features:

  • Public repository access via HTTPS
  • Branch, tag, and commit checkout
  • File content retrieval from any path in the repository

Planned features:

  • Authentication for private repositories
  • Webhook support for immediate sync triggers
  • Git LFS support for large files

Index

Constants

This section is empty.

Variables

View Source
var ErrNotImplemented = fmt.Errorf("not implemented")

ErrNotImplemented is returned when a method is not implemented.

View Source
var ErrTooBig = fmt.Errorf("file too big")

ErrTooBig is returned when a file is too big.

View Source
var ErrTooManyFiles = fmt.Errorf("too many files")

ErrTooManyFiles is returned when there are too many files.

Functions

func CreateTestRepo

func CreateTestRepo(t *testing.T, config TestRepoConfig) (string, func())

CreateTestRepo creates a temporary Git repository with the specified files and commits Returns the repository path and a cleanup function

func CreateTestRepoWithBranches

func CreateTestRepoWithBranches(
	t *testing.T, mainCommit TestRepoConfig, branches map[string]TestRepoConfig,
) (string, []string, func())

CreateTestRepoWithBranches creates a test repository with multiple branches The first commit creates the main branch, subsequent commits create additional branches Returns the repository path, branch names, and cleanup function

func CreateTestRepoWithCommits

func CreateTestRepoWithCommits(t *testing.T, commits []TestRepoConfig) (string, []plumbing.Hash, func())

CreateTestRepoWithCommits creates a test repository with multiple commits Returns the repository path, commit hashes, and cleanup function

Types

type AuthConfig added in v0.5.0

type AuthConfig struct {
	// Username is the Git username for HTTP Basic authentication
	Username string
	// Password is the Git password or personal access token
	Password string
}

AuthConfig contains authentication credentials for Git operations

type Client

type Client interface {
	// Clone clones a repository with the given configuration
	Clone(ctx context.Context, config *CloneConfig) (*RepositoryInfo, error)

	// GetFileContent retrieves the content of a file from the repository
	GetFileContent(repoInfo *RepositoryInfo, path string) ([]byte, error)

	// Cleanup removes local repository directory
	Cleanup(ctx context.Context, repoInfo *RepositoryInfo) error
}

Client defines the interface for Git operations

func NewDefaultGitClient

func NewDefaultGitClient() Client

NewDefaultGitClient creates a new defaultGitClient

type CloneConfig

type CloneConfig struct {
	// URL is the repository URL to clone
	URL string

	// Branch is the specific branch to clone (optional)
	Branch string

	// Tag is the specific tag to clone (optional)
	Tag string

	// Commit is the specific commit to clone (optional)
	Commit string

	// Auth contains optional authentication credentials
	Auth *AuthConfig
}

CloneConfig contains configuration for cloning a repository

type LimitedFs

type LimitedFs struct {
	Fs            billy.Filesystem
	MaxFiles      int64
	TotalFileSize int64
	// contains filtered or unexported fields
}

LimitedFs provides a size-limited billy.Filesystem. This is a struct, there's no constructor here. Note that LimitedFs is not thread-safe.

func (*LimitedFs) Chroot

func (*LimitedFs) Chroot(_ string) (billy.Filesystem, error)

Chroot implements billy.Filesystem.

func (*LimitedFs) Create

func (f *LimitedFs) Create(filename string) (billy.File, error)

Create implements billy.Filesystem.

func (*LimitedFs) Join

func (f *LimitedFs) Join(elem ...string) string

Join implements billy.Filesystem.

func (*LimitedFs) Lstat

func (f *LimitedFs) Lstat(filename string) (fs.FileInfo, error)

Lstat implements billy.Filesystem.

func (*LimitedFs) MkdirAll

func (f *LimitedFs) MkdirAll(filename string, perm fs.FileMode) error

MkdirAll implements billy.Filesystem.

func (*LimitedFs) Open

func (f *LimitedFs) Open(filename string) (billy.File, error)

Open implements billy.Filesystem.

func (*LimitedFs) OpenFile

func (f *LimitedFs) OpenFile(filename string, flag int, perm fs.FileMode) (billy.File, error)

OpenFile implements billy.Filesystem.

func (*LimitedFs) ReadDir

func (f *LimitedFs) ReadDir(path string) ([]fs.FileInfo, error)

ReadDir implements billy.Filesystem.

func (f *LimitedFs) Readlink(link string) (string, error)

Readlink implements billy.Filesystem.

func (*LimitedFs) Remove

func (f *LimitedFs) Remove(filename string) error

Remove implements billy.Filesystem.

func (*LimitedFs) Rename

func (f *LimitedFs) Rename(oldpath string, newpath string) error

Rename implements billy.Filesystem.

func (*LimitedFs) Root

func (f *LimitedFs) Root() string

Root implements billy.Filesystem.

func (*LimitedFs) Stat

func (f *LimitedFs) Stat(filename string) (fs.FileInfo, error)

Stat implements billy.Filesystem.

func (f *LimitedFs) Symlink(target string, link string) error

Symlink implements billy.Filesystem.

func (*LimitedFs) TempFile

func (f *LimitedFs) TempFile(dir string, prefix string) (billy.File, error)

TempFile implements billy.Filesystem.

type RepositoryInfo

type RepositoryInfo struct {
	// Repository is the go-git repository instance
	Repository *git.Repository

	// Branch is the current branch name
	Branch string

	// RemoteURL is the remote repository URL
	RemoteURL string
	// contains filtered or unexported fields
}

RepositoryInfo contains information about a Git repository

type TestRepoConfig

type TestRepoConfig struct {
	Files  map[string]string // Map of filename to content
	Author *object.Signature // Author for commits (uses default if nil)
}

TestRepoConfig contains configuration for creating a test repository

Jump to

Keyboard shortcuts

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