git_test.go 2.82 KB
Newer Older
Vicent Marti's avatar
Vicent Marti committed
1 2 3 4
package git

import (
	"io/ioutil"
5
	"os"
Jesse Ezell's avatar
Jesse Ezell committed
6
	"path"
Jesse Ezell's avatar
Jesse Ezell committed
7
	"testing"
Vicent Marti's avatar
Vicent Marti committed
8 9 10
	"time"
)

11 12 13 14 15 16 17 18 19 20 21 22
func cleanupTestRepo(t *testing.T, r *Repository) {
	var err error
	if r.IsBare() {
		err = os.RemoveAll(r.Path())
	} else {
		err = os.RemoveAll(r.Workdir())
	}
	checkFatal(t, err)

	r.Free()
}

Vicent Marti's avatar
Vicent Marti committed
23 24 25 26 27 28 29 30
func createTestRepo(t *testing.T) *Repository {
	// figure out where we can create the test repo
	path, err := ioutil.TempDir("", "git2go")
	checkFatal(t, err)
	repo, err := InitRepository(path, false)
	checkFatal(t, err)

	tmpfile := "README"
Jesse Ezell's avatar
Jesse Ezell committed
31
	err = ioutil.WriteFile(path+"/"+tmpfile, []byte("foo\n"), 0644)
Jesse Ezell's avatar
Jesse Ezell committed
32

Jesse Ezell's avatar
Jesse Ezell committed
33 34 35 36 37 38 39 40 41 42
	checkFatal(t, err)

	return repo
}

func createBareTestRepo(t *testing.T) *Repository {
	// figure out where we can create the test repo
	path, err := ioutil.TempDir("", "git2go")
	checkFatal(t, err)
	repo, err := InitRepository(path, true)
Vicent Marti's avatar
Vicent Marti committed
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
	checkFatal(t, err)

	return repo
}

func seedTestRepo(t *testing.T, repo *Repository) (*Oid, *Oid) {
	loc, err := time.LoadLocation("Europe/Berlin")
	checkFatal(t, err)
	sig := &Signature{
		Name:  "Rand Om Hacker",
		Email: "random@hacker.com",
		When:  time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
	}

	idx, err := repo.Index()
	checkFatal(t, err)
	err = idx.AddByPath("README")
	checkFatal(t, err)
61 62
	err = idx.Write()
	checkFatal(t, err)
Vicent Marti's avatar
Vicent Marti committed
63 64 65 66 67 68 69 70 71 72 73
	treeId, err := idx.WriteTree()
	checkFatal(t, err)

	message := "This is a commit\n"
	tree, err := repo.LookupTree(treeId)
	checkFatal(t, err)
	commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
	checkFatal(t, err)

	return commitId, treeId
}
Carlos Martín Nieto's avatar
Carlos Martín Nieto committed
74

Mark Probst's avatar
Mark Probst committed
75 76 77 78
func pathInRepo(repo *Repository, name string) string {
	return path.Join(path.Dir(path.Dir(repo.Path())), name)
}

79 80 81 82 83 84 85 86 87 88
func updateReadme(t *testing.T, repo *Repository, content string) (*Oid, *Oid) {
	loc, err := time.LoadLocation("Europe/Berlin")
	checkFatal(t, err)
	sig := &Signature{
		Name:  "Rand Om Hacker",
		Email: "random@hacker.com",
		When:  time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
	}

	tmpfile := "README"
Mark Probst's avatar
Mark Probst committed
89
	err = ioutil.WriteFile(pathInRepo(repo, tmpfile), []byte(content), 0644)
90 91 92 93 94 95
	checkFatal(t, err)

	idx, err := repo.Index()
	checkFatal(t, err)
	err = idx.AddByPath("README")
	checkFatal(t, err)
96 97
	err = idx.Write()
	checkFatal(t, err)
98 99 100
	treeId, err := idx.WriteTree()
	checkFatal(t, err)

101 102 103 104 105
	currentBranch, err := repo.Head()
	checkFatal(t, err)
	currentTip, err := repo.LookupCommit(currentBranch.Target())
	checkFatal(t, err)

106 107 108
	message := "This is a commit\n"
	tree, err := repo.LookupTree(treeId)
	checkFatal(t, err)
109
	commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree, currentTip)
110 111 112 113
	checkFatal(t, err)

	return commitId, treeId
}
Jesse Ezell's avatar
Jesse Ezell committed
114

Carlos Martín Nieto's avatar
Carlos Martín Nieto committed
115
func TestOidZero(t *testing.T) {
116
	t.Parallel()
Carlos Martín Nieto's avatar
Carlos Martín Nieto committed
117 118 119 120 121 122
	var zeroId Oid

	if !zeroId.IsZero() {
		t.Error("Zero Oid is not zero")
	}
}
123 124

func TestEmptyOid(t *testing.T) {
125
	t.Parallel()
126 127 128 129 130
	_, err := NewOid("")
	if err == nil || !IsErrorCode(err, ErrGeneric) {
		t.Fatal("Should have returned invalid error")
	}
}