1package repository
2
3import (
4 "io/ioutil"
5 "log"
6
7 "github.com/99designs/keyring"
8)
9
10// This is intended for testing only
11
12func CreateTestRepo(bare bool) TestedRepo {
13 dir, err := ioutil.TempDir("", "")
14 if err != nil {
15 log.Fatal(err)
16 }
17
18 var creator func(string) (*GitRepo, error)
19
20 if bare {
21 creator = InitBareGitRepo
22 } else {
23 creator = InitGitRepo
24 }
25
26 repo, err := creator(dir)
27 if err != nil {
28 log.Fatal(err)
29 }
30
31 config := repo.LocalConfig()
32 if err := config.StoreString("user.name", "testuser"); err != nil {
33 log.Fatal("failed to set user.name for test repository: ", err)
34 }
35 if err := config.StoreString("user.email", "testuser@example.com"); err != nil {
36 log.Fatal("failed to set user.email for test repository: ", err)
37 }
38
39 // make sure we use a mock keyring for testing to not interact with the global system
40 return &replaceKeyring{
41 TestedRepo: repo,
42 keyring: keyring.NewArrayKeyring(nil),
43 }
44}
45
46func SetupReposAndRemote() (repoA, repoB, remote TestedRepo) {
47 repoA = CreateGoGitTestRepo(false)
48 repoB = CreateGoGitTestRepo(false)
49 remote = CreateGoGitTestRepo(true)
50
51 remoteAddr := remote.GetPath()
52
53 err := repoA.AddRemote("origin", remoteAddr)
54 if err != nil {
55 log.Fatal(err)
56 }
57
58 err = repoB.AddRemote("origin", remoteAddr)
59 if err != nil {
60 log.Fatal(err)
61 }
62
63 return repoA, repoB, remote
64}
65
66// replaceKeyring allow to replace the Keyring of the underlying repo
67type replaceKeyring struct {
68 TestedRepo
69 keyring Keyring
70}
71
72func (rk replaceKeyring) Keyring() Keyring {
73 return rk.keyring
74}