~edwargix/git.sr.ht

8dad611753666dd5439ea486bf11429de917a1df — Drew DeVault 5 years ago 1e5a567
(Partially) Rig up tree.entries
2 files changed, 26 insertions(+), 29 deletions(-)

M api/graph/model/tree.go
M api/graph/schema.resolvers.go
M api/graph/model/tree.go => api/graph/model/tree.go +14 -28
@@ 40,7 40,20 @@ func (ent *TreeEntry) Object() Object {
	return obj
}

func (tree *Tree) Entries(count *int, next *string) []*TreeEntry {
func (tree *Tree) Entry(path string) *TreeEntry {
	ent, err := tree.tree.FindEntry(path)
	if err == object.ErrEntryNotFound {
		return nil
	}
	return &TreeEntry{
		Name: ent.Name,
		Mode: int(ent.Mode),
		hash: ent.Hash,
		repo: tree.repo,
	}
}

func (tree *Tree) Entries() []*TreeEntry {
	entries := tree.tree.Entries[:]
	sort.SliceStable(entries, func(a, b int) bool {
		return entries[a].Name < entries[b].Name


@@ 56,36 69,9 @@ func (tree *Tree) Entries(count *int, next *string) []*TreeEntry {
		}
	}

	if next != nil {
		for i, ent := range qlents {
			if ent.Name == *next {
				qlents = qlents[i+1:]
				if len(entries) > *count {
					qlents = qlents[:*count]
				}
				return qlents
			}
		}
	}
	if len(qlents) > *count {
		qlents = qlents[:*count]
	}
	return qlents
}

func (tree *Tree) Entry(path string) *TreeEntry {
	ent, err := tree.tree.FindEntry(path)
	if err == object.ErrEntryNotFound {
		return nil
	}
	return &TreeEntry{
		Name: ent.Name,
		Mode: int(ent.Mode),
		hash: ent.Hash,
		repo: tree.repo,
	}
}

func TreeFromObject(repo *git.Repository, obj *object.Tree) *Tree {
	return &Tree{
		Type:    ObjectTypeTree,

M api/graph/schema.resolvers.go => api/graph/schema.resolvers.go +12 -1
@@ 245,7 245,18 @@ func (r *repositoryResolver) RevparseSingle(ctx context.Context, obj *model.Repo
}

func (r *treeResolver) Entries(ctx context.Context, obj *model.Tree, cursor *model.Cursor) ([]*model.TreeEntry, error) {
	panic(fmt.Errorf("tree.entries: not implemented"))
	if cursor == nil {
		// TODO: Filter?
		cursor = model.NewCursor(nil)
	}

	// TODO: Implement cursor properly
	entries := obj.Entries()
	if len(entries) > cursor.Count {
		entries = entries[:cursor.Count]
	}

	return entries, nil
}

func (r *userResolver) Repositories(ctx context.Context, obj *model.User, cursor *model.Cursor, filter *model.Filter) (*model.RepositoryCursor, error) {