git_testing.go

 1package repository
 2
 3import (
 4	"io/ioutil"
 5	"log"
 6	"os"
 7	"testing"
 8)
 9
10// This is intended for testing only
11
12func CreateTestRepo(bare bool) *GitRepo {
13	dir, err := ioutil.TempDir("", "")
14	if err != nil {
15		log.Fatal(err)
16	}
17
18	// fmt.Println("Creating repo:", dir)
19
20	var creator func(string) (*GitRepo, error)
21
22	if bare {
23		creator = InitBareGitRepo
24	} else {
25		creator = InitGitRepo
26	}
27
28	repo, err := creator(dir)
29	if err != nil {
30		log.Fatal(err)
31	}
32
33	if err := repo.StoreConfig("user.name", "testuser"); err != nil {
34		log.Fatal("failed to set user.name for test repository: ", err)
35	}
36	if err := repo.StoreConfig("user.email", "testuser@example.com"); err != nil {
37		log.Fatal("failed to set user.email for test repository: ", err)
38	}
39
40	return repo
41}
42
43func CleanupTestRepos(t testing.TB, repos ...Repo) {
44	var firstErr error
45	for _, repo := range repos {
46		path := repo.GetPath()
47		// fmt.Println("Cleaning repo:", path)
48		err := os.RemoveAll(path)
49		if err != nil {
50			log.Println(err)
51			if firstErr == nil {
52				firstErr = err
53			}
54		}
55	}
56
57	if firstErr != nil {
58		t.Fatal(firstErr)
59	}
60}
61
62func SetupReposAndRemote(t testing.TB) (repoA, repoB, remote *GitRepo) {
63	repoA = CreateTestRepo(false)
64	repoB = CreateTestRepo(false)
65	remote = CreateTestRepo(true)
66
67	remoteAddr := "file://" + remote.GetPath()
68
69	err := repoA.AddRemote("origin", remoteAddr)
70	if err != nil {
71		t.Fatal(err)
72	}
73
74	err = repoB.AddRemote("origin", remoteAddr)
75	if err != nil {
76		t.Fatal(err)
77	}
78
79	return repoA, repoB, remote
80}