git2go/git_test.go

162 lines
3.6 KiB
Go
Raw Normal View History

2013-04-16 16:18:35 -05:00
package git
import (
"io/ioutil"
"os"
2014-03-21 00:54:18 -05:00
"path"
2014-02-27 18:36:44 -06:00
"testing"
2013-04-16 16:18:35 -05:00
"time"
)
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()
}
2013-04-16 16:18:35 -05:00
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"
2014-02-27 18:36:44 -06:00
err = ioutil.WriteFile(path+"/"+tmpfile, []byte("foo\n"), 0644)
2014-03-21 00:02:19 -05:00
2014-02-27 18:36:44 -06:00
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)
2013-04-16 16:18:35 -05:00
checkFatal(t, err)
return repo
}
// commitOpts contains any extra options for creating commits in the seed repo
type commitOpts struct {
CommitSigningCallback
}
2013-04-16 16:18:35 -05:00
func seedTestRepo(t *testing.T, repo *Repository) (*Oid, *Oid) {
return seedTestRepoOpt(t, repo, commitOpts{})
}
func seedTestRepoOpt(t *testing.T, repo *Repository, opts commitOpts) (*Oid, *Oid) {
2013-04-16 16:18:35 -05:00
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)
err = idx.Write()
checkFatal(t, err)
2013-04-16 16:18:35 -05:00
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)
if opts.CommitSigningCallback != nil {
commit, err := repo.LookupCommit(commitId)
checkFatal(t, err)
signature, signatureField, err := opts.CommitSigningCallback(commit.ContentToSign())
checkFatal(t, err)
oid, err := commit.WithSignature(signature, signatureField)
checkFatal(t, err)
newCommit, err := repo.LookupCommit(oid)
checkFatal(t, err)
head, err := repo.Head()
checkFatal(t, err)
_, err = repo.References.Create(
head.Name(),
newCommit.Id(),
true,
"repoint to signed commit",
)
checkFatal(t, err)
}
2013-04-16 16:18:35 -05:00
return commitId, treeId
}
2015-03-04 13:38:19 -06:00
func pathInRepo(repo *Repository, name string) string {
return path.Join(path.Dir(path.Dir(repo.Path())), name)
}
2014-03-20 23:56:41 -05:00
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"
2015-03-04 13:38:19 -06:00
err = ioutil.WriteFile(pathInRepo(repo, tmpfile), []byte(content), 0644)
2014-03-20 23:56:41 -05:00
checkFatal(t, err)
idx, err := repo.Index()
checkFatal(t, err)
err = idx.AddByPath("README")
checkFatal(t, err)
err = idx.Write()
checkFatal(t, err)
2014-03-20 23:56:41 -05:00
treeId, err := idx.WriteTree()
checkFatal(t, err)
currentBranch, err := repo.Head()
checkFatal(t, err)
currentTip, err := repo.LookupCommit(currentBranch.Target())
checkFatal(t, err)
2014-03-20 23:56:41 -05:00
message := "This is a commit\n"
tree, err := repo.LookupTree(treeId)
checkFatal(t, err)
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree, currentTip)
2014-03-20 23:56:41 -05:00
checkFatal(t, err)
return commitId, treeId
}
2014-03-21 00:02:19 -05:00
func TestOidZero(t *testing.T) {
t.Parallel()
var zeroId Oid
if !zeroId.IsZero() {
t.Error("Zero Oid is not zero")
}
}
2014-04-02 12:31:48 -05:00
func TestEmptyOid(t *testing.T) {
t.Parallel()
2014-04-02 12:31:48 -05:00
_, err := NewOid("")
if err == nil || !IsErrorCode(err, ErrGeneric) {
t.Fatal("Should have returned invalid error")
}
}