138 lines
2.9 KiB
Go
138 lines
2.9 KiB
Go
package git
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestTreeEntryById(t *testing.T) {
|
|
t.Parallel()
|
|
repo := createTestRepo(t)
|
|
defer cleanupTestRepo(t, repo)
|
|
|
|
_, treeID := seedTestRepo(t, repo)
|
|
|
|
tree, err := repo.LookupTree(treeID)
|
|
checkFatal(t, err)
|
|
|
|
id, err := NewOid("257cc5642cb1a054f08cc83f2d943e56fd3ebe99")
|
|
checkFatal(t, err)
|
|
|
|
entry := tree.EntryById(id)
|
|
|
|
if entry == nil {
|
|
t.Fatalf("entry id %v was not found", id)
|
|
}
|
|
}
|
|
|
|
func TestTreeBuilderInsert(t *testing.T) {
|
|
t.Parallel()
|
|
repo := createTestRepo(t)
|
|
defer cleanupTestRepo(t, repo)
|
|
|
|
subTree, err := repo.TreeBuilder()
|
|
if err != nil {
|
|
t.Fatalf("TreeBuilder: %v", err)
|
|
}
|
|
defer subTree.Free()
|
|
|
|
odb, err := repo.Odb()
|
|
if err != nil {
|
|
t.Fatalf("repo.Odb: %v", err)
|
|
}
|
|
blobId, err := odb.Write([]byte("hello"), ObjectBlob)
|
|
if err != nil {
|
|
t.Fatalf("odb.Write: %v", err)
|
|
}
|
|
if err = subTree.Insert("subfile", blobId, FilemodeBlobExecutable); err != nil {
|
|
t.Fatalf("TreeBuilder.Insert: %v", err)
|
|
}
|
|
treeID, err := subTree.Write()
|
|
if err != nil {
|
|
t.Fatalf("TreeBuilder.Write: %v", err)
|
|
}
|
|
|
|
tree, err := repo.LookupTree(treeID)
|
|
if err != nil {
|
|
t.Fatalf("LookupTree: %v", err)
|
|
}
|
|
|
|
entry, err := tree.EntryByPath("subfile")
|
|
if err != nil {
|
|
t.Fatalf("tree.EntryByPath(%q): %v", "subfile", err)
|
|
}
|
|
|
|
if !entry.Id.Equal(blobId) {
|
|
t.Fatalf("got oid %v, want %v", entry.Id, blobId)
|
|
}
|
|
}
|
|
|
|
func TestTreeWalk(t *testing.T) {
|
|
t.Parallel()
|
|
repo, err := OpenRepository("testdata/TestGitRepository.git")
|
|
checkFatal(t, err)
|
|
treeID, err := NewOid("6020a3b8d5d636e549ccbd0c53e2764684bb3125")
|
|
checkFatal(t, err)
|
|
|
|
tree, err := repo.LookupTree(treeID)
|
|
checkFatal(t, err)
|
|
|
|
var callCount int
|
|
err = tree.Walk(func(name string, entry *TreeEntry) error {
|
|
callCount++
|
|
|
|
return nil
|
|
})
|
|
checkFatal(t, err)
|
|
if callCount != 11 {
|
|
t.Fatalf("got called %v times, want %v", callCount, 11)
|
|
}
|
|
}
|
|
|
|
func TestTreeWalkSkip(t *testing.T) {
|
|
t.Parallel()
|
|
repo, err := OpenRepository("testdata/TestGitRepository.git")
|
|
checkFatal(t, err)
|
|
treeID, err := NewOid("6020a3b8d5d636e549ccbd0c53e2764684bb3125")
|
|
checkFatal(t, err)
|
|
|
|
tree, err := repo.LookupTree(treeID)
|
|
checkFatal(t, err)
|
|
|
|
var callCount int
|
|
err = tree.Walk(func(name string, entry *TreeEntry) error {
|
|
callCount++
|
|
|
|
return TreeWalkSkip
|
|
})
|
|
checkFatal(t, err)
|
|
if callCount != 4 {
|
|
t.Fatalf("got called %v times, want %v", callCount, 4)
|
|
}
|
|
}
|
|
|
|
func TestTreeWalkStop(t *testing.T) {
|
|
t.Parallel()
|
|
repo, err := OpenRepository("testdata/TestGitRepository.git")
|
|
checkFatal(t, err)
|
|
treeID, err := NewOid("6020a3b8d5d636e549ccbd0c53e2764684bb3125")
|
|
checkFatal(t, err)
|
|
|
|
tree, err := repo.LookupTree(treeID)
|
|
checkFatal(t, err)
|
|
|
|
var callCount int
|
|
stopError := errors.New("stop")
|
|
err = tree.Walk(func(name string, entry *TreeEntry) error {
|
|
callCount++
|
|
|
|
return stopError
|
|
})
|
|
if err != stopError {
|
|
t.Fatalf("got error %v, want %v", err, stopError)
|
|
}
|
|
if callCount != 1 {
|
|
t.Fatalf("got called %v times, want %v", callCount, 1)
|
|
}
|
|
}
|