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

git

package
v0.6.0 Latest Latest
Warning

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

Go to latest
Published: Nov 10, 2025 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package git provides Git repository operations for MCPRegistry sources.

This package implements a thin wrapper around the go-git library to enable MCPRegistry 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
  • Pull: Update existing repositories (planned for future implementation)
  • GetFileContent: Retrieve specific files from repositories
  • GetCommitHash: Get current commit hash for change detection
  • Cleanup: Remove local repository directories

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. Future versions will include security hardening such as:

  • Repository URL validation to prevent SSRF attacks
  • Sandboxed Git operations
  • Secure credential management via Kubernetes secrets

Implementation Status

Current implementation supports:

  • Public repository access via HTTPS
  • Branch, tag, and commit checkout
  • File content retrieval
  • Temporary directory management

Planned features:

  • Authentication for private repositories
  • Repository caching for performance
  • 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

This section is empty.

Types

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

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
}

CloneConfig contains configuration for cloning a repository

type DefaultGitClient

type DefaultGitClient struct{}

DefaultGitClient implements GitClient using go-git

func NewDefaultGitClient

func NewDefaultGitClient() *DefaultGitClient

NewDefaultGitClient creates a new DefaultGitClient

func (*DefaultGitClient) Cleanup

func (*DefaultGitClient) Cleanup(ctx context.Context, repoInfo *RepositoryInfo) error

Cleanup removes local repository directory

func (*DefaultGitClient) Clone

func (c *DefaultGitClient) Clone(ctx context.Context, config *CloneConfig) (*RepositoryInfo, error)

Clone clones a repository with the given configuration

func (*DefaultGitClient) GetFileContent

func (*DefaultGitClient) GetFileContent(repoInfo *RepositoryInfo, path string) ([]byte, error)

GetFileContent retrieves the content of a file from the repository

type LimitedFs added in v0.5.2

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 added in v0.5.2

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

Chroot implements billy.Filesystem.

func (*LimitedFs) Create added in v0.5.2

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

Create implements billy.Filesystem.

func (*LimitedFs) Join added in v0.5.2

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

Join implements billy.Filesystem.

func (*LimitedFs) Lstat added in v0.5.2

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

Lstat implements billy.Filesystem.

func (*LimitedFs) MkdirAll added in v0.5.2

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

MkdirAll implements billy.Filesystem.

func (*LimitedFs) Open added in v0.5.2

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

Open implements billy.Filesystem.

func (*LimitedFs) OpenFile added in v0.5.2

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

OpenFile implements billy.Filesystem.

func (*LimitedFs) ReadDir added in v0.5.2

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 added in v0.5.2

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

Remove implements billy.Filesystem.

func (*LimitedFs) Rename added in v0.5.2

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

Rename implements billy.Filesystem.

func (*LimitedFs) Root added in v0.5.2

func (f *LimitedFs) Root() string

Root implements billy.Filesystem.

func (*LimitedFs) Stat added in v0.5.2

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 added in v0.5.2

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

Jump to

Keyboard shortcuts

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