~edwargix/git.sr.ht

99aeb24e8ad6aa63f9f085e0fbb3af7ae6df2c73 — Drew DeVault 5 years ago f47daec
api: rig up repo { file(path: "...") }
1 files changed, 40 insertions(+), 2 deletions(-)

M api/graph/schema.resolvers.go
M api/graph/schema.resolvers.go => api/graph/schema.resolvers.go +40 -2
@@ 16,6 16,8 @@ import (
	"git.sr.ht/~sircmpwn/git.sr.ht/api/loaders"
	"git.sr.ht/~sircmpwn/gqlgen/graphql"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/object"
)

func (r *aCLResolver) Repository(ctx context.Context, obj *model.ACL) (*model.Repository, error) {


@@ 207,11 209,47 @@ func (r *repositoryResolver) Log(ctx context.Context, obj *model.Repository, cur
}

func (r *repositoryResolver) Tree(ctx context.Context, obj *model.Repository, revspec *string, path *string) (*model.Tree, error) {
	panic(fmt.Errorf("not implemented"))
	panic(fmt.Errorf("not implemented")) // TODO: Merge with File
}

func (r *repositoryResolver) File(ctx context.Context, obj *model.Repository, revspec *string, path string) (*model.Blob, error) {
	panic(fmt.Errorf("not implemented"))
	rev := plumbing.Revision("HEAD")
	if revspec != nil {
		rev = plumbing.Revision(*revspec)
	}
	hash, err := obj.Repo().ResolveRevision(rev)
	if err != nil {
		return nil, err
	}
	if hash == nil {
		return nil, fmt.Errorf("No such object")
	}
	o, err := obj.Repo().Object(plumbing.CommitObject, *hash)
	if err != nil {
		return nil, err
	}
	var (
		commit *object.Commit
		tree   *object.Tree
		ent    *object.TreeEntry
	)
	commit, _ = o.(*object.Commit)
	if tree, err = commit.Tree(); err != nil {
		panic(err)
	}
	if ent, err = tree.FindEntry(path); err != nil {
		panic(err)
	}
	if ent.Mode == filemode.Dir {
		// TODO: Merge with Tree
		return nil, fmt.Errorf("Path refers to a sub-tree, not a blob")
	}
	mo, err := model.LookupObject(obj.Repo(), ent.Hash)
	if err != nil {
		return nil, err
	}
	blob, _ := mo.(*model.Blob)
	return blob, nil
}

func (r *repositoryResolver) RevparseSingle(ctx context.Context, obj *model.Repository, revspec string) (model.Object, error) {