// NewTreeFS creates a git Tree FS. The treeish should resolve to tree SHA1. func NewTreeFSRoot(repo *git.Repository, treeish string, opts *GitFSOptions) (nodefs.Node, error) { obj, err := repo.RevparseSingle(treeish) if err != nil { return nil, err } defer obj.Free() var treeId *git.Oid switch obj.Type() { case git.ObjectCommit: commit, err := repo.LookupCommit(obj.Id()) if err != nil { return nil, err } treeId = commit.TreeId() case git.ObjectTree: treeId = obj.Id() default: return nil, fmt.Errorf("gitfs: unsupported object type %d", obj.Type()) } if opts == nil { opts = &GitFSOptions{ Lazy: true, Disk: false, } } if opts.TempDir == "" { opts.TempDir, err = ioutil.TempDir("", "gitfs") if err != nil { return nil, err } } t := &treeFS{ repo: repo, opts: *opts, } root := t.newDirNode(treeId) return root, nil }