Path: blob/main/component/module/git/internal/vcs/git_test.go
4096 views
package vcs_test12import (3"context"4"testing"56"github.com/go-git/go-git/v5"7"github.com/go-git/go-git/v5/config"8"github.com/grafana/agent/component/module/git/internal/vcs"9"github.com/stretchr/testify/require"10)1112func Test_GitRepo(t *testing.T) {13origRepo := initRepository(t)1415// Write a file into the repository and commit it.16{17err := origRepo.WriteFile("a.txt", []byte("Hello, world!"))18require.NoError(t, err)1920_, err = origRepo.Worktree.Add(".")21require.NoError(t, err)2223_, err = origRepo.Worktree.Commit("initial commit", &git.CommitOptions{})24require.NoError(t, err)25}2627origRef, err := origRepo.CurrentRef()28require.NoError(t, err)2930newRepoDir := t.TempDir()31newRepo, err := vcs.NewGitRepo(context.Background(), newRepoDir, vcs.GitRepoOptions{32Repository: origRepo.Directory,33Revision: origRef,34})35require.NoError(t, err)3637bb, err := newRepo.ReadFile("a.txt")38require.NoError(t, err)39require.Equal(t, "Hello, world!", string(bb))4041// Update the file.42{43err := origRepo.WriteFile("a.txt", []byte("See you later!"))44require.NoError(t, err)4546_, err = origRepo.Worktree.Add(".")47require.NoError(t, err)4849_, err = origRepo.Worktree.Commit("commit 2", &git.CommitOptions{})50require.NoError(t, err)51}5253err = newRepo.Update(context.Background())54require.NoError(t, err)5556bb, err = newRepo.ReadFile("a.txt")57require.NoError(t, err)58require.Equal(t, "See you later!", string(bb))59}6061type testRepository struct {62Directory string63Repo *git.Repository64Worktree *git.Worktree65}6667func (repo *testRepository) CurrentRef() (string, error) {68ref, err := repo.Repo.Head()69if err != nil {70return "", nil71}72return ref.Name().Short(), nil73}7475func (repo *testRepository) WriteFile(path string, contents []byte) error {76f, err := repo.Worktree.Filesystem.Create(path)77if err != nil {78return err79}80defer f.Close()8182_, err = f.Write(contents)83return err84}8586// initRepository creates a new, uninitialized Git repository in a temporary87// directory. The Git repository is deleted when the test exits.88func initRepository(t *testing.T) *testRepository {89t.Helper()9091worktreeDir := t.TempDir()92repo, err := git.PlainInit(worktreeDir, false)93require.NoError(t, err)9495// Create a placeholder config for the repo.96{97cfg := config.NewConfig()98cfg.User.Name = "Go test"99cfg.User.Email = "[email protected]"100101err := repo.SetConfig(cfg)102require.NoError(t, err)103}104105worktree, err := repo.Worktree()106require.NoError(t, err)107108return &testRepository{109Directory: worktreeDir,110Repo: repo,111Worktree: worktree,112}113}114115116