Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/module/git/internal/vcs/git_test.go
4096 views
1
package vcs_test
2
3
import (
4
"context"
5
"testing"
6
7
"github.com/go-git/go-git/v5"
8
"github.com/go-git/go-git/v5/config"
9
"github.com/grafana/agent/component/module/git/internal/vcs"
10
"github.com/stretchr/testify/require"
11
)
12
13
func Test_GitRepo(t *testing.T) {
14
origRepo := initRepository(t)
15
16
// Write a file into the repository and commit it.
17
{
18
err := origRepo.WriteFile("a.txt", []byte("Hello, world!"))
19
require.NoError(t, err)
20
21
_, err = origRepo.Worktree.Add(".")
22
require.NoError(t, err)
23
24
_, err = origRepo.Worktree.Commit("initial commit", &git.CommitOptions{})
25
require.NoError(t, err)
26
}
27
28
origRef, err := origRepo.CurrentRef()
29
require.NoError(t, err)
30
31
newRepoDir := t.TempDir()
32
newRepo, err := vcs.NewGitRepo(context.Background(), newRepoDir, vcs.GitRepoOptions{
33
Repository: origRepo.Directory,
34
Revision: origRef,
35
})
36
require.NoError(t, err)
37
38
bb, err := newRepo.ReadFile("a.txt")
39
require.NoError(t, err)
40
require.Equal(t, "Hello, world!", string(bb))
41
42
// Update the file.
43
{
44
err := origRepo.WriteFile("a.txt", []byte("See you later!"))
45
require.NoError(t, err)
46
47
_, err = origRepo.Worktree.Add(".")
48
require.NoError(t, err)
49
50
_, err = origRepo.Worktree.Commit("commit 2", &git.CommitOptions{})
51
require.NoError(t, err)
52
}
53
54
err = newRepo.Update(context.Background())
55
require.NoError(t, err)
56
57
bb, err = newRepo.ReadFile("a.txt")
58
require.NoError(t, err)
59
require.Equal(t, "See you later!", string(bb))
60
}
61
62
type testRepository struct {
63
Directory string
64
Repo *git.Repository
65
Worktree *git.Worktree
66
}
67
68
func (repo *testRepository) CurrentRef() (string, error) {
69
ref, err := repo.Repo.Head()
70
if err != nil {
71
return "", nil
72
}
73
return ref.Name().Short(), nil
74
}
75
76
func (repo *testRepository) WriteFile(path string, contents []byte) error {
77
f, err := repo.Worktree.Filesystem.Create(path)
78
if err != nil {
79
return err
80
}
81
defer f.Close()
82
83
_, err = f.Write(contents)
84
return err
85
}
86
87
// initRepository creates a new, uninitialized Git repository in a temporary
88
// directory. The Git repository is deleted when the test exits.
89
func initRepository(t *testing.T) *testRepository {
90
t.Helper()
91
92
worktreeDir := t.TempDir()
93
repo, err := git.PlainInit(worktreeDir, false)
94
require.NoError(t, err)
95
96
// Create a placeholder config for the repo.
97
{
98
cfg := config.NewConfig()
99
cfg.User.Name = "Go test"
100
cfg.User.Email = "[email protected]"
101
102
err := repo.SetConfig(cfg)
103
require.NoError(t, err)
104
}
105
106
worktree, err := repo.Worktree()
107
require.NoError(t, err)
108
109
return &testRepository{
110
Directory: worktreeDir,
111
Repo: repo,
112
Worktree: worktree,
113
}
114
}
115
116