From 7e624857a3c57e927d27ecab4dea8ef20d90159b Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 7 Jun 2026 11:11:36 +0000 Subject: object/tree: Add basic tree functions --- object/tree/tree.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 object/tree/tree.go (limited to 'object/tree/tree.go') diff --git a/object/tree/tree.go b/object/tree/tree.go new file mode 100644 index 00000000..431df649 --- /dev/null +++ b/object/tree/tree.go @@ -0,0 +1,35 @@ +package tree + +import ( + "slices" + + "lindenii.org/go/furgit/object/id" + "lindenii.org/go/furgit/object/tree/mode" +) + +// Tree represents a fully materialized Git tree object. +// +// The zero value is an empty tree. +// Entries are stored sorted by Git tree ordering and are duplicate-free; +// use [Tree.Insert] to add entries and [Tree.Entries] to read them. +// +// Labels: MT-Unsafe. +type Tree struct { + entries []Entry +} + +// Entry represents a single entry in a tree. +type Entry struct { + Mode mode.Mode + Name string + ID id.ObjectID +} + +// Entries returns a copy of the tree's entries in Git tree order. +// +// Mutating the returned slice does not affect the tree. +// +// Labels: Life-Independent. +func (tree *Tree) Entries() []Entry { + return slices.Clone(tree.entries) +} -- cgit v1.3.1-10-gc9f91